Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Гостевая книга |
Автор: PARROT 21.1.2005, 22:40 |
Пишу гостевую книгу, с добавлением коментариев. Ничего не получается, в базу не добавляется, вообщем финиш. база: # MySQL-Front Dump 2.5 # # Host: localhost Database: reviews # -------------------------------------------------------- # Server version 4.1.8-max # # Table structure for table 'review' # CREATE TABLE review ( id smallint(3) NOT NULL auto_increment, data date default NULL, txt text, name varchar(50) default NULL, parent smallint(3) default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; # # Dumping data for table 'review' # сам скрипт: <? mysql_connect("localhost","reviews","1538733"); mysql_select_db("reviews"); ?> <Form action="index.php" Method="POST"> <table cellpadding="0" cellspacing="0" align="center" bgcolor="#E8F0FB"> <tr> <td style="padding-right:20">Имя:</td> <td><Input Type="text" Name="name" maxlength="40" size="48"></td> </tr> <tr> <td colspan=2>Сообщение:</td> </tr> <tr> <td colspan=2 align=center><TextArea name="txt" rows=5 cols=30></TextArea></td> </tr> <tr> <td><Input Type="submit" name="send" Value="Добавить" style="cursor:hand"></td> <td align="right"><Input Type="reset" Value="Очистить" style="cursor:hand"></td> </tr> </table> </Form> <? if($send) { $data=date("Y-m-d"); mysql_query("insert into review values(' ','$data','$txt','$name',' ')"); } ?> Объясните пожалуйста. |
Автор: BIG BROTHER 21.1.2005, 23:13 |
INSERT INTO review (`data`, `txt`, `name`, `parent`) VALUES ('$data','$txt','$name',' ') используй лучше $_POST $_GET и тп |
Автор: Opik 22.1.2005, 00:36 | ||
Советую переорганизовать скрипт:
|
Автор: PARROT 22.1.2005, 21:31 |
Спасибо. Решила вопрос. Но возник еще один: Для чего и в каких случаях, и зачем употребляются ` ` Я раньше с этим не сталкивалась. |
Автор: Irokez 22.1.2005, 21:43 |
кажется ими заменяют одинарные кавычки... |
Автор: Mal Hack 22.1.2005, 22:04 |
Irokez нет. в SQL они используются для обособления имен баз, таблиц и столбцов. |
Автор: Irokez 22.1.2005, 22:13 |
Mal Hack а ... точно ... и только для этого? |
Автор: Mal Hack 22.1.2005, 22:39 |
Irokez В PHP ни разу не видел их применение. В SQL тока так. |
Автор: Gold Dragon 23.1.2005, 11:59 |
на сколько я знаю, это синтаксис самого MySQL |
Автор: IZ@TOP 23.1.2005, 12:20 |
Они обычно используются для избежания конфликтов имен столбцов и зарезервированных слов синтаксисиа MySQL. |
Автор: PARROT 23.1.2005, 20:59 |
Почему у меня не получилось как раньше : mysql_query("insert into review values(' ','$data','$txt','$name',' ')"); просто занести заполненные данные в базу, не перечисляя перед этим названия полей базы в ` ` ![]() Может причина в совпадающих полях и переменных? Тогда стоит ли использовать одинаковые имена? |
Автор: Opik 24.1.2005, 00:10 | ||
Irokez нет, не только. Mal Hack увидь: `` можно использовать для выполнения комманд, попробуй например в винде запустить файлик:
|
Автор: Mal Hack 24.1.2005, 00:19 | ||
Не знал об этом... А в линуксе команды shell так же можно вызвать? |
Автор: Opik 24.1.2005, 00:19 |
Mal Hack сорри, не проверял, думаю да. |
Автор: PARROT 24.1.2005, 00:41 | ||||
Запустила, и что он показывает? Время последнего открытия или создания файлов, данного каталога? |
Автор: Opik 24.1.2005, 00:44 | ||
PARROT он выполняет команды ms-dos
Добавлено @ 00:44 MS - dos - под виндой |
Автор: PARROT 24.1.2005, 00:46 | ||||
Да, век живи, ничего не узнаешь. По Cron, на русском языке его описание имеется? |
Автор: Opik 24.1.2005, 00:47 |
http://www.nncron.ru/nncronlt/help/RU/working/cron-format.htm http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/configtuning-cron.html |
Автор: PARROT 24.1.2005, 00:50 |
Спасибо! Прочту. |
Автор: Mal Hack 24.1.2005, 01:06 |
Opr завтра на сервере проверю + за полезную, интересную вещь... Буду еще знать, что надо обрубать в плане безопасности. |
Автор: Opik 24.1.2005, 01:08 | ||
![]() ![]() |
Автор: PARROT 28.1.2005, 10:20 |
Здравствуйте. Назрел еще один важный вопрос: Как и чем можно узнать количество просмотра комментариев, пользователями? Только большая просьба, если можно, от простого к сложному. Суть такая, есть главная страница с сообщениями, по ссылке пользователь выходит на другую страницу для просмотра оставленных комментариев к сообщению. Нужно узнать сколько раз пользователи просмотрели комментарии. ![]() |
Автор: IZ@TOP 28.1.2005, 10:26 | ||||
Да. Создать еще таблицу в которой будет два поля:
Где cmid это идентификатор комментария, а cnt количество просмотров, которое обновляется каждый раз след. образом:
Думаю так должно быть понятно что к чему, если нет, пиши, объясню что не понятно. |
Автор: PARROT 28.1.2005, 20:51 | ||||||
В базе есть поле parent, если parent=0, то это новое сообщение, а если parent=id (1, 2, и т.д.), то это комментрий к сообщению по id сообщения. А без создания дополнительной таблицы никак не обойтись? Я согласна на создание дополнительной таблицы, если это необходимо, глвное в этом случае не запутаться. ![]() |
Автор: IZ@TOP 29.1.2005, 21:06 |
PARROT, вообще-то лучше делать для комментов отдельную таблицу. Можно без создания доп. таблицы, просто добавить поле к основной таблице cnt_view_comments, значение которого увеличевается при просмотре комментариев. |
Автор: PARROT 30.1.2005, 00:47 |
Добавила в базу для подсчета комментариев следующее поле cnt int(11) not null default '0', соответственно после поля parent, далее, если я правильно поняла, то при щелчке на заголовок сообщение открывается другая страница с основным сообщением и добавленными к нему комментариями, только вот не желает он считать... вот код: <table width=700 align=center> <tr> <td align=right><a href="add.php"><img src="img/nt.gif" border=0></a></td> </tr> </table> <? $db=mysql_pconnect("localhost","reviews","1538733"); mysql_select_db("reviews"); $res=@mysql_query("SELECT id,data,caption,name,txt FROM review WHERE id='$idp'"); for($i=0;$i<mysql_num_rows($res);$i++) { $mas=mysql_fetch_row($res); $mas[1]=stripslashes($mas[1]); $mas[2]=stripslashes($mas[2]); $mas[3]=stripslashes($mas[3]); $mas[4]=stripslashes($mas[4]); $up=@mysql_query("UPDATE review SET cnt = cnt+1 where parent = '$idp'"); ?> <table width=700 align=center border border bordercolor=silver style=border-collapse:collapse cellpadding=0 cellspacing=0> <tr> <td rowspan=3 width=200 align=center><b><? echo $mas[3]; ?></b></td> <td style='padding-left:10'><u><b>дата</b></u> <? echo $mas[1]; ?></td> </tr> <tr> <td style='padding-left:10'><? echo $mas[2]; ?></td> </tr> <tr> <td style='padding-left:10'><? echo $mas[4]; ?></td> </tr> <? } $res1=@mysql_query("SELECT id,data,caption,name,txt FROM review WHERE parent='$idp'"); for($i=0;$i<mysql_num_rows($res1);$i++) { $mas_com=mysql_fetch_row($res1); $mas_com[1]=stripslashes($mas_com[1]); $mas_com[2]=stripslashes($mas_com[2]); $mas_com[3]=stripslashes($mas_com[3]); $mas_com[4]=stripslashes($mas_com[4]); ?> <tr> <td rowspan=3 width=200 align=center><b><? echo $mas_com[3]; ?></b></td> <td style='padding-left:10'><u><b>дата</b></u> <? echo $mas_com[1]; ?></td> </tr> <tr> <td style='padding-left:10'><? echo $mas_com[2]; ?></td> </tr> <tr> <td style='padding-left:10'><? echo $mas_com[4]; ?></td> </tr> <? } ?> </table> <table width=700 align=center> <tr> <td align=right><a href=add.php?idp=<? echo $mas[0]; ?> ><img src="img/dc.gif" border=0></a></td> </tr> </table> Насколько правильно я воткнула нужную строчку, незнаю, знаю точно что считать не желает. Спасите Попугая! Объясните пожалуйста. |
Автор: PARROT 30.1.2005, 01:33 |
Спасибо IZ@TOP , все работает! Догадалась сама, хоть и методом тыка, пока. Теперь мне осталось дописать проверку на заполнение полей и соединить все с регистрацией пользователя. Вопрос 1. В каком формате можно и нужно хранить пароль? md5() или можно в открытую? А если пользователь забыл пароль, то придется генерировать новый и добавлять его в базу по мылу или имени? Что проще? Потом, хочется еще, чтобы пользователи смогли загружать свои аватары (это у вас так называется), как это правильно сделать? Только не говори, что вопросов много, это еще не все! |
Автор: Mal Hack 30.1.2005, 02:00 | ||||
ну в открытую точно хранить нельзя, а вот быбор алгоритма хэширования - как твоей душе угодно.
Как минимум - генерировать новый пасс, писать на место старого и отсылать на мыло. |
Автор: IZ@TOP 30.1.2005, 12:21 | ||||||
Желательно с подтверждением, как на этом форуме.
Прочти внимательно это http://forum.vingrad.ru/index.php?showtopic=11017 . Аватары храни в отдельной папке, имена аватаров должны быть названы в соответствии с ID пользователя (что-то вроде как в IBP av-1239.gif).
У тебя же вроде как я понял комментарии к гостевой книге хранятся в тойже таблице что и сами сообщения, и parent связывает их с сообщением в гостевой книге? Тогда тебе нужно не по parent cnt+1, а по id записи комментарии которой в данный момент просматривают. |
Автор: PARROT 30.1.2005, 13:01 |
По сути я хочу сделать гостевую (форум) похожую на ваш форум: Поэтому возник еще один вопрос (правда о реализации его я еще сама не думала, лучше спросить...) В меню вашего форума есть: Тема|Автор|Ответов|Просмотров|Обновление Я уже реализовала с вашей помощью все меню, кроме обновления, то есть даты обновления последнего комментария к сообщению. Вопрос: Как это реализовать? Можно пример, простой. С подсказкой лучше думается. Спасибо! ![]() |
Автор: PARROT 30.1.2005, 13:19 |
И еще... Добавленные сообщения выводятся массивом: if (!isset($s)) $s=1; $s=$s-1; echo"<center>"; $res4=mysql_query("select count(id) from review WHERE parent=0"); $num=mysql_fetch_row($res4); $numstr=ceil($num[0]/10); for($i=0; $i<$numstr; $i++){ $start=$i*10+1; $stop=($i+1)*10; if($stop>$num[0]) {$stop=$num[0];} if($start!=$stop) { print "<a href=index.php?s=$start style='text-decoration:none'>[$start - $stop]</a> "; } else{ print "<a href=index.php?s=$start style='text-decoration:none'>[$start]</a> "; } } И печатаются [1-10] [11-20] и т. д. Данный вариант меня не очень устраивает, хочу чтобы на одной странице было 10 сообщений, но при этом печаталась [1], следующие 10 сообщений [2], но незнаю как правильно изменить скрипт, пыталась... Пока тщетно. Объясните пожалуйста. |
Автор: IZ@TOP 30.1.2005, 13:21 |
FAQ: http://forum.vingrad.ru/index.php?showtopic=25984 |
Автор: Mal Hack 30.1.2005, 16:53 | ||
Это уже как максимум... |
Автор: PARROT 30.1.2005, 17:06 | ||
![]() |
Автор: IZ@TOP 30.1.2005, 23:02 | ||||||
Ну так и бери из базы самое свежее сообщение! например есть у нас таблица с сообщениями:
В поле thread_id, допустим, хранится идентификатор темы, в поле lastupdate записанный timestamp последнего сообщения (то есть мы туда записываем результат работы функции time()), далее выбираем все самые свежие записи для всех имеющихся тем:
Получаем данные следующего типа:
Ну и т.п. Добавлено @ 23:05 ЗЫ этот запрос вернет не просто последний ответ в тему, а вернет все последние ответы во все темы. Можно конечно отобрать по ID, тогда надо просто добавить условие на отбор по thread_id. Добавлено @ 23:05 PARROT, ты только потом обязательно покажи свое твоерение. |
Автор: PARROT 30.1.2005, 23:34 |
Обязательно покажу. Обновление доделаю, выложу к себе на сервер, остальное по мере дописывания. Мы еще вместе помучаемся, надеюсь. Вопрос: Как добавляются плюсы в репутацию? У меня не получилось добавить. |
Автор: IZ@TOP 31.1.2005, 01:32 |
PARROT, по достижении 100 постов и более ![]() |
Автор: PARROT 31.1.2005, 12:05 | ||
IZ@TOP, я вам хотела добавить ++++, много, за помощь постоянную. |
Автор: IZ@TOP 31.1.2005, 12:15 |
PARROT, думаю это еще успеется ![]() ![]() Так, ладно, давайте приедрживаться темы и не разводить здесь флейм ![]() |
Автор: PARROT 31.1.2005, 13:09 | ||
Пивом так пивом, без вопросов! |
Автор: PARROT 31.1.2005, 20:19 |
С обновлением я справилась, завтра займусь защитой и сразу возник вопрос: Как защитить форму от обновления по F5 ? ![]() |
Автор: IZ@TOP 31.1.2005, 20:54 | ||
![]() Можно правда писать юзеру в куки хеш его сообщения и если он совпадет с хешем вновь передаваемых данных, то ни чего в базу не заносим. ![]() |
Автор: PARROT 1.2.2005, 16:28 |
IZ@TOP, защиту написала, все работает. Возник вопрос по использованию смайликов (он возникал и раньше, на что ответ был таким: Что мне это не нужно!) Вот код: <table width=900> <tr> <td align=right><a href="index.php">Посмотреть сообщения</td> </tr> </table> <? $name=$_POST['name']; $txt=$_POST['txt']; $capt=$_POST['capt']; if(isset($send) and $send=="Добавить") { if (empty($name) || empty($capt) || empty ($txt)){ echo "<center><font color=red>Не заполнены обязательные поля!</font></center>"; }else{ $text = str_replace(":smile:", "<img src='smile/smile.gif' border=0>", $text); $text = str_replace(":biggrin:", "<img src='smile/biggrin.gif' border=0>", $text); $text = str_replace(":cry:", "<img src='smile/cry.gif' border=0>", $text); $text = str_replace(":eek:", "<img src='smile/eek.gif' border=0>", $text); $text = str_replace(":razz:", "<img src='smile/razz.gif' border=0>", $text); $text = str_replace(":cool:", "<img src='smile/cool.gif' border=0>", $text); $text = str_replace(":mad:", "<img src='smile/mad.gif' border=0>", $text); $text = str_replace(":rolleyes:", "<img src='smile/rolleyes.gif' border=0>", $text); $text = str_replace(":redface:", "<img src='smile/redface.gif' border=0>", $text); $text = str_replace(":confused:", "<img src='smile/confused.gif' border=0>", $text); $text = str_replace(":wink:", "<img src='smile/wink.gif' border=0>", $text); $db=mysql_pconnect("localhost","reviews","1538733"); mysql_select_db("reviews"); $data=date("Y.m.d G:i:s"); mysql_query ("INSERT INTO review VALUES ('', '$data', '$capt', '$txt', '$name', '$idp','')"); $msg="<table width=700 border align=center border bordercolor=silver style=border-collapse:collapse><tr><td rowspan=3 valign=top align=center width=100><b>$name</b></td><td style='padding-left:10'><u><b>дата</b></u> $data</td></tr><tr><td colspan=2>$capt</td></tr><tr><td colspan=2>$txt</td></tr></table>"; } } ?> <Form action="add.php" Method="POST"> <table height=200 cellpadding="0" cellspacing="0" align="center" border bordercolor=silver style=border-collapse:collapse> <tr> <td> <table cellpadding="0" cellspacing="0" align="center"> <tr> <td style="padding-left:10">Имя:</td> <td><Input Type="text" Name="name" maxlength="40" size="48"></td> </tr> <tr> <td style="padding-left:10">тема:</td> <td><Input Type="text" Name="capt" maxlength="40" size="48"></td> </tr> <tr> <td colspan=2 align=center>Сообщение:</td> </tr> <tr> <td align=justify><img src='smile/smile.gif' border=0><img src='smile/biggrin.gif' border=0><img src='smile/cry.gif' border=0><img src='smile/eek.gif' border=0><br><img src='smile/razz.gif' border=0><img src='smile/cool.gif' border=0><img src='smile/mad.gif' border=0><img src='smile/rolleyes.gif' border=0><br><img src='smile/redface.gif' border=0><img src='smile/confused.gif' border=0><img src='smile/wink.gif' border=0></td> <td><TextArea name="txt" rows=5 cols=30></TextArea></td> </tr> <tr> <td><Input Type="submit" name=send Value="Добавить" style="cursor:hand"></td> <td align="right"><Input Type=reset Value="Очистить" style="cursor:hand"></td> </tr> </table> <input type=hidden name=idp value=<? echo $idp; ?>> </td> </tr> </table> </Form> <? echo $msg;?> Я просто даже не понимаю, как это сделать. Объясни плиз, ![]() Как их хранить, выводить и т.д. |
Автор: IZ@TOP 1.2.2005, 16:37 | ||||
PARROT, у тебя допущено несколько ошибок: 1) Для оптимизации замены смайликов испоьзуй массивы:
Как видишь, при таком обращении с кодом у нас убралось очень много лишнего ![]() 2) При замене смайлов в переменной $text у тебя появляется много одинарных кавычек в тексте. При добавлении в базу
![]() |
Автор: PARROT 1.2.2005, 20:37 |
IZ@TOP, посмотри тут мое творение, жду замечаний. http://www.admin.traktora.spb.ru/ Правда пока без регистрации... не дописала еще. ![]() |
Автор: IZ@TOP 2.2.2005, 10:51 |
В общем для начала неплохо. Чего не хватает: 1) Дизайна. 2) Переадресации на тему когда создал сообщение. 3) Если это все же гостевая, а не форм, то ответы в сообщение лучше всеже как то выделять. |
Автор: PARROT 2.2.2005, 13:29 | ||
Пускай будет форум, гостевая, как название мне не очень нравится. Вопрос: Нет Переадресации на тему когда создал сообщение, как ее сделать? Я не совсем поняла суть. Как она должна выглядеть? По поводу дизайна, я еще о нем не думала, это уже в конце, когда допишу все доконца. В голове еще мысли появились. |
Автор: IZ@TOP 2.2.2005, 14:17 | ||||
Ну как на этом форуме, когда создаешь тему, тебя переадресовывает на нее. То есть тебе после добавления записи нужно взять ее ИД (mysql_insert_id()), и переадресовать на тему:
Думаю этот пример должен быть понятен. Главное не забудь что надо делать переадресацию до любого вывода. |
Автор: Opik 2.2.2005, 15:52 |
http://www.admin.traktora.spb.ru/comment.php?idp=90 сама догадаешься? или помочь? |
Автор: IZ@TOP 2.2.2005, 16:03 |
Opr, не понял ![]() |
Автор: Opik 2.2.2005, 16:12 |
Я ответил в несуществующей теме. Добавлено @ 16:16 + Хотелось бы что бы по умолчанию при ответе тема указывалась текущая: Re: Тема. Добавлено @ 16:20 + можно "опускать" обязательные поля: http://www.admin.traktora.spb.ru/comment.php?idp=28 перед проверкой делай: trim($str) - что бы отсечь пробелы по краям |
Автор: PARROT 2.2.2005, 19:06 | ||||
Re: Тема- Я подумаю. Сегодня много работы. Что значит "опускать" обязательные поля? Перед какой проверкой делать trim($str) ? Перед записью в базу? Вообще мыслей много, надо бы разобраться и выстроить их последовательно, а то запутаюсь. ![]() Добавлено @ 19:10
В чем догадаться? Что подставив в ссылку http://www.admin.traktora.spb.ru/comment.php любой номер idp, можно создать сообщение? Да можно ![]() А как этого избежать? Исправить? |
Автор: PARROT 3.2.2005, 13:53 |
Я тут все про адресацию (header) думаю, да сейчас все работает, а стоит подключить какие-то файлы сверху и будет ошибка. Как поступить? На яваскрипте ошибок не дает. |
Автор: Opik 3.2.2005, 14:14 | ||||||
select * from topics where id = $_GET['id']; если записей нет - писать что ошибся темой))
зайди к себе на форум и сразу нажми "добавить", вылезит, что не все заполнено, вот перед этим и делай ))
подключать снизу ![]() |
Автор: IZ@TOP 3.2.2005, 16:47 | ||
PARROT, даю совет всех времен и народов. В начале файла который будет запущен из браузера и в котором могут быть проблемы с передачей заголовков используем функцию ob_start:
|
Автор: Kurt 3.2.2005, 17:23 |
PARROT Все сообщения при просмотре через Opera представляют собой набор нечитаемых каракулей. В IE все ОК. Разберись, пожалуйста, с кодировкой. |
Автор: PARROT 3.2.2005, 18:02 | ||
До кодировки как и до дизайна дело еще не дошло, с этим не так плохо, как с программированием на php, этот вопрос сейчас главный! ![]() |
Автор: PARROT 3.2.2005, 18:15 | ||||
Исправила все кроме re: тема Не доходит пока. Прошу подсказки. ![]() Добавлено @ 18:22 Бред какой-то, переадресация не работает, просьба исправить, моя голова на сегодня соображать видимо закончила, если можно еще, объяснить ошибки:
|
Автор: IZ@TOP 4.2.2005, 10:16 | ||
Эх... вот, я немного переделал.
|
Автор: PARROT 4.2.2005, 16:08 |
Спасибо большое IZ@TOP. Почти все работает. ![]() Ща еще доковыряю, немного осталось. Вот, доковыряла, требует проверки и дальнейших советов. |
Автор: IZ@TOP 4.2.2005, 20:41 |
PARROT, дизайн требует доработки ![]() |
Автор: PARROT 4.2.2005, 21:34 | ||
Дизайн не главное! Пока... При нажатии на количество ответов, открывается окно с авторами и кол. комментариев добавленных пользователями. Как этого добиться? Желательно подсказку, с вашими подсказками и усилиями у меня что-то стало получаться, вошла в раж ![]() С открытием окна определенного размера проблем не будет. $coll=@mysql_query("SELECT count(name) FROM review WHERE caption=$idp"); Так? $names=mysql_fetch_row($coll); А дальше? Запуталась я помоему ![]() |
Автор: IZ@TOP 7.2.2005, 10:00 | ||
Такс, а чего непонятного? Выбираем имена всех написавших в той теме и все ![]()
По моему все очень просто ![]() |
Автор: PARROT 7.2.2005, 20:17 |
У меня еще один вопрос: Не получается правильный вывод смайликов к теме собщений, на первой странице (вообщем как у вас) вот код: $smale=@mysql_query("SELECT MAX(smile) FROM review WHERE parent=$mas[0]"); $smale=mysql_fetch_row($smale); if ($mas[7]=='') $mas[7]=$smale[0]; echo "<tr><td align=center><img src=smile/$smale[0].gif></td> Что у меня не так? Если смайликов к теме сообщения небыло добавлено, то должна быть пустая ячейка, если добавлен смайлик, то должен выводиться смайлик. У меня выводятся смайлики, а там где их нет, кресты, видимо из-за img src. |
Автор: IZ@TOP 8.2.2005, 12:47 | ||
Может так? А трабла была в запросе: для того чтобы массив в строке интерпретировался, необходимо его выделять, либо фигурными скобками, либо при помощи конкантенации (" ... ".$mas[0]." ... "). |
Автор: PARROT 9.2.2005, 13:10 |
Сделала. Как организовать редактирование сообщений? Любой юзер может редактировать любые сообщения или только свои? Желательно пример. Спасибо! |
Автор: Opik 9.2.2005, 15:33 | ||
PARROT Нужно что бы каждый мог редактировать только свои, но тут уже нужна авторизация. ну так принцип такой: PHP:
В $user - инфо о пользователе. А само редактирование. Сначала по ид считываем информацию. Потом её загружаем в форму. Потом делаем упдайт записи. |
Автор: PARROT 9.2.2005, 16:14 |
Авторизацию дописываю. Как должна выглядеть база данных для авторизации? Сколько полей должно быть? У меня сейчас: id, name, email, login, parol. Этого хватит? Как таблица для авторизации должна перекликаться с таблицей для сообщений? ![]() |
Автор: Opik 10.2.2005, 01:05 |
PARROT напрямую никак. полей по идее хватит. Остальные ты добавишь по надобности, если будет расширять скрипт ![]() |
Автор: PARROT 10.2.2005, 09:54 |
В чем лучше хранить, в Сессиях или Куках, посетителей? |
Автор: Opik 10.2.2005, 13:42 |
не знаю, как лучше, но я храню в куках, этот форум кстати, тоже ![]() |
Автор: PARROT 10.2.2005, 13:50 | ||
Хороший форум! Можно пример? На что и когда ставятся куки? И можно, все что с этим связано, именно с форумом. Я куками пользовалась только в голосовании, для запрета накручивания. Юзер зарегистрировался, вводит в форму логин и пароль, а дальше что? ![]() |
Автор: Opik 10.2.2005, 14:26 |
http://detail.phpclub.net/article/page_password2 |
Автор: PARROT 10.2.2005, 15:50 |
Для цитаты: Цитированное сообщение имеет две переменные $text - сообщение и $text1- цитируемое сообщение, в двух разных техтареа, с разными именами. Вопрос: Для $text1 нужно создавать поле в базе? Если можно без него, то как? ![]() |
Автор: Opik 10.2.2005, 16:01 |
можно без него, ведьтвбазе не хранятя коды, там только хтмл! |
Автор: PARROT 10.2.2005, 17:55 | ||
А что лучше без или с ним? Удобнее? И проще ![]() |
Автор: Opik 10.2.2005, 22:07 |
PARROT рассуждай логически. Если ты в базе хранишь в виде BBCode то при показе сообщения тебе надо делать замену на HTML, что при большом кол-ве кодов и сообщений вызовет немалую нагрузку. Так что хранить в базе надо тока HTML, вроде так объяснил) |
Автор: PARROT 12.2.2005, 13:59 |
В базе хранится значение переменных, либо записанных пользователем или... Вопрос: У меня получается слишком много файлов для добавления, редактирования и цитирования, можно ли их объединить в один файл? Если можно, то как? Я боюсь запутаться. ![]() |
Автор: Opik 12.2.2005, 16:09 |
PARROT можно. обычные условия. (if/else) |
Автор: PARROT 12.2.2005, 18:15 |
Все получилось! с переадресацией header. Спасибо IZ@TOP !![]() |
Автор: Opik 12.2.2005, 19:16 |
Я бы поставил ещё фильтр на вводимость html кода. |
Автор: PARROT 12.2.2005, 20:12 | ||
Это как? Что это такое? |
Автор: Irokez 12.2.2005, 20:21 |
htmlspecialchars(), strip_tags() |
Автор: PARROT 12.2.2005, 20:51 | ||
Это я знаю strip_tags(), эта функция вырезает теги Html А эта что делает? htmlspecialchars() К сожалению книга по php у меня на работе, мне сейчас не посмотреть. И пожалуйста пример, так легче думается. ![]() Добавлено @ 20:56 Ну вот, выложила новую версию своего форума, сильно не ругайте, а советов жду с нетерпением. Чего еще не хватает? Авторизацию еще не сделала, кроме нее еще есть недоделки. Цитирование пока не работает, я так и не поняла, как его сделать. То есть фактически оно выводится, правильно, я не поняла, нужно для цитирования заводить еще одно поле или нет. Короче еще в раздумьях. http://www.admin.traktora.spb.ru С уважением, ко всем, моим учителям! |
Автор: Irokez 12.2.2005, 21:07 |
Описание string htmlspecialchars ( string string [, int quote_style [, string charset]]) В HTML некоторые символы имеют специальное значение и для сохранения своего значения должны быть преобразованы в HTML сущности. Эта функция возвращает строку, над которой проведены некоторые из таких преобразований. Этих преобразований достаточно для большинства задач веб-программирования. Если вам нужно преобразовать все возможные сущности, используйте htmlentities(). Эта функция полезна при отображении данных, введенных пользователем, которые могут содержать нежелательные HTML тэги, например в форуме или гостевой книге. Необязательный второй аргумент quote_style определяет режим обработки одиночных и двойных кавычек. В режиме по умолчанию, ENT_COMPAT, преобразуются двойные кавычки, одиночные остаются без изменений. В режиме ENT_QUOTES преобразуются и двойные, и одиночные кавычки. а в режиме ENT_NOQUOTES и двойные, и одиночные кавычки остаются без изменений. Производятся следующие преобразования: '&' (амперсанд) преобразуется в '&' '"' (двойная кавычка) преобразуется в '"' when ENT_NOQUOTES is not set. ''' (одиночная кавычка) преобразуется в ''' только в режиме ENT_QUOTES. '<' (знак "меньше чем") преобразуется в '<' '>' (знак "больше чем") преобразуется в '>' Пример 1. Пример использования htmlspecialchars() <?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a> ?> |
Автор: Opik 13.2.2005, 17:52 |
И делать htmlspecialchars надо до занесения в базу. И перед обработкой на bbcode |
Автор: PARROT 13.2.2005, 18:03 | ||
Поняла. Завтра займусь. Меня сейчас больше волнует вопрос с цитируемым сообщением, никак не могу придти, ни к какому выбору. Нужно создать еще одно поле для цитируемого или не нужно? И еще, просьба проверить форум http://www.admin.traktora.spb.ru/index.php |
Автор: Opik 13.2.2005, 22:09 |
Нет, отдельного поля делать не надо. Добавлено @ 22:11 Хм, а почему я могу редактировать любой пост? |
Автор: PARROT 13.2.2005, 23:42 | ||
А потому как еще регистрация не сделана, можно редактировать любой пост! Цитирование вообще не работает, тоже пока. Как раз по поводу него мой вопрос: Если сделать так: то, что введено в поле, цитированное сообщение (нижнее поле) заключать в такие штуки, например: <#></#>, а то, что введено пользователем - не заключать ни в какие. И в базу писать строку:<#>цитата</#> + текст написанный пользователем. А потом делить все это при выводе, выделяя там курсивом цитату в теле которого будут определенные символы, говорящие скрипту, что эту фразу надо выделить курсивом и отделить от остального текста. И написать обработчик напиши при выводе в текстареа. А? Мысль есть, только незнаю как правильнее ее реализовать, может подскажете? Эта мысль без дополнительного поля! ![]() |
Автор: Opik 13.2.2005, 23:49 | ||||
вот что делаешь после post запроса:
ну или оформляешь html как нужно. Далее заносишь в базу и из базы показываешь сообщения никак не обрабаывая. При реактирование перед подставкой сообщения в форму делаешь обратную замену. т.е:
за правильность регулярок не ручаюсь, писал на скорую руку. только принцип. |
Автор: PARROT 14.2.2005, 00:09 |
Да... Чем дальше в лес, тем больше... Попробую. Правда поняла не доконца. Местами... |
Автор: Axxent 14.2.2005, 05:24 | ||||
Opr Практика показывает, что в базе теги действительно лучше хранить в виде, скажем, <!#Cite>цитата</!#Cite>. Почему? Потому что какой бы быстрый не был PCRE, str_replace все равно быстрее ![]() Из поля ввода в базу:
Из базы на экран:
Да, ну и обратно - из базы в поле редактирования - обратить первый код. |
Автор: IZ@TOP 14.2.2005, 09:38 |
Axxent, а теперь представь что я ввел только одну [quote] а закрывающую не поставил - что произойдет? Если использовать регулярные выражения, то такой ошибки не будет, он заменит только парные бб_коды. PARROT, думаю что лучше всего подойдет вариант Opr'a. |
Автор: PARROT 14.2.2005, 12:05 |
Попробую. Если что буду кричать SOS! Можно? Я просто само выражение не доконца поняла. Регулярными выражениями пользовалась, но помоему всего один раз, на курсах своего препода. А он объясняет так классно, что лучше ничем не пользоваться кроме if и else. ![]() |
Автор: Axxent 14.2.2005, 12:40 |
IZ@TOP А элементарная проверка при помощи strpos? Впрочем, со вложенными будут проблемы, это правда. ![]() |
Автор: Opik 14.2.2005, 12:41 |
Axxent И ты гонишься за 0.0001 работы скрипта? Зачем? Это ведь делается только при добавлении и редактировании и всё. на показ это никак не влияет ![]() PARROT конечно можно, не вопрос ![]() ссылки вдогонку: http://detail.phpclub.net/article/regexp_1 http://detail.phpclub.net/article/regexp_2 |
Автор: Axxent 14.2.2005, 12:43 |
Opr Уже не гонюсь ![]() |
Автор: Opik 14.2.2005, 13:12 |
Axxent что мешает сделать те же комментарии перед тем или иным тегом? |
Автор: PARROT 14.2.2005, 16:58 | ||
Я кричу SOS! Не поняла ничего, вот что получается, но не работает, просьба исправить и желательно объяснить:
![]() ![]() ![]() Ну вот так цитирует, но выводит цитируемое сообщение сверху и без бордюра. Такое впечатление, что оно не цитирует вовсе, а редактирует. |
Автор: Opik 15.2.2005, 00:14 |
может <table border=1>? |
Автор: PARROT 15.2.2005, 11:51 | ||
Незнаю, но помоему я так пробовала, только тут не исправила. Пойду смотреть. ![]() |
Автор: PARROT 15.2.2005, 14:35 |
Ну вообщем я нашла решение, может быть более примитивное, но мне более, пока, понятное. Без регулярок (не от того, что я их поняла, как раз наоборот). Если $mess2 запихать в таблицу, со всеми вытекающими отсюда последствиями с <br> на конце, после $mess=$mess1.$mess2; И записать все это в базу, только наверно нужно не апдейтить базу, а записывать это сообщение, вместе с цитатой, как новое, ну можно еще дату цитаты, в таблицу вписать к $mess2. (что наверно лучше делать для редактированного сообщения (отредактировал Вася 14.56)). Это уже по желанию. Тогда точно все работать будет. Тяжелый, но интересный путь, написание форума. Спасибо! Как вам мое решение задачи? Про border=1 забыла: насколько я помню, этот параметр совсем не обязателен =1, если написать просто border, бордер будет, но стандартный конечно. |
Автор: PARROT 16.2.2005, 13:36 |
Проблема остается до сих пор открытой. Что мой вариант, что ваш, правильно не работает. Мой на этапе добавления 3 цитаты, начинает глючить, а заключается это в том, что цитата есть, но она не выводится из базы. Ваша версия добавляет в базу, но выводит без бордюра и никак с этим не справится. Как он ведет себя дальше не отследить. Хотелось бы решить эту проблему, покажите пожалуйста работающий вариант (скрипт). И как все таки сообщение с цитатой должно выводиться из базы? Меня вчера эта тема довела до слез, наверно от бессилия. ![]() |
Автор: Axxent 16.2.2005, 18:30 | ||
Если версия работает, то по части оформления глянь в стили - может чего не так с классом quote? Или допиши туда (в стили) что-нибудь вроде border: 1px solid #444444; Opr Ничего не мешает. Ладно, проехали ![]() |
Автор: PARROT 16.2.2005, 20:12 | ||||
Проехали будет тогда, когда я справлюсь,(или с помощью вас), найду выход из создавшейся ситуации. Все равно спасибо! Завтра гляну. Я просто не могу кинуть и идти дальше. Я баран. ![]() Может еще какие варианты есть? |
Автор: IZ@TOP 17.2.2005, 10:14 | ||||||
PARROT, думаю что в твоем случае больше подойдет вариант предлодженный Axxent. Заносим в базу цитаты таким образом:
Класс quote определяем в таблице стилей:
При редактировании, меняем тег div.quote на ББ_Код:
|
Автор: PARROT 17.2.2005, 21:51 |
Спасибо, IZ@TOP! Ты!!! Настоящий, стоящий учитель, цены тебе нет! Только я попробую это позже. Купила новый комп, устанавливаю систему и копирую свои файлы. ![]() Неудалось изменить второй раз репутацию IZ@TOP, так вот добавляю тут: Знаешь и ждешь, что он придет, исправит, подскажет, это того стоит. |
Автор: IZ@TOP 18.2.2005, 09:38 |
![]() PARROT, думаю учительские способности тут ни при чем. Если у человека есть желание учиться и желание дойти до цели, то он рано или поздно придет. А я всего лишь помог немного быстрее добраться до желаемого ![]() |
Автор: PARROT 25.2.2005, 09:46 |
Сложная оказалась задача с цитированием, кое-как справилась. Немного по другому, нужно проверить, вечером выложу в инет. И с редактированием тоже возникли, почти такие же проблемы. Ну вообщем намучилась. Остается написать регистрацию... ![]() Ну вот, выложила свою новую версию форума, которая требует проверки. Теперь все цитирует и редактирует, вроде как надо. Но сколько там еще мелких недоделок, это ужас. Сначала добью недоделки (чтобы уже не возвращаться), потом начну дописывать регистрацию. Какие будут советы? Потом, у меня тут еще одна мысль возникла, а если юзер не зарегистрирован, он все равно может создавать сообщения, но около его собщений, всегда добавляется, что он гость, а редактировать свои сообщения он может? Или только добавлять новые? А цитировать? А редактировать? Опять кучка вопросов... ![]() |
Автор: PARROT 5.3.2005, 23:43 |
Ну что, с редактированием я несколько решила вопрос. Временно правда. Теперь редактировать юзеры могут только свои сообщения. Пора начинать писать регистрацию, сегодня прикидывала как, в мозгах... ![]() |
Автор: Opik 6.3.2005, 02:00 |
PARROT выложи мысли, мы подскажем что, и как сделать лучше ![]() |
Автор: PARROT 6.3.2005, 11:43 |
Начну писать, что будет не понятно спрошу. |
Автор: PARROT 6.3.2005, 19:48 | ||||
Начала писать, почти сразу возникли проблемы. Регистрация проходит нормально, но на страницу не войти, пишет неправильный пароль или логин и все тут. ![]() Вот код регистрации:
Вот код для входа:
Укажите на ошибки пожалуйста. ![]() |
Автор: Opik 8.3.2005, 01:24 | ||||||||
делай проверку на безопастность вводимых данных для БД ![]() т.е: $name=mysql_escape_string($_POST['name']); и т.д.
setcookie("login", $log, time()+3600); setcookie("password", md5($par), time()+3600); первое аргумент - имя куки, второй - значение, третий время жизни.. + я добавил md5 в куку пароля, не надо его хранить открытым ![]()
Ну если быть "правильным", то:
|
Автор: PARROT 8.3.2005, 14:04 |
Понятно, а в чем моя ошибка была? Почему пароль не принимается? Выдается сообщение Неправильный пароль или логин? Когда мы выбираем логин=логину пароль=паролю, пароль в каком формате должен быть запрошен если он хранится в MD5()? Как много неизведанного, но хочется узнать! |
Автор: IZ@TOP 8.3.2005, 22:06 | ||||
Небольшие замечания по форме регистрации и оформлении кода
Плюс ко всему, советую обрамлять атрибуты HTML тегов в кавычки. В общем кое какие недоработки есть, но мне кажется что все должно работать.
|
Автор: PARROT 9.3.2005, 19:28 | ||
IZ@TOP, проверь пожалуйста файл аунтификации пользователей, если надо исправь.
![]() |
Автор: IZ@TOP 10.3.2005, 12:19 |
Подправил ![]() |
Автор: PARROT 10.3.2005, 16:36 | ||
Спасибо, IZ@TOP! Код на вход пользователей исправила, теперь работает:
Я только не пойму, зачем два раза печатать вот эту строку Неправильный пароль или логин? |
Автор: IZ@TOP 11.3.2005, 13:12 | ||
PARROT, подожди, я не говорил что надо дважды его печатать... и лучше логин с паролем проверять одновременнов SQL запросе. + Проверку делать не при помощи mysql_error, а при помощи mysql_num_rows, вернет 1 - значит авторизовался, 0 - значит нет таких логина или пароля. А я вот что писал:
|
Автор: PARROT 9.11.2005, 20:21 | ||
Сорри, пришлось поднять старый свой пост, так как обнаружилась такая проблема: В последней колонке обновление даты и имени, дата обновляется на последнюю добавленную пользователем, а вот имя не меняется. Понять не могу, почему. Получается что работает до определенного момента, а именно добавив 2 ответа в топик, имя добавившего 3 ответ в пост не изменяется. Ошибки не дает. Чтобы это могло быть?
Проверить можно тут: http://www.admin.traktora.spb.ru/ Почему он прекращает выбирать последнее имя не понятно, но присходит это даже если запрос проверить в РНРадмин. |
Автор: PARROT 9.11.2005, 22:22 |
Спасибо, проблему решили с IZ@TOP ![]() |
Автор: IZ@TOP 9.11.2005, 22:36 | ||
Думаю так можно убить двух кроликов разом. MAX предназначен для работы с числами. |
Автор: Гитарист 9.1.2006, 17:53 |
Мда, весь топ просматрел!!! Приятно, что знающие люди встают на наше место и не отмахиваются от вопросов, а четко, локонично, методично объясняют!!! Только я начал PHP изучать 2 дня назат и мне многое не понятно, но как только я втянусь, я то же буду вопросы задавать!!! Можно??? Заранее спасибо!!! С уважением гитарист!!! |
Автор: PARROT 2.3.2006, 13:15 |
Ну вот продолжаю: Пока вместо регистрации решила сделать голосование для своего форума, есстественно как у нас на Винград ![]() Вопрос: Мне не совсем понятен алгоритм хранения голосов. Где их хранить? В файле не хочется, в базе, тогда как? Если максимум пунктов опроса может быть 25. Делать отдельую таблицу для голосования, со связью? Надеюсь с выводом не возникнет особых трудностей ![]() |