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

Форум PHP

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

 

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

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

тема: cookies
 
 автор: Roo$   (05.06.2006 в 22:38)   письмо автору
 
 

Помогите мне со следующим вопросом. Допустим у меня есть госевая книга. Для добавления сообщения используется 3 поля. Name, e-mail, textBox. Как можно спомощью cookie запомнить на комп пользователя его имя и e-mail, что бы он при добавлении сообщения в поля name и e-mail сразу добавлялися его имя и mail.

   
 
 автор: Ziq   (05.06.2006 в 22:51)   письмо автору
 
   для: Roo$   (05.06.2006 в 22:38)
 

Для этого следует воспользоваться функцией setcookie

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
name - название
value - значение
expire время в секундах задается так time() + 3600  в данном примере соолшу сохраниться на 1 час

Теперь вернемся к Вашему примеру

До любого вывода в браузера введите этот текст

<?
setcookie 
("email",$email,time() + 3600*24);
setcookie ("name",$name,time() + 3600*24);
?>

Потом в любом месте скрипта данные из COOKIE можно получить через суперглобальный массив $_COOKIE. В Вашем случае примерно так

<input type="text" name="name" value="<? echo $_COOKIE['name']; ?>"><br>
<input type="text" name="email" value="<? echo $_COOKIE[email]; ?>">

   
 
 автор: Roo$   (06.06.2006 в 00:25)   письмо автору
 
   для: Ziq   (05.06.2006 в 22:51)
 

Большое спасибо за ответ. Это то что нужно было мне. Но может ответите еще на вопросик? Установил все как мне вы посоветовали. Но, допустим пользователь заходит в гостевую впервый раз, соответственно куки у него на компе еще нет (моей книги). Может поэтому у меня появляются такие ошибки со строками:

Warning: Cannot modify header information - headers already sent by (output started at z:\home\guest1\www\index.php:2) in z:\home\guest1\www\index.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at z:\home\guest1\www\index.php:2) in z:\home\guest1\www\index.php on line 3

Notice: Undefined index: nameq in z:\home\guest1\www\index.php on line 161
Notice: Undefined index: email in z:\home\guest1\www\index.php on line 162
где 161 и 162 это
<input type=text value...
<input type=text value..





Или не в этом дело? Почему они у меня вылетают все время?

   
 
 автор: valenok   (06.06.2006 в 00:45)   письмо автору
 
   для: Roo$   (06.06.2006 в 00:25)
 

Первым делом отсылаешь куку, а потом уже всё остальное..

   
 
 автор: cheops   (06.06.2006 в 10:57)   письмо автору
 
   для: Roo$   (06.06.2006 в 00:25)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12
http://www.softtime.ru/forum/ead.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
Вы можете также включить буфферизацию, если имеете доступ к конфигурационному файлу php.ini
output_buffering = On 


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8484

   
 
 автор: Roo$   (06.06.2006 в 15:40)   письмо автору
 
   для: cheops   (06.06.2006 в 10:57)
 

Если я первый раз захожу на строничку то у меня вылетают эти две ошибки
Notice: Undefined index: nameq in z:\home\guest1\www\index.php on line 161
Notice: Undefined index: email in z:\home\guest1\www\index.php on line 162
где 161 и 162 это
<input type=text value...
<input type=text value..
А в дольнейшем они не вылетают (2,3...раза заход.в гост.)
Мне кажется что надо сделать какуюто проверку. Т.к. при первом входе куки полей еще нет, а он пытается подставить значения, и наверное из-за этого вылетают эти ошибки??

   
 
 автор: P@Sol   (06.06.2006 в 15:48)   письмо автору
 
   для: Roo$   (06.06.2006 в 15:40)
 


Это предупреждение, вероятнее всего, возникает вследствие высокого уровня контроля ошибок в PHP. Однако множество готовых скриптов требуют более низкого уровня ошибок.

Вы можете установить более слабый контроль ошибок одним из следующих способов:

Впишите в скрипты строчку: 
Error_Reporting(E_ALL & ~E_NOTICE);
Этот способ особенно удобен, если в скрипте есть один файл (конфигурационный), который подключается всеми остальными.
Рекомендуемый способ. Создайте в директории со скриптом файл .htaccess следующего содержания: 
php_value error_reporting 7
Исправьте в /usr/local/php/php.ini значение error_reporting на E_ALL & ~E_NOTICE. Этот способ не является рекомендуемым и может привести к серьезным неудобствам при отладке!

   
 
 автор: Roo$   (06.06.2006 в 22:18)   письмо автору
 
   для: P@Sol   (06.06.2006 в 15:48)
 

Вродебы ошибки не вылетают, дома все работает без проблем, но когда на сайт выкладываю, то он не запоминает ничего. Посмотрите пожалуйсто в чем тут дело. Говорят якобы надо испоьзовать $HTTP_POST_VARS или $HTTP_GET_VARS. Но у меня всеравно не получается. Вот проект помогите мне пж (запускать j.php)

   
 
 автор: valenok   (06.06.2006 в 22:24)   письмо автору
 
   для: Roo$   (06.06.2006 в 22:18)
 

error_reporting(E_ALL);

   
 
 автор: Roo$   (06.06.2006 в 22:25)   письмо автору
 
   для: valenok   (06.06.2006 в 22:24)
 

Прописал

   
 
 автор: valenok   (06.06.2006 в 22:33)   письмо автору
 
   для: Roo$   (06.06.2006 в 22:25)
 

Это вместо eror_reprorting(E_ALL $ -E_NOTiCE)
Ошибки выдало?

   
 
 автор: Roo$   (06.06.2006 в 22:35)   письмо автору
 
   для: valenok   (06.06.2006 в 22:33)
 

Ошибки не выдают , но и не запоминает . Посмотрите пожалуйсто выше пример (прикреплен к сообщению)

   
 
 автор: valenok   (06.06.2006 в 22:36)   письмо автору
 
   для: valenok   (06.06.2006 в 22:33)
 

И кто такая переменная $name в самом начале скрипта?

   
 
 автор: Roo$   (06.06.2006 в 22:40)   письмо автору
 
   для: valenok   (06.06.2006 в 22:36)
 

$name я объявил как поле1. Затем я проверяю на наличие в папке файла с именем $name

   
 
 автор: valenok   (06.06.2006 в 22:40)   письмо автору
 
   для: valenok   (06.06.2006 в 22:36)
 

Это шутка? Конечно он ничего не пишет...
Ты собачки убери перед каждой функцией..

[поправлено модератором]

   
 
 автор: Roo$   (06.06.2006 в 22:43)   письмо автору
 
   для: valenok   (06.06.2006 в 22:40)
 

убрал, и все равно не хочет

   
 
 автор: valenok   (06.06.2006 в 22:51)   письмо автору
 
   для: valenok   (06.06.2006 в 22:40)
 


<?php if(isset($_POST['name'])) { setcookie ("name",$name,time() + 3600*24); } 
@
$pos="Вы тут были ".$_COOKIE['counter']." раз. <br>";
//Сначала использование переменной потом проверка........
if ( !isset($_COOKIE['counter']) ) {
setcookie("counter"1);
}else {
setcookie("counter"$_COOKIE['counter']+1,mktime(0,0,0,01,25,2010));
}
?>

<form method=post>
<input type=hidden name=action value=post>

Логин:<br>
  <input type=text name=name value="<? @echo $_COOKIE['name']; ?>"><br>
Пароль:<br>
  <input name="pass" type="password" value="">
  <br>
  <input type=submit value="Нажать">
  <br><br>
  <a href="k.php">&#208;&#229;&#227;&#232;&#241;&#242;&#240;&#224;&#246;&#232;&#255;</a>
</form>


<?php
echo $pos;
echo 
"Какойто текст";

$pass=$_POST['pass'];
$filename=$_POST['name'];
// =) сейчас ты объяснишь зачем тут была переменная $name

if ( file_exists($filename) ) {
   
$text file($name);
   foreach(
$text as $val)
    {
if(
$val == $pass){ echo "текст. Я никогда так не буду написан";}
// А кто такая $val и где она живёт? А может она не курит, а может она не пьёт ???
   
}
}
else { print 
"Файла нема";exit;}

//  у тебя для каждого пользователя по файлу? Псих
?>



[поправлено модератором]

   
 
 автор: Roo$   (06.06.2006 в 22:59)   письмо автору
 
   для: valenok   (06.06.2006 в 22:51)
 

Да, у меня для каждого пользователя создается свой файл в котором хронится его пароль, а имя его это и есть название файла.
Там я делал проверку если в текущем файле есть файл с именем введеное в поле1 ($name), то следующим действием открываю файл и проверяю на ноличие правельно введенго пароля

   
 
 автор: valenok   (06.06.2006 в 23:04)   письмо автору
 
   для: Roo$   (06.06.2006 в 22:59)
 

[поправлено модератором]

   
 
 автор: valenok   (06.06.2006 в 23:07)   письмо автору
 
   для: valenok   (06.06.2006 в 23:04)
 

Первым делом в разработке приложений является креативная часть.
Как сделать это или то и только пот делать.

Сначала реши как это сделать.
Словами на бумажке.

А потом найти подходящюю функцию - не очень трудно...

   
 
 автор: Roo$   (06.06.2006 в 23:07)   письмо автору
 
   для: valenok   (06.06.2006 в 23:04)
 

пробывал, но с базой дан. не дружу ....

   
 
 автор: valenok   (06.06.2006 в 23:11)   письмо автору
 
   для: Roo$   (06.06.2006 в 23:07)
 

Всё в порядке? Разобрался?

   
 
 автор: Roo$   (06.06.2006 в 23:11)   письмо автору
 
   для: Roo$   (06.06.2006 в 22:18)
 

ТЫ мне можешь закинуть исправленный куки проект, а то у меня все равно не пашет

   
 
 автор: Roo$   (06.06.2006 в 23:13)   письмо автору
 
   для: Roo$   (06.06.2006 в 23:11)
 

Вот тормоз, скажешь наверное, попался мне.....

   
 
 автор: valenok   (06.06.2006 в 23:34)   письмо автору
 
   для: Roo$   (06.06.2006 в 23:13)
 

О ком о ком, но о себе никогда ничего такого не говори / пиши.
Конечно не могу.

Раз ты не можешь спроектировать свой проект - в этом могу чуть чуть помочь.
1. Форма - есть форма в ней такие то поля
2. Надо чтоб после того как пользователь в первый раз её заполнил, значение одного из полей осталось..
3. Предпологаемый механизм реализыции - куки

4. Надо проверить правильность введённого пользователем пароля который храниться в файле
5. файл один на всех

6. как можно устроить один файл на всех? - ну наверное по строчке на пользователя
6.а. Топаю на форум и спрашиваю - как строку типа "логин пароль" разбить на две отдельных переменных логин и праоль.

7. Добавить немного безопасности...
7.а. - на форум: каким образом обезопасить свой скрипт от передачи нехороших данных?

Ответы:
о куках можно почитать тут: Setcookie
о разбивании строк тут: хurl=http://il.php.net/manual/ru/ref.strings.php] Strings[/url] (Весь раздел на Русском + внизу целый список строковых функций)
о безопасности: скорее всего надо предпологать что данные переданные пользователем тоже в принципе строки. Значит туда же.

Ну и о работе с файлами тут:Файловая система

[поправлено модератором]

   
 
 автор: cheops   (07.06.2006 в 01:24)   письмо автору
 
   для: Roo$   (05.06.2006 в 22:38)
 

Можно воспользоваться следующим скриптом
<?php
  Error_Reporting
(E_ALL & ~E_NOTICE);
  
$filename=$name;

  
// Обработчик HTML-формы
  
if(!empty($_POST))
  {
    
$name=$_POST['name'];
    
$pass=$_POST['pass'];
    
$passto=$_POST['passpovtor'];
    
setcookie ("name",$name,time() + 3600*24);
    
setcookie ("pass",$pass,time() + 3600*24);
    
header("Location: $_SERVER[PHP_SELF]")
  }
  if(!empty(
$_COOKIE))
  {
    echo 
"Hello, ".$_COOKIE['name']."<br>";
  }
?>

<form method=post>
Имя:<br>
  <input type=text name=name><br>
Пароль:<br>
  <input name="pass" type="password" value="">
  <br>
Повторить ввод пароля:<br>
  <input name="passpovtor" type="password" value="">
  <br> <br>
  <input type=submit value="Зарегистрироваться">
</form>

   
 
 автор: valenok   (07.06.2006 в 07:32)   письмо автору
 
   для: cheops   (07.06.2006 в 01:24)
 

if(!empty($_POST) значит у тебя с одним именем пройдут ли только с паролем.
если так значит весьма не эффективная поверка для работающих с БД
которым если не ввести пароль можно спокойно войти по нужному логину...

А откуда там на третей строке опредлилась перемнная $name;

   
 
 автор: cheops   (07.06.2006 в 11:50)   письмо автору
 
   для: valenok   (07.06.2006 в 07:32)
 

Это демонстрационный скрипт.
if(!empty($_POST)) означает лишь одно - что пользователь нажал кнопку подтверждения и для определения этого факта - это идеальная проверка. Никаких других проверок, в том числе на занятость имени, не проводится дабы не перегужать скрипт и не мешать его пониманию.

PS У вас наблюдаются явно двойные стандарты, вам кажется, что написанный вами скрипт слишком большой и подробный, а написанный другими людьми скрипт, слишком маленький и не обрабатывает всех частных случаев.

>А откуда там на третей строке опредлилась перемнная $name;
Осталось во время редактирования первого поста сообщения.

   
Rambler's Top100
вверх

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