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
Форумы портала PHP.SU :: Версия для печати :: Немного не допонял по поводу cookie
Форумы портала PHP.SU » PHP » Программирование на PHP » Немного не допонял по поводу cookie

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

1. Staind - 06 Ноября, 2007 - 22:56:45 - перейти к сообщению
Здравствуйте форумчане.
Есть функция, обрабатывающая данные, введеные с формы (записать некую переменную в куки):
PHP:
скопировать код в буфер обмена
  1. if (isset ($_POST['submit'])==true) {
  2. $email = @$_POST['email'];
  3. $texttitle = @$_POST['texttitle'];
  4. $text = @$_POST['text'];
  5. setcookie ("sendemail","okey");
  6. }

Это упрощенный вариант. Вот, я знаю, после хидера (header'а) функцию setcookie применять нельзя, появляется ошибка. Тем самым метод построения кода у меня такой:
-Разные функции, обрабатывающие разные действия пользователя
-HEADER
-Разные html тэги, появляющиеся зависимости от ситуации

А теперь, предположим я хочу в свою обрабатывающию функцию вставить сообщение, если что-то не так (пишу or die дословно):
PHP:
скопировать код в буфер обмена
  1. if (isset ($_POST['submit'])==true) {
  2. $email = @$_POST['email'];
  3. $texttitle = @$_POST['texttitle'];
  4. $text = @$_POST['text'];
  5. setcookie ("sendemail","okey") or die "Произошла ошибка";
  6. }

Но ведь мне это сообщение нужно вставить не ДО header'a, а ПОСЛЕ него, т.е. в тот участок тэгов, где ему суждено быть. Так вот как здесь быть? Присваивать некой переменной $i значение 1 и потом там где мне нужно высветить сообщение, писать if ($i==1) {... ?
Мне нужно, чтобы И все нормально записалось в куки и высвечивались сообщения (ошибки, или рапорты об успехе).
За ранее спасибо вам за помощь.
2. evgenijj - 07 Ноября, 2007 - 10:13:48 - перейти к сообщению
Знаешь, словами объяснять у тебя плохо получается. Терминология мягко говоря странная. Например, "...Разные функции, обрабатывающие разные действия пользователя..." Какие действия пользователя? Это PHP, а не JavaScript. Это в JavaScript та можешь реагировать на действия пользователя -- onclick, onchange, onmouseover и т.п.

Уровень твоих знаний пока не слишком высокий. Об этом вполне опреденно говорит конструкция
setcookie ("sendemail","okey") or die "Произошла ошибка";

Поэтому предлагаю сделать так: ты выкладываешь свой код. Только, пожалуйста, не надо сюда вываливать 1000 строк кода. Читать это никто не будет. Вполне достаточно 20-30 строчек кода. Не поленись, и напиши небольшой скриптик иллюстрирующий твою проблему. И мы с удовольствием тебе поможем.
3. EuGen - 07 Ноября, 2007 - 11:38:24 - перейти к сообщению
Я не понял, зачем or die там, где это у Вас написано. И вообще, Вам нужно четко представлять, когда и зачем Вы хотите выводить сообщения об ошибке.
4. Staind - 07 Ноября, 2007 - 16:24:52 - перейти к сообщению
Скрипт, который отправляет на почту администратора письмо:
PHP:
скопировать код в буфер обмена
  1. $emailok = @$_COOKIE['sendemail'];
  2. if (isset ($_POST['submit']) and $emailok!="okey") {
  3. $email = @$_POST['email'];
  4. $texttitle = @$_POST['texttitle'];
  5. $text = @$_POST['text'];
  6. emailstring ($texttitle);
  7. emailstring ($text);
  8. $numtext=strlen ($text);
  9. $numtexttitle=strlen ($texttitle);
  10.    if ($numtext>=3 and $numtexttitle>=5 and preg_match('/(S+)@([a-z0-9.]+)/is',$email)==true) {
  11.    $link2 = @$_SERVER['HTTP_HOST'];
  12.    $link3 = "." . $link2;
  13.    setcookie("sendemail","okey",time()+60,"/",$link3);
  14.    mail ("n-d1@yandex.ru",$texttitle,$text,"FROM: $emailnContent-type: text/plain; charset=windows-1251");
  15.    $message_sendemail['1'] = "<center><font color=green>Сообщение отправлено на почту администратору</font></center>";
  16.    } else {
  17.       if (preg_match('/(S+)@([a-z0-9.]+)/is',$email)==false)
  18.          $message_sendemail['4'] = "<center><font color=red>Не верно набран E-Mail адрес</font></center>";
  19.       if ($numtext<3 or $numtexttitle<5)
  20.          $message_sendemail['3'] = "<center><font color=red>Сообщение слишком короткое</font></center>";
  21.    }
  22. } elseif (@$_POST['submit'] and $emailok=="okey") {
  23. $message_sendemail['2'] = "<center><font color=red>Подождите минуту</font></center>";
  24. }
  25. include "header.php";
  26. if (isset ($_POST['submit'])) {
  27. $i=1;
  28.    while ($i<=4) {
  29.       if (isset ($message_sendemail["$i"])==true) echo ("$message_sendemail[$i]");
  30.    $i++;
  31.    }
  32. }

До include "header.php"; идет обработка данных, после появление самих сообщений и ниже форма заполнения (формы здесь нет).
Мне бы хотелось чтобы стуктура if обработки введеных данных шла после include "header.php"; (в самом header.php находиться шапка). Но как это сделать, не могу догнать.
5. evgenijj - 08 Ноября, 2007 - 10:36:47 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo 'Hello, world!';
  4. setcookie ('TestCookie', 'TestValue', time()+3600);
  5. ?>
  6.  
6. Staind - 09 Ноября, 2007 - 18:20:58 - перейти к сообщению
Огромнейшее спасибо тебе evgenijj.
Кстати, ты же модератор, я на сайт тоже не давно поставил ExBB (от сюда прям скачивал). Так вот не давно он что-то заглючил и все таблицы на главной (http://www.itbuben.ru/forum) переглючило. Я пробовал удалять ненужные папки forum..., пробовал перезаписать все файлы из templatesInvisionExBB. Но ни к чему хорошему это не привело. Я смотрю, у вас на форуме тоже такая фигня твориться, ты не знаешь что это такое?
7. evgenijj - 09 Ноября, 2007 - 18:32:44 - перейти к сообщению
Движок форума глючит. Вообще, насколько я могу судить, этот exbb - один большой глюк. Глючит везде - при показе главной страницы, при добавлении постов (по крайней мере в режиме модератора), при показе исходного кода php и т.п. Исправить я это не могу. А ARTY (автор портала PHP.SU), к сожалению, куда-то пропал.
8. Staind - 09 Ноября, 2007 - 19:13:17 - перейти к сообщению
Понятно. Ух как жалко. Придется искать замену.
P.s. разобрался только что с буфиризированием Улыбка Оказывается, полезная это штука Улыбка))
9. Staind - 24 Ноября, 2007 - 12:41:23 - перейти к сообщению
Знающие люди подскажите плиз.
У меня есть функция:
PHP:
скопировать код в буфер обмена
  1. setcookie ("opros2",$kukisy['id'],time()+99999999,"/","." . $_SERVER['HTTP_HOST']);

...и голосование. Если человек проголосовал, то в куки записываются определенные данные.
Когда я набираю, предположим, http://itbuben.ru, голосую, а потом перехожу на такой же адрес, то мне показываются результаты (как нужно). А потом набираю с тройным w: http://www[dot]itbuben[dot]ru и вместо результатов мне показывается снова варианты ответов и кнопка проголосовать. Почему так происходит?
10. valenok - 24 Ноября, 2007 - 12:54:42 - перейти к сообщению
определи переменную $error
поставь return false

а дальше где у тебя html код
поставь вывод содержимого этой перемнной.

(Добавление)

path


The path on the server in which the cookie will be available on. If set to '/', the cookie will be available within the entire domain. If set to '/foo/', the cookie will only be available within the /foo/ directory and all sub-directories such as /foo/bar/ of domain. The default value is the current directory that the cookie is being set in.


domain

The domain that the cookie is available. To make the cookie available on all subdomains of example.com then you'd set it to '.example.com'. The . is not required but makes it compatible with more browsers. Setting it to www[dot]example[dot]com will make the cookie only available in the www subdomain. Refer to tail matching in the » spec for details.

-

А теперь самое время посмотреть синтаксис фукции setcookie
и понять в каком месте что должно стоять.
(полезно считать запятые)
11. Staind - 24 Ноября, 2007 - 13:04:00 - перейти к сообщению
Эмм... не особо понял. Мне то нужно, чтобы, если уже голосовал - то показывались результаты, если не голосовал - то показывалось само голосование.
По поводу твоей идеи, а можно по подробнее, а то что-то догнать не могу :\\n\n(Добавление)
Понял как нужно. Если юзер заходит на http://site.ru, то мы его сразу же перенаправляем на http://www.site.ru. Так по крайне мере сделано на yandex.ru. Я написал маленький скрипт, но он, почему-то не работает. Неподскажите почему?
PHP:
скопировать код в буфер обмена
  1. if (str_replace("www","",$_SERVER['QUERY_STRING'])==false) header("location: http://www.".$_SERVER['SCRIPT_NAME']);
\n\n(Добавление)
PHP:
скопировать код в буфер обмена
  1. А теперь самое время посмотреть синтаксис фукции setcookie
  2. и понять в каком месте что должно стоять.
  3. (полезно считать запятые)

Посмотри на мой код. Все у меня там правильно написано.\n\n(Добавление)
Получилось вот такой функцией:
PHP:
скопировать код в буфер обмена
  1. if (strpos($_SERVER['HTTP_HOST'],"www")===false) header("location: http://www.".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);

И тогда автоматом переходит на сайт с тройным w.
12. valenok - 24 Ноября, 2007 - 16:41:50 - перейти к сообщению
прочитайте вот это
раз 15, со словарём, без, в переводе на русский, финский
с права на лево

Цитата:
path

The path on the server in which the cookie will be available on. If set to '/', the cookie will be available within the entire domain. If set to '/foo/', the cookie will only be available within the /foo/ directory and all sub-directories such as /foo/bar/ of domain. The default value is the current directory that the cookie is being set in.


domain

The domain that the cookie is available. To make the cookie available on all subdomains of example.com then you'd set it to '.example.com'. The . is not required but makes it compatible with more browsers. Setting it to www[dot]example[dot]com will make the cookie only available in the www subdomain. Refer to tail matching in the » spec for details.


И объясните за что отвечают параметры domain и path
своими словами.\n\n(Добавление)
Цитата:
Понял как нужно. Если юзер заходит на http://site.ru, то мы его сразу же перенаправляем на http://www.site.ru. Так по крайне мере сделано на yandex.ru


У яндекса что не напишешь в субдомене - всё куда то ведёт
поэтому у них вот так.
А вам надо разбираться с куками.
13. Staind - 24 Ноября, 2007 - 18:19:38 - перейти к сообщению
У меня все правильно написано. 5 раз прочитал. Там ясно сказано чтобы кука была видима на всех подкаталогах, нужно выстовить слэш. А чтобы работала также с www нужно прилепить точку вначале домена. Если даже так написать, то все остается прежнее:
PHP:
скопировать код в буфер обмена
  1. setcookie ("opros2",$kukisy['id'],time()+99999999,"",$_SERVER['HTTP_HOST']);

\n\n(Добавление)
Все, извини, разобрался. Вот такой код действует как с www так и без:
PHP:
скопировать код в буфер обмена
  1. $link = str_replace ("www","",$_SERVER['HTTP_HOST']);
  2. setcookie ("opros2",$kukisy['id'],time()+99999999,"/",$link);
14. valenok - 24 Ноября, 2007 - 20:36:03 - перейти к сообщению
Либо впишите ручками нужный домен
.домен.тлд

либо заменяйте не www
а что бы там небыло.
strpos
substr
15. Staind - 24 Ноября, 2007 - 22:05:44 - перейти к сообщению
Сейчас проверил свой код и все нормально. Я прочитал про strpos и substr. Они ведь несовсем то, что мне нужно. У меня заранее, если пользователь проголосовал со страничке с www, то www убираются и остается (происходит замена) только [точка]домен.

 

Powered by ExBB FM 1.0 RC1