Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запись значений полей в куки
 
 автор: Eduard   (13.02.2010 в 11:43)   письмо автору
 
 

Добрый день!

У меня есть система комментариев в блоге. Пользователь нажимает на ссылку "Добавить комментарий" и переходит на страницу с двумя полями (на самом деле их больше но для простоты описания пусть их будет два): Имя и Комментарий. Так вот задача состоит в том, чтобы значение поля "Имя" после нажатия на кнопку "Прокомментировать" заносилось в куки и всегда подставлялось при следующих посещениях.

Подскажите, пожалуйста, в каком направлении двигаться? Чтобы куки не удалялись с компьютера посетителя, чтобы просто заносилось значение поля и всё, а потом подставлялось.

Заранее спасибо!

  Ответить  
 
 автор: Trianon   (13.02.2010 в 11:52)   письмо автору
 
   для: Eduard   (13.02.2010 в 11:43)
 

Есть функция setcookie() для установки значений кукис-массива.
Есть суперглобальные массивы $_POST и $_COOKIE для чтения входных параметров.
Есть функция empty() , которой можно определить, заполнен ли каждый из них.

Чтобы куки не удалялись с компьютера посетителя, при установке указывают время устаревания.
Не то чтобы их вообще нельзя удалить, но сами не пропадут. Вы же этого хотите?

Двигаться в направлении алгоритма.
Пишите код - поглядим.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 12:18)   письмо автору
 
   для: 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), "/"); 
   } 

?> 


Что-то вроде этого?

  Ответить  
 
 автор: Trianon   (13.02.2010 в 12:59)   письмо автору
 
   для: Eduard   (13.02.2010 в 12:18)
 

<?=stripslashes(htmlspecialchars($author)); >

Вот после этого шедевра дальше можно не продолжать.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 13:13)   письмо автору
 
   для: Trianon   (13.02.2010 в 12:59)
 

Почему? Объясните, пожалуйста

  Ответить  
 
 автор: Trianon   (13.02.2010 в 13:16)   письмо автору
 
   для: Eduard   (13.02.2010 в 13:13)
 

Нет.
Это не мой фрагмент.
Это Вы объясните, пожалуйста, с какой целью применили эту функцию в этом месте.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 13:27)   письмо автору
 
   для: Trianon   (13.02.2010 в 13:16)
 

Я уже не помню что я там творил, и что значит функция stripslashes. Давайте забудем, что она была и оставим вот так:

htmlspecialchars($_COOKIE['author'])

  Ответить  
 
 автор: Trianon   (13.02.2010 в 13:36)   письмо автору
 
   для: Eduard   (13.02.2010 в 13:27)
 

Давайте.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 13:44)   письмо автору
 
   для: Trianon   (13.02.2010 в 13:36)
 

Замечаний два.

По логике. Почему-то в кукис из POST информация попадает - это хорошо. А вот в кукис из кукис информация не попадает - не освежается. Значит если пользователь месяц не будет писать в портал, а будет только читать - его кукис протухнет и удалится.

По коду. Присутствуют обращения к потенциально неопределенным переменным.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 13:54)   письмо автору
 
   для: Trianon   (13.02.2010 в 13:44)
 

Может быть тогда просто вместо

  if (!empty($_POST['author'])) {  
  setcookie("author", $_POST['author'], mktime()+(86400*30), "/"); } 


написать

  setcookie("author", $_POST['author'], mktime()+(86400*30), "/"); 


тогда же по сути она всегда будет обновляться?

  Ответить  
 
 автор: Trianon   (13.02.2010 в 14:07)   письмо автору
 
   для: Eduard   (13.02.2010 в 13:54)
 

Решите-ка сперва проблему второго замечания.
Это очень просто.
Нужно в начало скрипта написать error_reporting(E_ALL|E_NOTICE); и заставить работать без криков.

Тогда Вы наверное поймете, что означает последний Вами предложенный вариант.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 14:34)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: Trianon   (13.02.2010 в 14:50)   письмо автору
 
   для: Eduard   (13.02.2010 в 14:34)
 

Теперь вытрите кукис из браузера и запустите скрипт еще раз.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 15:02)   письмо автору
 
   для: Trianon   (13.02.2010 в 14:50)
 

Сделал, всё сработало как положено как и до этого.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 15:03)   письмо автору
 
   для: Eduard   (13.02.2010 в 15:02)
 

Вы не добавили строку в файл с формой.
Либо добавили не в начало.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 15:08)   письмо автору
 
   для: 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) {
...

  Ответить  
 
 автор: Trianon   (13.02.2010 в 15:10)   письмо автору
 
   для: Eduard   (13.02.2010 в 15:08)
 

Исправляейте :)

  Ответить  
 
 автор: Eduard   (13.02.2010 в 15:13)   письмо автору
 
   для: Trianon   (13.02.2010 в 15:10)
 

Честно говоря мне не очень понятно к чему эта ошибка. Вроде бы всё верно.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 15:18)   письмо автору
 
   для: Eduard   (13.02.2010 в 15:13)
 

Что верно, когда в массиве $_POST нет элемента submit, а Ваш скрипт к нему обращается в бесспорном порядке?

  Ответить  
 
 автор: Eduard   (13.02.2010 в 15:24)   письмо автору
 
   для: Trianon   (13.02.2010 в 15:18)
 

Так у меня есть же кнопка с именем submit

          <input type="hidden" name="submit" value="true" />    
          <input type="submit" value="Добавить комментарий" class="fs_middle" id="Sub" />

  Ответить  
 
 автор: Рома   (13.02.2010 в 15:31)   письмо автору
 
   для: Eduard   (13.02.2010 в 15:24)
 

не все пользуются кнопками.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 15:39)   письмо автору
 
   для: Eduard   (13.02.2010 в 15:24)
 

Когда кнопка не нажата - разве элемент будет порожден?

  Ответить  
 
 автор: Eduard   (13.02.2010 в 15:53)   письмо автору
 
   для: Trianon   (13.02.2010 в 15:39)
 

Так а теперь запутался. Так зачем нам его порождать, не нажимая кнопки? Это же комментарий, пользователь не зря же зайдёт на страницу комментариев.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 16:11)   письмо автору
 
   для: Eduard   (13.02.2010 в 15:53)
 

Вы хотите сказать, что у Вас страница-обработчик отделена от страницы формы, и методом GET не вызывается вообще?

  Ответить  
 
 автор: Eduard   (13.02.2010 в 16:20)   письмо автору
 
   для: Trianon   (13.02.2010 в 16:11)
 

нет, всё в одном файле.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 16:22)   письмо автору
 
   для: Eduard   (13.02.2010 в 16:20)
 

То есть сперва файл вызывается из адресной строки браузера?

  Ответить  
 
 автор: Eduard   (13.02.2010 в 16:31)   письмо автору
 
   для: Trianon   (13.02.2010 в 16:22)
 

Нет. Есть страница с записью блога, на ней ссылка "Добавить комментарий", далее посетитель переходит на страницу добавления комментария. И там уже всё в одном файле обрабатывается.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 16:32)   письмо автору
 
   для: Eduard   (13.02.2010 в 16:31)
 

По ссылке страница вызывается каким методом?
GET или POST?

  Ответить  
 
 автор: Eduard   (13.02.2010 в 16:42)   письмо автору
 
   для: Trianon   (13.02.2010 в 16:32)
 

GET

  Ответить  
 
 автор: Trianon   (13.02.2010 в 16:55)   письмо автору
 
   для: Eduard   (13.02.2010 в 16:42)
 

Каким образом при GET-запросе Вы ожидаете получить заполненный хоть чем-то суперглобальный массив $_POST ?

И чтоб два раза не вставать,
Каким образом при первом вызове Вы ожидаете получить заполненный хоть чем-то суперглобальный массив $_COOKIE ?

  Ответить  
 
 автор: Eduard   (13.02.2010 в 17:20)   письмо автору
 
   для: Trianon   (13.02.2010 в 16:55)
 

Потом то на странице с формой все проходит через POST и всё отлично подставляется.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 19:49)   письмо автору
 
   для: Eduard   (13.02.2010 в 17:20)
 

При чем тут потом (во время POST-запроса) , когда скрипт не работает сейчас (на GET-запросе)?
Главное, чтобы Вы понимали, что делаете Вы, и что делапет скрипт.
А Вы не понимаете.

А меж тем подсказка была в в мом первом ответе - функция empty()
Еще можете функцией isset() воспользоваться - это канонически более верно, хотя на практике зачастую чуть менее удобно.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 17:35)   письмо автору
 
   для: Trianon   (13.02.2010 в 16:55)
 

В любом случае, спасибо Вам за помощь! В принципе всё работает сейчас, всё сделал, есть какие-то ошибки, но они не сильн осущественные, главное, чтобы безопасно было.

  Ответить  
 
 автор: Eduard   (13.02.2010 в 12:48)   письмо автору
 
   для: 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>


Всё ли верно?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования