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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Staind
Отправлено: 06 Ноября, 2007 - 22:56:45
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Здравствуйте форумчане.
Есть функция, обрабатывающая данные, введеные с формы (записать некую переменную в куки):
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) {... ?
Мне нужно, чтобы И все нормально записалось в куки и высвечивались сообщения (ошибки, или рапорты об успехе).
За ранее спасибо вам за помощь.
 
 Top
evgenijj
Отправлено: 07 Ноября, 2007 - 10:13:48
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Знаешь, словами объяснять у тебя плохо получается. Терминология мягко говоря странная. Например, "...Разные функции, обрабатывающие разные действия пользователя..." Какие действия пользователя? Это PHP, а не JavaScript. Это в JavaScript та можешь реагировать на действия пользователя -- onclick, onchange, onmouseover и т.п.

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

Поэтому предлагаю сделать так: ты выкладываешь свой код. Только, пожалуйста, не надо сюда вываливать 1000 строк кода. Читать это никто не будет. Вполне достаточно 20-30 строчек кода. Не поленись, и напиши небольшой скриптик иллюстрирующий твою проблему. И мы с удовольствием тебе поможем.
 
 Top
EuGen Администратор
Отправлено: 07 Ноября, 2007 - 11:38:24
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Я не понял, зачем or die там, где это у Вас написано. И вообще, Вам нужно четко представлять, когда и зачем Вы хотите выводить сообщения об ошибке.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Staind
Отправлено: 07 Ноября, 2007 - 16:24:52
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Скрипт, который отправляет на почту администратора письмо:
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 находиться шапка). Но как это сделать, не могу догнать.
 
 Top
evgenijj
Отправлено: 08 Ноября, 2007 - 10:36:47
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo 'Hello, world!';
  4. setcookie ('TestCookie', 'TestValue', time()+3600);
  5. ?>
  6.  
 
 Top
Staind
Отправлено: 09 Ноября, 2007 - 18:20:58
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Огромнейшее спасибо тебе evgenijj.
Кстати, ты же модератор, я на сайт тоже не давно поставил ExBB (от сюда прям скачивал). Так вот не давно он что-то заглючил и все таблицы на главной (http://www.itbuben.ru/forum) переглючило. Я пробовал удалять ненужные папки forum..., пробовал перезаписать все файлы из templatesInvisionExBB. Но ни к чему хорошему это не привело. Я смотрю, у вас на форуме тоже такая фигня твориться, ты не знаешь что это такое?
 
 Top
evgenijj
Отправлено: 09 Ноября, 2007 - 18:32:44
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Движок форума глючит. Вообще, насколько я могу судить, этот exbb - один большой глюк. Глючит везде - при показе главной страницы, при добавлении постов (по крайней мере в режиме модератора), при показе исходного кода php и т.п. Исправить я это не могу. А ARTY (автор портала PHP.SU), к сожалению, куда-то пропал.
 
 Top
Staind
Отправлено: 09 Ноября, 2007 - 19:13:17
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Понятно. Ух как жалко. Придется искать замену.
P.s. разобрался только что с буфиризированием Улыбка Оказывается, полезная это штука Улыбка))
 
 Top
Staind
Отправлено: 24 Ноября, 2007 - 12:41:23
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Знающие люди подскажите плиз.
У меня есть функция:
PHP:
скопировать код в буфер обмена
  1. setcookie ("opros2",$kukisy['id'],time()+99999999,"/","." . $_SERVER['HTTP_HOST']);

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



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




определи переменную $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
и понять в каком месте что должно стоять.
(полезно считать запятые)


-----
Truly yours, Sasha.
 
My status
 Top
Staind
Отправлено: 24 Ноября, 2007 - 13:04:00
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Эмм... не особо понял. Мне то нужно, чтобы, если уже голосовал - то показывались результаты, если не голосовал - то показывалось само голосование.
По поводу твоей идеи, а можно по подробнее, а то что-то догнать не могу :\\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.
 
 Top
valenok Модератор
Отправлено: 24 Ноября, 2007 - 16:41:50
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




прочитайте вот это
раз 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


У яндекса что не напишешь в субдомене - всё куда то ведёт
поэтому у них вот так.
А вам надо разбираться с куками.


-----
Truly yours, Sasha.
 
My status
 Top
Staind
Отправлено: 24 Ноября, 2007 - 18:19:38
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


У меня все правильно написано. 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);
 
 Top
valenok Модератор
Отправлено: 24 Ноября, 2007 - 20:36:03
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Либо впишите ручками нужный домен
.домен.тлд

либо заменяйте не www
а что бы там небыло.
strpos
substr


-----
Truly yours, Sasha.
 
My status
 Top
Staind
Отправлено: 24 Ноября, 2007 - 22:05:44
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


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

[+]


Сейчас проверил свой код и все нормально. Я прочитал про strpos и substr. Они ведь несовсем то, что мне нужно. У меня заранее, если пользователь проголосовал со страничке с www, то www убираются и остается (происходит замена) только [точка]домен.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB