Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Передача параметров cookie.Не работает скрипт.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alena_pl
Отправлено: 23 Июля, 2012 - 09:05:28
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Всем, привет!
Прошу помощи в реализации скрипта, с помощью которого передавались бы id-ки записи в cookie. Это нужно для голосования по продуктам из БД.
Данный скрипт почему-то не передаёт с первого раза id, поэтому скрипт работает не правильно. Прошу подсказать в чём здесь может быть проблема.
Буду рада помощи.
Есть скрипт вывода данных по id из БД index.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include "dop_db.php";
  4. $result_blog = mysql_query("SELECT * FROM topics",$dop_db);
  5.         while($myrow = mysql_fetch_array($result_blog))
  6.         {
  7. echo'<a href = "cookie.php?id='.$myrow[0].'" method="get" onclick = "setcookie()">'.$myrow[1].'<br></a>';
  8. }
  9. ?>
  10.  
  11.  


и обработчик cookie.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $arr = $_GET['id'];
  4. setcookie("user", $arr, time()+100);
  5. if (isset($user)) {
  6. print($user);
  7.         echo "<script>
  8.         alert ('Вы уже голосовали!');
  9.         document.location.href = 'index.php';
  10.         </script>";
  11. }
  12. else {
  13. print($user);
  14.         echo "<script>
  15.         alert ('Поздравляю, Ваш голос принят!');
  16.         document.location.href = 'index.php';
  17.         </script>";
  18. }
  19. ?>
  20.  
 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 09:16:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Во-первых проверять наличие куки нужно так:


Во-вторых лучше не делать голосование подобным образом.
Можно проголосовать, удалить куку, проголосовать еще раз и т.д.

Лучше всего записывать БД какие-либо данные о каждом пользователе, например ip + user_agent, и на основе этих данных отличать проголосовавших


-----
Удобный сервис для хранения файлов
 
 Top
alena_pl
Отправлено: 23 Июля, 2012 - 09:26:34
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Toxa пишет:
Во-первых проверять наличие куки нужно так:


Во-вторых лучше не делать голосование подобным образом.
Можно проголосовать, удалить куку, проголосовать еще раз и т.д.

Лучше всего записывать БД какие-либо данные о каждом пользователе, например ip + user_agent, и на основе этих данных отличать проголосовавших


Спасибо, за подсказку, но даже при такой проверке

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

Да, я понимаю, что cookie можно удалить, но для моего сайта этого будет достаточно)
 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 09:35:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


alena_pl пишет:

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

А вы уверены что именно id не передается? Может быть кука не ставится или еще что.
Проверяйте. Смотрите, что где записывается в какую переменную, вы в состоянии самостоятельно найти ошибку.


-----
Удобный сервис для хранения файлов
 
 Top
alena_pl
Отправлено: 23 Июля, 2012 - 09:54:28
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Toxa пишет:
alena_pl пишет:

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

А вы уверены что именно id не передается? Может быть кука не ставится или еще что.
Проверяйте. Смотрите, что где записывается в какую переменную, вы в состоянии самостоятельно найти ошибку.


Вот, немного исправила скрипт, как вроде должно быть по правилам. Добавила проверки, что же передаётся:
cookie.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. setcookie("test",$_GET['id'],time()+3600);
  4. if (isset($_COOKIE['test'])) {
  5. echo $_GET['id'];
  6. echo @$_COOKIE['test'];
  7.         echo "<script>
  8.         alert ('Вы уже голосовали!');
  9.         document.location.href = 'index.php';
  10.         </script>";
  11. }
  12. else {
  13. echo $_GET['id'];
  14. echo @$_COOKIE['test'];
  15.         echo "<script>
  16.         alert ('Поздравляю, Ваш голос принят!');
  17.         document.location.href = 'index.php';
  18.         </script>";
  19. }
  20. ?>
  21.  
  22.  


Значит у меня 3 записи с id 1, 2, 3.

По клику на первую запись с id = 1, выводится запись 'Поздравляю, Ваш голос принят!', при повторно клике на неё же 'Вы уже голосовали!'. Однако при клике второй записи $_GET['id'] = 2, а вот @$_COOKIE['test'] равен почему-то 1 и конечно же выводится запись 'Вы уже голосовали!' и то же самое с последней записью. Не могу понять в чём дело(
 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 11:51:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Ну все понятно. У вас в куках сохряняется только последний вариант голосования.
А нужно хранить все. Первое, что приходит в голову - использование массива.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // сначала получаем все варианты голосований
  3. $resultsArray = json_decode($_COOKIE['results'], true);
  4.  
  5. // теперь проверяем, существует ли уже данный айди в массиве
  6. if(in_array($_GET['id'], $resultsArray))
  7. {
  8.         echo "<script>
  9.        alert ('Вы уже голосовали!');
  10.        document.location.href = 'index.php';
  11.        </script>";
  12. }
  13. else
  14. {
  15.         // Если же айдишника нет - то добавляем его и сохраняем куку
  16.         array_push($resultsArray, $_GET['id']);
  17.         setcookie('results', json_encode($resultsArray), time()+3600);
  18.        
  19.         // И выводим сообщение
  20.         echo "<script>
  21.        alert ('Поздравляю, Ваш голос принят!');
  22.        document.location.href = 'index.php';
  23.        </script>";
  24. }
  25. ?>


обязательно прочитайте про функции json_decode и json_encode, они нужны для преобразования массива в строку. В куках мне не можем хранить массивы - только строки


-----
Удобный сервис для хранения файлов
 
 Top
alena_pl
Отправлено: 23 Июля, 2012 - 12:51:01
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Toxa пишет:
Ну все понятно. У вас в куках сохряняется только последний вариант голосования.
А нужно хранить все. Первое, что приходит в голову - использование массива.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // сначала получаем все варианты голосований
  3. $resultsArray = json_decode($_COOKIE['results'], true);
  4.  
  5. // теперь проверяем, существует ли уже данный айди в массиве
  6. if(in_array($_GET['id'], $resultsArray))
  7. {
  8.         echo "<script>
  9.        alert ('Вы уже голосовали!');
  10.        document.location.href = 'index.php';
  11.        </script>";
  12. }
  13. else
  14. {
  15.         // Если же айдишника нет - то добавляем его и сохраняем куку
  16.         array_push($resultsArray, $_GET['id']);
  17.         setcookie('results', json_encode($resultsArray), time()+3600);
  18.        
  19.         // И выводим сообщение
  20.         echo "<script>
  21.        alert ('Поздравляю, Ваш голос принят!');
  22.        document.location.href = 'index.php';
  23.        </script>";
  24. }
  25. ?>


обязательно прочитайте про функции json_decode и json_encode, они нужны для преобразования массива в строку. В куках мне не можем хранить массивы - только строки



Спасибо за подсказку, однако выводит ошибку:

Warning: in_array() expects parameter 2 to be array, null given in Z:\home\Exsemple\www\cookie\cookie.php on line 7

Warning: array_push() expects parameter 1 to be array, null given in Z:\home\Exsemple\www\cookie\cookie.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\Exsemple\www\cookie\cookie.php:1) in Z:\home\Exsemple\www\cookie\cookie.php on line 15
Поздравляю, Ваш голос принят!
 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 15:49:14
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Это потомучто изначально у вас массив не инициализинован, изправте строчку №3 из моего примера на
PHP:
скопировать код в буфер обмена
  1. $resultsArray = json_decode($_COOKIE['results'], true) || array();


Прошу прощения, эта конструкция в php не будет работать.
можно вот так

PHP:
скопировать код в буфер обмена
  1. $resultsArray = json_decode($_COOKIE['results'], true);
  2. if(empty($resultsArray)) $resultsArray = array();

(Отредактировано автором: 23 Июля, 2012 - 15:53:42)



-----
Удобный сервис для хранения файлов
 
 Top
alena_pl
Отправлено: 23 Июля, 2012 - 16:01:31
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Toxa пишет:
Это потомучто изначально у вас массив не инициализинован, изправте строчку №3 из моего примера на
PHP:
скопировать код в буфер обмена
  1. $resultsArray = json_decode($_COOKIE['results'], true) || array();


Прошу прощения, эта конструкция в php не будет работать.
можно вот так

PHP:
скопировать код в буфер обмена
  1. $resultsArray = json_decode($_COOKIE['results'], true);
  2. if(empty($resultsArray)) $resultsArray = array();



Всё равно ошибку выдаёт:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\Exsemple\www\cookie\cookie.php:1) in Z:\home\Exsemple\www\cookie\cookie.php on line 15

линия 15:
 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 16:03:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


это из-за того, что у вас что-то выводится в барузер до установки кук.
Проверьте еще раз внимательно. Часто пробел закрадывается в самое начало файла, перед <?php


-----
Удобный сервис для хранения файлов
 
 Top
alena_pl
Отправлено: 23 Июля, 2012 - 16:09:42
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Toxa пишет:
это из-за того, что у вас что-то выводится в барузер до установки кук.
Проверьте еще раз внимательно. Часто пробел закрадывается в самое начало файла, перед <?php




Оооо надо же и правда пробел перед <?php

Спасибо Вам огромное, что уделили время для решения моего вопроса!! Радость пример работает!!!!!!)))))))))
 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 16:12:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Я очень рад, обращайтесь.
Да и незачем говорить "спасибо" отдельным сообщением. Есть такая кнопочка Подмигивание


-----
Удобный сервис для хранения файлов
 
 Top
alena_pl
Отправлено: 23 Июля, 2012 - 16:16:50
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Toxa пишет:
Я очень рад, обращайтесь.
Да и незачем говорить "спасибо" отдельным сообщением. Есть такая кнопочка Подмигивание


Да пытаюсь я всё жать на эту кнопочку, сообщение говорит мне недостаточно оставленных на форуме сообщений для этой операции Растерялся ))) Я бы с удовольствием)))

О а теперь сработало, ура, видимо наконец-то набрала нужное количество сообщений!!! Радость

(Отредактировано автором: 23 Июля, 2012 - 16:18:05)

 
 Top
Toxa
Отправлено: 23 Июля, 2012 - 16:18:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Да у Вас сегодня удачный день!


-----
Удобный сервис для хранения файлов
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB