Задачки на PHP

9.72K
.
(\/)____o_O____(\/)
# jaras (26.01.2014 / 14:41)
Koenig, В текством файле типа gost.txt
ну да
.
(\/)____o_O____(\/)

с файлами некоторые моменты посложнее реализовать, например постраничку, но если осилить далее это пригодиться чтоб сам функционал понять

.
reaper
http://rghost.ru/51937071
Для вендоюзеров есть console.bat
Для линуксоидов:
Проверить, что файл bin/console имеет окончания строк lf
chmod +x bin/console

И генерируем js генератор роутов:
console js-url

Запуск сервера:
Для вендузятников:
php bin/server
Для линуксоидов:
Опять же проверить окончания строк, сделать файл исполняемым и запустить: bin/server

SQL-Дамп в файле dump.sql

Вроде ничего не забыл.
Ах да, проверьте .htaccess в public, возможно rewritebase надо будет поправить.
И извне должно быть только видно содержимое директория public
.

шта?

.
# Fenixrus (26.01.2014 / 14:52)
шта?
предыдущую страницу зачитай.
.

Аж целых три раза скачали и ни одного комментария

.
(\/)____o_O____(\/)

reaper, не люблю фв, и код их разбирать, если бы полностью свое что нибудь, но не фв гостевая, суть задачей решить просто, понять код новичкам и сделать для себя выводы, там же надо копаться

.

Так это же микро-фв. В /vendor/ вообще можно даже не заглядывать.
Пожалуй соглашусь. Вот если бы я написал свой фв, сокет-сервак, фоллбэк для старых арбузеров, не поддерживающих веб-сокеты, тогда можно было бы о хоть чём-то говорить.

.
jaras
Мастер PHP

Вот изменил гостевую всё поместил в один файл

код (+/-)
<?php

/**
 * @Автор Jaras
 * @Год 2.2.2014
 * @Связь jaras.com@bk.ru
 * @Цена Бесплатно
 * @Специально для johncms.com 
 */
 
?>
<head>

<meta http-equiv="content-type" content="text/html" />
    
<meta name="author" content="jaras" />

<title>Гостевая книга</title>
    
</head>

<style>
body {
    background-color: #766EA8;
    color: #000000;
    padding: 2px;
    font-family: Verdana, Arial, Helvetica, Sans-serif;
    font-size: 13px;
}

.title {
    background-color: #97371F;
    color: #F89969;
    border: 1px solid #86311C;
    padding: 6px;
}

.title a {
    color: #F89969;
}

.phdr {
    background-color: #F89969;
    padding: 4px;
    border: 1px solid #B36E4C;
    color: #241F46;
}

.input {
    background-color: #F89969;
    padding: 3px;
    border: 1px solid #B36E4C;
    color: #97371F;
}

.menu {
    background-color: #FECC99;
    padding: 4px;
    color: #241F46;
    border-left: 1px solid #DEB286;
    border-right: 1px solid #DEB286;
    border-bottom: 1px solid #DEB286;
}

p {
    padding: 0px;
}

.name {
    font-weight: bold;
}
</style>

<body>

<?php

//Сервер Mysql
$dblocalhost = 'localhost';

//Пользователь Mysql
$dbuser = 'root';

//Пароль Mysql
$dbpassword = '';

//БЗ Mysql
$dbname = "gost";

//Подключаемся к Базе данных
$db = mysql_connect($dblocalhost,$dbuser,$dbpassword) or die ('Нет соединение с базой данных');

//Выбираем бд
mysql_select_db($dbname,$db) or die ("Нет такой БД");

//Проверяем данные
function antihac($q){
    
$q=strip_tags($q);
    
    $q=stripslashes($q);
    
    return mysql_real_escape_string($q);

}
//Заголовки Сама форма


switch (isset($_POST['link'])){ 

                        default:

echo '<div class="title">Гостевая книга</div>
               
               <div class="phdr">Форма для отправки сообщение</div>

               <div class="menu"> <form action="" method="post">
               
               <p>Введите ваше имя max(30)</p>
               
               <input name="name" type="text" size="20" maxlength="30" class="input"/><br />
               
               <p>Сообщение max(250)</p>
               
               <textarea name="text" cols="20" rows="5" maxlength="250" class="input"></textarea><br />

               <input name="link" type="hidden" />

               <input type="submit" value="Отправить" />
</form></div>';  

//Вывод записей последних

$sql = mysql_query("SELECT id,name,text,time FROM `guest` ORDER BY id DESC",$db);

$gost = @mysql_fetch_array($sql);

$count = mysql_num_rows($sql);

echo '<div class="title"> Последние записи всего ('.$count.') </div>';

if ($gost==""){echo"<div class='menu'>Пока нет сообщений</div>";}

else {

do {
    echo "<div class='menu'>";

    echo "<span class='name'>".$gost['name']."</span>\n".$gost['time']."<br />";

    echo "Сообшение: ".$gost['text']."<br />";

    echo "</div>";

} 
    while ($gost=mysql_fetch_array($sql));
}

break;

case 'link':
    
echo '<div class="title">Гостевая книга</div>';
 
if (isset($_POST['name'])) {$name=antihac(($_POST['name'])); if ($name==NULL) {unset($name); echo "<div class='menu'>Вы не ввели своё имя</div>";}}

if (isset($_POST['text'])) {$text=antihac(($_POST['text'])); if ($text==NULL) {unset($text); echo "<div class='menu'>Вы не ввели текст сообщения</div>";}}

$time = date("j.n.Y H:i:s");

if (isset($name) & isset($text) & isset($time)) {$zapros=mysql_query("INSERT INTO `guest` SET `name` = '$name',`text` = '$text',`time` = '$time'") or die ("Нет такой таблицы");

if ($zapros==true){echo '<div class="menu">Всё ОК!!!</div>';}}

echo '<div class="title"><a href="index.php">Назад</a></div>';

break;
}

echo '<div class="title">Гостевая книга v 1.1 </div>';

?>
</body>
.

jaras, Самая главная ошибка -- это html код, работа с базой и их взаимосвязь, всё в одном месте.
Получилась этакая каша. Когда скрипт совсем не большой, то ничего страшного, но когда нужно будет написать нечто более серьёзное, то это уже будет ад.

/**
 * @Автор Jaras
 * @Год 2.2.2014
 * @Связь jaras.com@bk.ru
 * @Цена Бесплатно
 * @Специально для johncms.com 
 */

Забавно. Нигде еще не видел, чтобы в докблоках указывали цену скрипта.
Этакий закос под PHPDoc?
Рекомендую ознакомится с ним и не использовать кириллицу и любые другие не стандартные символы в коде, т.к. могут возникнуть проблемы с кодировкой да и вообще нужно быть интернациональнее.
В твоём случае это будет что-то вроде следующего:
/**
 * Simple Guestbook
 * 
 * The guestbook application example.
 * 
 * @author Jaras <jaras.com@bk.ru>
 * @license The MIT License (MIT)
 */


Далее идёт html разметка, в которой я почему-то не нашел ни доктайпа, ни <html> тега.
Очень плохо. Хорошо хоть через мета-тег указал, что это html. Только про кодировку забыл.
Форматирование ужасное. Незнаю, может это ждоновский парсер так испоганил, или это так и было, но у меня все отступы в разброс, кто куда.
Зачем после каждой строки пустая строка? Чтобы строк больше было? Хе-хе.
Именовать переменные транслитом тоже не рекомендую.
//Сервер Mysql
//Пользователь Mysql
//Пароль Mysql
//БЗ Mysql
//Подключаемся к Базе данных

Такие комментарии в коде не нужны. Они ничего ровным счётом не дают.
А "БЗ Mysql" меня сначала сбило столку. Что за БЗ? Лишь после того, как я прочёл название переменной, я понял, что это должно быть имя базы данных. Тогда может быть будет лучше сказать "БД"?

Почему do while, а не while() {} ?
do while лучше использовать там, где это действительно необходимо.
И да, присваивание в условиях плохая практика, т.к. иногда это может привести к проблемам, причины которых потом сложновато будет обнаружить.
Silence оператор (@) тоже не рекомендуется использовать. Тем более в твоём случае, когда ты получаешь данные из ресурса. Есть же возможность обработать нормально, зачем срать в логи?
Потом у тебя $gost массив, но сравниваешь со строкой. Почему? Правильнее будет подсчитать его размер и сравнить с нулём или использовать empty()
Не созданные переменные сравниваешь с null, тоже плохо. А потом их еще и удаляешь

Очень хорошо, что ты использовал strip_tags, но перед выводом через htmlspecialchars данные обработать всё-таки нужно.

Еще вспомню про форматирование. Внизу у тебя по два условия в одной строке. Удобно читается? Да и вообще половина условий так, половина сяк. Отступы не соблюдены. Погугли про стандарты оформления кода и приведи всё в порядок.

Это еще наверное не все недочёты и ошибки, которые есть. Постарайся исправить хотя бы всё, кроме самой главной ошибки, о которой я сказал в начале. А затем, если с задачей справился, можно избавляться от спагетти-кода.
Всего: 173