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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: При переходе на другую страницу, теряются cookie

Сообщения:  [1-6] 

 
 автор: Денис Аверин   (26.04.2011 в 11:00)   письмо автору
 
   для: cheops   (26.04.2011 в 10:19)
 

Спасибо большое. Код заработал.

  Ответить  
 
 автор: cheops   (26.04.2011 в 10:19)   письмо автору
 
   для: Денис Аверин   (26.04.2011 в 10:13)
 

Нет, здесь проблема именно в логики подстановки значений. Возьмите вот эти строки
<?php
  
...
  
$_COOKIE['user'] = $_POST['name']; 
  
$_POST['comment'] = "Текст комментария";;
  ...
?>
и оберните их проверкой
<?php
  
...
  if(!empty(
$_POST))
  {
    
$_COOKIE['user'] = $_POST['name']; 
  }
  else
  {
    
$_POST['comment'] = "Текст комментария";
  }
  ...
?>
А лучше вообще не использовать $_COOKIE['user'] в качестве промежуточного значения. Т.е. поступить как то так
<?php 
session_start
(); 
if(empty(
$_POST))
{
  
$_POST['name'] = $_COOKIE['user']; 
  
$_POST['comment'] = "Текст комментария";
}
else
{
  
setcookie('user'$_POST['name'], mktime(0,0,0,1,25,2015)); 
}
?>  

<form name="comm" action="main.php" method="POST">   
<table>   
<tr><td>Имя:</td><td><input type="text" name="name" value="<?php echo $_POST['user']; ?>" size="35" maxlength="30"></td></tr> 
<tr><td>Комментарий:</td><td><textarea name="comment" cols="56" rows="15" wrap="virtual"><?php echo $_POST['comment']; ?></textarea></td></tr> 
<tr><td>&nbsp;</td><td><input type="submit" value="Сохранить комент"></td></tr>   
</table>   
</form> 
<a href="second.php">Перейти к странице second.php</a>

PS Кстати, перед выводом значений вроде $_POST['user'] в окно браузера их лучше всегда обрабатывать при помощи функции htmlspecialchars().

[поправлено модератором: новая ветка про обработку данных до и после помещения в базу данных выделена в новую тему]

  Ответить  
 
 автор: Денис Аверин   (26.04.2011 в 10:13)   письмо автору
 
   для: cheops   (26.04.2011 в 10:03)
 

Убрал строку $_COOKIE['user'] = $_POST['name']. Теперь значение выводится только на другой странице. при этом значение также теряется, если несколько раз переходишь по страницам.

А может быть так, что проблема кроется в php.ini? Я там ничего не изменял, кроме уровня обработки ошибок.

  Ответить  
 
 автор: captain-america   (26.04.2011 в 10:11)   письмо автору
 
   для: Денис Аверин   (26.04.2011 в 09:42)
 

Этого будет достаточно
<?php
//session_start(); для куки необязательна
if (!isset($_POST['name'])) $_POST['name'] = '';
setcookie('user', $_POST['name'], mktime(0,0,0,1,25,2015));
//$_COOKIE['user'] = $_POST['name']; В куки данные вроде таким способом не заносятся
$_POST['comment'] = "Текст комментария";;
?>

  Ответить  
 
 автор: cheops   (26.04.2011 в 10:03)   письмо автору
 
   для: Денис Аверин   (26.04.2011 в 09:42)
 

>$_COOKIE['user'] = $_POST['name'];
Помоему вы просто затираете значение вот этой строкой, т.е. значение в cookie есть, но когда вы обращаетесь к странице в первый раз в $_POST['name'] пустая строка, которую вы присваиваете $_COOKIE['user'], поэтому все последующие обращения к $_COOKIE['user'] также дают пустую строку.

  Ответить  
 
 автор: Денис Аверин   (26.04.2011 в 09:42)   письмо автору
 
 

Написал небольшой код, который должен запоминать имя пользоватеся в cookie. Проблема заключается в том, при повторном возвращении на страницу теряются значения из cookie.
Вот код двух файлов:

Файл main.php.
<?php
session_start
();
if (!isset(
$_POST['name'])) $_POST['name'] = '';
setcookie('user'$_POST['name'], mktime(0,0,0,1,25,2015));
$_COOKIE['user'] = $_POST['name'];
$_POST['comment'] = "Текст комментария";;
?> 

<form name="comm" action="main.php" method="POST">  
<table>  
<tr><td>Имя:</td><td><input type="text" name="name" value="<?php echo $_COOKIE['user']; ?>" size="35" maxlength="30"></td></tr>
<tr><td>Комментарий:</td><td><textarea name="comment" cols="56" rows="15" wrap="virtual"><?php echo $_POST['comment']; ?></textarea></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" value="Сохранить комент"></td></tr>  
</table>  
</form>
<a href="second.php">Перейти к странице second.php</a>


Файл second.php:
<?php
session_start
();
if (!isset(
$_POST['name'])) $_POST['name'] = '';
if (!isset(
$_COOKIE['user'])) $_COOKIE['user'] = '';
echo 
'cookie '.$_COOKIE['user'].'<br>';
echo 
'formname '.$_POST['name'].'<br>';
?>
<a href="main.php">Назад</a>


Не могу понять в чем проблема. Кука устанавливается и даже выводится на странице second.php, но при возвращении на страницу с формой - значение теряется.

  Ответить  

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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