|
|
|
| Добрый день!
У меня есть система комментариев в блоге. Пользователь нажимает на ссылку "Добавить комментарий" и переходит на страницу с двумя полями (на самом деле их больше но для простоты описания пусть их будет два): Имя и Комментарий. Так вот задача состоит в том, чтобы значение поля "Имя" после нажатия на кнопку "Прокомментировать" заносилось в куки и всегда подставлялось при следующих посещениях.
Подскажите, пожалуйста, в каком направлении двигаться? Чтобы куки не удалялись с компьютера посетителя, чтобы просто заносилось значение поля и всё, а потом подставлялось.
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 11:43)
| | Есть функция setcookie() для установки значений кукис-массива.
Есть суперглобальные массивы $_POST и $_COOKIE для чтения входных параметров.
Есть функция empty() , которой можно определить, заполнен ли каждый из них.
Чтобы куки не удалялись с компьютера посетителя, при установке указывают время устаревания.
Не то чтобы их вообще нельзя удалить, но сами не пропадут. Вы же этого хотите?
Двигаться в направлении алгоритма.
Пишите код - поглядим. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 11:52)
| | На странице с формой есть вот такоетекстовое поле "Имя":
<input type="text" name='author' value="<?=stripslashes(htmlspecialchars($author));?>" maxlength="20" id="I1" onkeyup="CheckFields()">
|
Начинаем переделывать:
<?
if (!isset($_POST['author'])) {
?>
<html>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
Имя:
<input type="text" name='author' value="<?php echo $_COOKIE['author']; ?>" maxlength="20" id="I1" onkeyup="CheckFields()">
<input type="submit" name="submit" value="Отправить">
</form>
</body>
</html>
<?
}
else {
if (!empty($_POST['author'])) {
setcookie("author", $_POST['author'], mktime()+(86400*30), "/");
}
}
?>
|
Что-то вроде этого? | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 12:18)
| | <?=stripslashes(htmlspecialchars($author)); >
Вот после этого шедевра дальше можно не продолжать. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 12:59)
| | Почему? Объясните, пожалуйста | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 13:13)
| | Нет.
Это не мой фрагмент.
Это Вы объясните, пожалуйста, с какой целью применили эту функцию в этом месте. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 13:16)
| | Я уже не помню что я там творил, и что значит функция stripslashes. Давайте забудем, что она была и оставим вот так:
htmlspecialchars($_COOKIE['author'])
|
| |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 13:27)
| | Давайте. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 13:36)
| | Замечаний два.
По логике. Почему-то в кукис из POST информация попадает - это хорошо. А вот в кукис из кукис информация не попадает - не освежается. Значит если пользователь месяц не будет писать в портал, а будет только читать - его кукис протухнет и удалится.
По коду. Присутствуют обращения к потенциально неопределенным переменным. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 13:44)
| | Может быть тогда просто вместо
if (!empty($_POST['author'])) {
setcookie("author", $_POST['author'], mktime()+(86400*30), "/"); }
|
написать
setcookie("author", $_POST['author'], mktime()+(86400*30), "/");
|
тогда же по сути она всегда будет обновляться? | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 13:54)
| | Решите-ка сперва проблему второго замечания.
Это очень просто.
Нужно в начало скрипта написать error_reporting(E_ALL|E_NOTICE); и заставить работать без криков.
Тогда Вы наверное поймете, что означает последний Вами предложенный вариант. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 14:07)
| | Написал строку сверху.
Теперь к обновлению куки в куки
Сейчас у меня вот такие элементы кода:
При нажатии на submit:
if (!empty($_POST['author'])) {
setcookie("author", $_POST['author'], mktime()+(86400*3600), "/"); }
|
В форме:
<td><input type="text" name='author' value="<? echo htmlspecialchars($_COOKIE['author']);?>" maxlength="20" id="I1" onkeyup="CheckFields()"></td>
|
| |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 14:34)
| | Теперь вытрите кукис из браузера и запустите скрипт еще раз. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 14:50)
| | Сделал, всё сработало как положено как и до этого. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 15:02)
| | Вы не добавили строку в файл с формой.
Либо добавили не в начало. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 15:03)
| | Просто не обновил файл. Вышла ошибка:
Notice: Undefined index: submit in /home/gavailer/public_html/journal/comment.php on line 34
Строка 34
...
if($_POST['submit']==true) {
... | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 15:08)
| | Исправляейте :) | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 15:10)
| | Честно говоря мне не очень понятно к чему эта ошибка. Вроде бы всё верно. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 15:13)
| | Что верно, когда в массиве $_POST нет элемента submit, а Ваш скрипт к нему обращается в бесспорном порядке? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 15:18)
| | Так у меня есть же кнопка с именем submit
<input type="hidden" name="submit" value="true" />
<input type="submit" value="Добавить комментарий" class="fs_middle" id="Sub" />
|
| |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 15:24)
| | не все пользуются кнопками. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 15:24)
| | Когда кнопка не нажата - разве элемент будет порожден? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 15:39)
| | Так а теперь запутался. Так зачем нам его порождать, не нажимая кнопки? Это же комментарий, пользователь не зря же зайдёт на страницу комментариев. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 15:53)
| | Вы хотите сказать, что у Вас страница-обработчик отделена от страницы формы, и методом GET не вызывается вообще? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 16:11)
| | нет, всё в одном файле. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 16:20)
| | То есть сперва файл вызывается из адресной строки браузера? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 16:22)
| | Нет. Есть страница с записью блога, на ней ссылка "Добавить комментарий", далее посетитель переходит на страницу добавления комментария. И там уже всё в одном файле обрабатывается. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 16:31)
| | По ссылке страница вызывается каким методом?
GET или POST? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 16:32)
| | GET | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 16:42)
| | Каким образом при GET-запросе Вы ожидаете получить заполненный хоть чем-то суперглобальный массив $_POST ?
И чтоб два раза не вставать,
Каким образом при первом вызове Вы ожидаете получить заполненный хоть чем-то суперглобальный массив $_COOKIE ? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 16:55)
| | Потом то на странице с формой все проходит через POST и всё отлично подставляется. | |
|
|
|
|
|
|
|
для: Eduard
(13.02.2010 в 17:20)
| | При чем тут потом (во время POST-запроса) , когда скрипт не работает сейчас (на GET-запросе)?
Главное, чтобы Вы понимали, что делаете Вы, и что делапет скрипт.
А Вы не понимаете.
А меж тем подсказка была в в мом первом ответе - функция empty()
Еще можете функцией isset() воспользоваться - это канонически более верно, хотя на практике зачастую чуть менее удобно. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 16:55)
| | В любом случае, спасибо Вам за помощь! В принципе всё работает сейчас, всё сделал, есть какие-то ошибки, но они не сильн осущественные, главное, чтобы безопасно было. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 11:52)
| | В месте, где обрабатывается форма при нажатии на submit:
if (!empty($_POST['author'])) {
setcookie("author", $_POST['author'], mktime()+(86400*30), "/"); }
|
А в форме вот так:
<td><input type="text" name='author' value="<?=stripslashes(htmlspecialchars($_COOKIE['author']));?>" maxlength="20" id="I1" onkeyup="CheckFields()"></td>
|
Всё ли верно? | |
|
|
|