советы по написанию гостевой

vanomel

Новичок
советы по написанию гостевой

Смысл этого поста - получить дельные советы по написанию гостевой книги. Дело в том, что перечитал много литературы, но везде разные версии PHP, MySQL и так далее, да и больше все лирики. Чтобы глубже понять суть программирования решил написать простенькую гостевую с использованием базы данных. Листинг привожу ниже.
Нужны советы начиная от самой идеи и до реализации конкретных задачь.
Недостатки этой книги:
- Не сохраняется форматирование абзацев (использовать тег <pre>? тогда можно написать очень длинный текст)
- нет возможности удаления сообщения.
Прошу прощения за длинный код.
 

Активист

Активист
Команда форума
1. Причем здесь "Базы данных"
2. Советы будут давать на конкретные вопросы, которых у тебя нет.
3. Для публикации кода - есть специальный раздел - http://phpclub.ru/paste/
 

Фанат

oncle terrible
Команда форума
Активист
Давай не будем так жестко с человеком, который написал в первый раз.
Можно же нарушения исправить, и тему оставить.

-~{}~ 26.11.08 11:03:

vanomel
Ну, как минимум, один конкретный вопрос у тебя есть:
- Не сохраняется форматирование абзацев (использовать тег <pre>? тогда можно написать очень длинный текст)
Почему именно <pre>?

Код выложи, действительно, на http://phpclub.ru/paste/

А с удалением непонятно, какие проблемы. удаление по своему принципу ничем не отличается от добавление - точно такое же выполнение SQL запроса по HTTP запросу. В чем конкретно трудность?
 

vanomel

Новичок
Код вот здесь. http://phpclub.ru/paste/2232
Вопрос про то, как реализовать переносы строки? Естественно, в html коде они есть, но они же не воспринимаются им - нужны <br>.
Про удаление: Если мне нужно удалить запись, которая не последняя? Что будет с айдишником? Какой командой пользоваться?
http://phpclub.ru/paste/2233
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Что будет с айдишником?
PHP FAQ: Базовые понятия MySQL и отличия от текстовых файлов.. FAQ. ID.

-~{}~ 26.11.08 11:37:

$_POST[id], $_GET[edit] заескейпь.

-~{}~ 26.11.08 11:47:

$query = "INSERT INTO $userstable VALUES
('','$_POST[name]',now(),now(),'$_SERVER[REMOTE_ADDR]','$_POST[message]'
);";
Запрос не будет выполнен, если mysql-сервер работает в strict-mode
 

vanomel

Новичок
$_GET[edit] заескейпь
т.е. нужно использовать апостроф? < ' >
В начале я так писал, но потом возникли проблемы со строкой, которую написал ты дальше - ошибку выдавал.
Какая разница использовать апостроф или нет?
 

vanomel

Новичок
Дело как раз в том, что написав все это я подумал, что наверняка есть более просты способы добиться то го же и что я зря все это делаю!
Быть может я вообще неверный способ выбрал и хранить все записи, айпишники и сообщения в одной таблице нерационально?
Может не стоит все впихивать в один файл и отдельно написать админку?
 

Фанат

oncle terrible
Команда форума
По поводу таблицы без вариантов. Больше одной тут просто не нужно. Какую причину ты видишь для того, чтобы айпишники хранить отдельно?

По поводу файлов без разницы. Хочешь сделай в одном, хочешь - в пяти. У меня все в одном, поскольку кода там как раз на один файл, 150 строк без шаблона. Но начинающим удобнее разделять по нескольким файлам. Потом увидишь, что много общего и обратно объединишь =)

Кстати, об шаблонах. Попробуй все куски, в которых преобладает HTML, вынести отдельно.
Вот тебе пример шаблона вывода сообщений:

PHP:
<table border="0" cellpadding="2" cellspacing="0" width="600">
<? foreach ($data as $row): ?> 
  <tr bgcolor="#666699">
    <td align=left><font color="white"><b><? echo $row['name'] ?></b></font></td>
    <td align=right><font color="white"><? echo $row['date'] ?></font></td>
  </tr>
  <tr bgcolor="f0f0f0">
    <td colspan=2><? echo $row['body'] ?></td>
  </tr>
  <? if($admin): ?>
  <tr>
    <td colspan=2>
      <?=$row['ip']?>  <a href="/gb/?action=edit&id=<?=$row['id']?>">редактировать</a>
    </td>
  </tr>
  <? endif ?>
<? endforeach ?>
</table>
С одной стороны, в этом шаблоне пхп код все равно присутствует, но с другой, во-первых, тут HTML в нормальном виде, а не как у тебя, как кусок пхп скрипта, в котором сам черт ногу сломит, а во-вторых, все вынесено в отдельный файл для удобного редактирования.
Сами сообщения выводятся не сразу, а сначала получены в массив, этот массив обработан, и потом уже используется в шаблоне. Так мы разделяем получение данных и их вывод - очень удобно.
 

Zetruger

ivan.chistyakov.name
я жутко извиняюсь за оффтоп
и я понимаю что стиль это вещь субъективная

но

Бога ради, если ключ элемента массива задан строкой, указывайте ее в одинарных кавычках.

Как НЕ надо делать:
if (empty($_POST[name]) or empty($_POST[message]))
Делайте так:
if (empty($_POST['name']) || empty($_POST['message']))

Объясняю почему!!! Потому что без кавычек это не строка, а ИМЯ КОНСТАНТЫ. В PHP при отсутствие константы возвращается строка, содержащая имя этой константы, так что как бы через одно место, но код работать будет.

<?php
$z = array('name' => 'User');
echo $z[name];
define('name', 'qwe');
echo $z[name]; // Undefined index: qwe
?>

Более того!!! PHP генерирует Notice: Use of undefined constant name - assumed 'name' in C:\wamp\www\1.php on line 3

Включите вывод ошибок, так будет программировать намного легче.
 

vanomel

Новичок
Я вот тут переделал http://phpclub.ru/paste/index.php?show=2239 и есть несколько вопросов даже после разъяснений.
- addslashes (htmlspecialchars(stripslashes($txt_string), ENT_NOQUOTES)); решит все проблемы с хитрыми пользователями?
- $str="<br> IP: ".$row['ip']." <a
href=$path?from=$g_from&action=retype&id=".$row['id']."$add_str>edit</a> как верно обращаться к элементам массива в этом случае? если писать "имя['элемент']", то происходит ошибка. Почему?
Что ещё стоит добавить или убрать?
 

Фанат

oncle terrible
Команда форума
- [куча шаманских заклинаний] решит все проблемы с хитрыми пользователями?
нет
происходит ошибка. Почему?
ты общаешься с людьми, а не и интерпретаторами PHP
поэтому желательно приводить здесь ТЕКСТ ошибки.
Скорее всего ты не в курсе, но текст ошибки несет обычно какой-то смысл, а не просто пишет "тупица ,у тебя руки кривые, гыгы! переделывай"

-~{}~ 04.12.08 20:21:

PHP FAQ: Безопасность PHP скриптов
 
Сверху