Задачки на PHP

9.67K
.
ДоХтор
Визуализация: (index.php)
код (+/-)
<? require_once('func.php') ?>
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>Гостевая</title>
</head>
<body>
    <div class="top">
        <h2 class="top-2">Гостевая</h2>
    </div>
    <div class="mess">
        <div class="post">
        <fieldset>
            <legend>Заполните форму</legend>
            <form action="mybook.php"  method="post">
        Введите имя(max-20)*<br />
        <input type="text" name="login" value="<?=$log_name?>" maxlength="20" />
        <span class="red"><?=$err_name?></span><br />
        Введите E-Mail(max-25)<br />
        <input type="text" name="email" value="<?=$log_mail?>" maxlength="25" />
        <span class="red"><?=$err_mail?></span><br />
        Введите сообщение*<br />
                <?=$smile?>
        <textarea rows="5" cols="47" name="msg"></textarea><br />
        <span class="red"><?=$err_txt?></span><br />
        <input type="submit" value="Отправить" />
            </form>
        </fieldset>
        </div>
        <?=$view_page?>
        <?=$view?>
        <?=$view_page?>
    </div>
    <div class="bottom">
        <p class="bottom-2">&copy;&nbsp;&Delta;&omicron;&Chi;&tau;&omicron;&rho;</p>
    </div>
</body>
</html>
.
ДоХтор
Контроллер: (mybook.php)
код (+/-)
<?php

session_start();
$data = 'data.txt';
//Обрабатываем входящие данные
if (isset($_POST)){
    require_once ('func.php');
    $login = trim(htmlspecialchars($_POST['login']));
    $email = trim(htmlspecialchars($_POST['email']));
    $msg = trim(htmlspecialchars($_POST['msg']));
    $msg = replace($msg);
    $date = date('Y.m.d - H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    //Формируем строку для записи
    $str = $email . '|' . $login . '|' . $date . '|' . $msg . '|ip: ' . $ip . "\n";
    //Сохраняем имя и email для автозаполнения полей
    $_SESSION['log'] = array($login, $email);
    //Формируем массив с ошибками
    if (empty($login)) $_SESSION['err'][0] = 'Введите имя!';
    if (!empty($email)){
        if (preg_match('/[0-9a-z_\.\-]+@[0-9a-z_\.\-]+\.[a-z]{2,4}/i', $email) == false){
            $_SESSION['err'][1] = 'Некорректный E-Mail!';
        }
    }
    if (empty($msg)) $_SESSION['err'][2] = 'Введите сообщение!';
    //Если ошибок нет,записываем строку в конец файла
    if (!empty($login) && !empty($msg) && empty($_SESSION['err'][1])){
        if (!isset($_SESSION['time']) || ($timeoff = time() - $_SESSION['time']) > 9){
            $fp = fopen($data, 'r');
            while (!feof($fp)){
                $str1 = fgets($fp, 4096);
                $arr = explode('|', $str1);
                if ($arr[3] == $msg){
                    $_SESSION['err'][2] = 'Такое сообщение уже есть в базе!';
                    break;
                }
            }
            fclose($fp);
            if (empty($_SESSION['err'][2])){
                unset($_SESSION['time']);
                file_put_contents($data, $str, FILE_APPEND);
                $_SESSION['time'] = time();
            }
        } else {
            $_SESSION['err'][2] = 'Подождите ' . ($timeoff - 10) . '- сек.';
        } //End антифлуд */
    }
}
header('Location: index.php');

?>
.

Рабочий пример

.

Лапша. Пробуй еще

.
# reaper (05.05.2014 / 19:28)
Лапша. Пробуй еще
В каком направлении хотя бы пни )
.

Модель должна оперировать только данными и только
Почитай про spl_autoload_register(), если найдешь время, то еще и про psr-0 и psr-4
Напиши простенький шаблонизатор, который сам будет заботиться о подгрузке шаблонов.

В идеале контроллер вообще ничего не должен знать о шаблоне, а только возвращать нужные данные и всё.
Хотя это конечно мало где делается, но я так теперь делаю всегда, ибо потом одной строкой в конфиге можно переопределить шаблон или же вообще в json заставить отдавать.
И лезть при этом в код котроллера уже буде ненужно.

.

Вот у тебя в контроллере есть следующее:

$fp = fopen($data, 'r');
            while (!feof($fp)){
                $str1 = fgets($fp, 4096);
                $arr = explode('|', $str1);
                if ($arr[3] == $msg){
                    $_SESSION['err'][2] = 'Такое сообщение уже есть в базе!';
                    break;
                }
            }
            fclose($fp);
            if (empty($_SESSION['err'][2])){
                unset($_SESSION['time']);
                file_put_contents($data, $str, FILE_APPEND);
                $_SESSION['time'] = time();
            }


Почему это вообще в контроллере, когда операции по работе с файлом дожны быть в модели?
А когда базу будешь юзать, то запросы к ней тоже в контроллере писать будешь?
.

Вобщем ты всё перепутал.

Модель:
getData()
setData()
isDataExists()
// etc...

Вид (У меня это обычно просто шаблон):
<p>{{ data }}</p>

Контроллер:
data = model->getData()
handle_data(data)
view->load('view', data)

.

После того, как разберешься с лапшой, попробуй сделать так, как я говорил выше. Контроллер только возвращает данные, а уже на основе конфига эти данные отдаются либо в html, либо в json

.
# reaper (05.05.2014 / 19:42)
Модель должна оперировать только данными и только
Почитай про spl_autoload_register(), если найдешь время, то еще и про psr-0 и psr-4
Напиши простенький шаблонизатор, который сам будет заботи
Я изначально хотел этот код в модели прописать, но не могу понять: как связать эту проверку, если она должна выполняться перед записью в файл? А если запись в файл у меня в контроллере, то её надо в модель перенести? Что тогда должно остаться в контроллере? Только приём данных от пользователя и редирект на модель, а модель - на визуализацию?
Всего: 173