Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> cookies 
:(
    Опции темы
assasinnn
Дата 20.3.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.8.2009

Репутация: нет
Всего: нет



написал небольшое подобие гостевой книги, просто для ознакомления... Встал вопрос, как сделать так, чтобы в форме выводился ник последнего отправившего сообщение пользователя?
Использовал setcookie()... но выводится не предыдущее, а предпредыдущее... спасибо, кто поможет в решении.
Вот код:
Код

<?php
if(isset($_POST['username']))
{
setcookie("cookie",$_POST['username']);
}
?>
<html>

<head>
 <title>Гостевая книга</title>
</head>
<body>
<?php
$delitmer = "<|-|>";
$username_limit = 50;
$email_limit = 80;
$message_limit = 500;

 if (isset($_POST['username']) & isset($_POST['email']) & isset($_POST['message']))
    {
         if (((strlen($_POST['username'])>0) && (strlen($_POST['username'])<=$username_limit)) &&
            ((strlen($_POST['email'])>0) && (strlen($_POST['email'])<=$email_limit)) &&
            ((strlen($_POST['message'])>0) && (strlen($_POST['message'])<=$message_limit)))
            {
                $arr = array($_POST['username'], $_POST['email'], $_POST['message']);
                $message_str = implode($delitmer, $arr)."\n";
                $file = fopen("messages.txt", "a+");
                fwrite($file, $message_str);
                fclose($file);
                echo "Ваше сообщение добавлено!";
            }
            else
            {
                echo "Ошибка!!!<br>Не все данные введены, либо в одном из полей формы слишком много символов.";
            }
    }
$shablon = '
<table border="1" width="100%">
    <tr>
        <td width="100%">Имя пользователя: %username%</td>
    </tr>
    <tr>
       <td width="100%">E-mail: %email%</td>
    <tr>
        <td width="100%">Message: %message%</td>
    </tr>
</table>
<br>';

$data = file("messages.txt");

foreach($data as $val)
{
  list($username, $email, $message) = explode($delitmer, $val);
  $tmp_message = str_replace("%username%", $username, $shablon);
  $tmp_message = str_replace("%email%", $email, $tmp_message);
  $tmp_message = str_replace("%message%", $message, $tmp_message);
  echo $tmp_message;
}
?>

<form name="gbook" method="post">
<table border="1" align="center">
    <tr>
        <td align="right">Ваше имя:</td>
        <td align="left"><input type="text" name="username" value = <?echo $_COOKIE["cookie"];?> ></td>
    </tr>
    <tr>
        <td align="right">Ваш e-mail:</td>
        <td align="left"><input type="text" name="email"></td>
    </tr>
    <tr>
        <td align="right" valign="top">Ваше сообщение:</td>
        <td align="left"><textarea name="message" rows="6" cols="37"></textarea></td>
    </tr>
    <tr>
        <td align="center"><input type="submit" name="send" value="Добавить сообщение"></td>
    </tr>
</table>
</form>

</body>

</html>

PM MAIL   Вверх
bars80080
Дата 20.3.2010, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



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

используйте файлы или БД на сервере.
PM MAIL WWW   Вверх
Ипатьев
Дата 20.3.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Ну, наверное надо посмотреть в документации откуда у нас берется массив  $_COOKIE

PM MAIL   Вверх
bars80080
Дата 20.3.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(assasinnn @  20.3.2010,  21:26 Найти цитируемый пост)
if(isset($_POST['username']))
{
setcookie("cookie",$_POST['username']);
}

вообще, это дословно означает: вывод ник последнего моего сообщения. но никак не другого пользователя
PM MAIL WWW   Вверх
assasinnn
Дата 20.3.2010, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.8.2009

Репутация: нет
Всего: нет



Цитата(bars80080 @ 20.3.2010,  22:32)
Цитата(assasinnn @  20.3.2010,  21:26 Найти цитируемый пост)
if(isset($_POST['username']))
{
setcookie("cookie",$_POST['username']);
}

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

ок, прошу прощения, нужно вывести ник из последнего сообщения...
PM MAIL   Вверх
bars80080
Дата 20.3.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(assasinnn @  20.3.2010,  21:40 Найти цитируемый пост)
ок, прошу прощения, нужно вывести ник из последнего сообщения... 

тогда проще
Код


<?php
$nic = (isset($_POST['username'])) ? htmlspecialchars($_POST['username']) : '';
?>

 <td align="left"><input type="text" name="username" value="<?php echo $nic;?>" /></td>

PM MAIL WWW   Вверх
Ипатьев
Дата 20.3.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



И тут мы вспоминаем, что после поста всегда делается редирект... smile
PM MAIL   Вверх
assasinnn
Дата 20.3.2010, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.8.2009

Репутация: нет
Всего: нет



предложенный способ так же прост, как и гениален) но мне нужно именно с использованием cookies
PM MAIL   Вверх
bars80080
Дата 21.3.2010, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(assasinnn @  20.3.2010,  22:00 Найти цитируемый пост)
но мне нужно именно с использованием cookies 

для этого наверное существует веская причина. как собственно и для вопроса


если немного потелепатировать, то можно предположить, что это нужно только для того, чтобы облегчить посетителю гостевой книги его нелёгкий труд и избавить его от повторного заполнения поля "ник", если он вдруг решит написать ещё один пост

Это сообщение отредактировал(а) bars80080 - 21.3.2010, 02:20
PM MAIL WWW   Вверх
assasinnn
Дата 21.3.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.8.2009

Репутация: нет
Всего: нет



это, конечно, хорошо, что мой вопрос поняли, но решение кто-нибудь предложит? или можно не рассчитывать...
PM MAIL   Вверх
Ипатьев
Дата 21.3.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



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

PM MAIL   Вверх
assasinnn
Дата 21.3.2010, 11:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.8.2009

Репутация: нет
Всего: нет



Код

if(isset($_POST['username']))
{
setcookie("cookie",$_POST['username']);
echo '<meta http-equiv="Refresh" content="0;">';
}

я правильно понял? smile 

Это сообщение отредактировал(а) assasinnn - 21.3.2010, 11:20
PM MAIL   Вверх
NewDima
Дата 21.3.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



assasinnn, куки не имеют с решением этой задачи ничего общего.
Тебе это сказали уже сверху. Их для этого не используют, как не используют бульдозер для отделки фасада офисного здания. Потому что они для этого не предназначены!
PM ICQ   Вверх
assasinnn
Дата 21.3.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.8.2009

Репутация: нет
Всего: нет



да все я прекрасно понимаю) но если сказали с помощью cookie, то отвертеться не получится... потому и спрашиваю
PM MAIL   Вверх
bars80080
Дата 21.3.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NewDima @  21.3.2010,  10:33 Найти цитируемый пост)
куки не имеют с решением этой задачи ничего общего.

не совсем. куки не имеют ничего общего с первичной задачей, озвученной в топике. по мере телепатирования стало ясно, что он хотел, а тут уже куки как раз к месту. по сути надо пользоваться сессией, если бы была авторизация, а за не имением её для передачи данных между разными сеансами - куки естественный выход.

ну, и как сказал Ипатьев, осталось первичный код переписать примерно так:

Код
<?php
$delitmer = "<|-|>";
$username_limit = 50;
$email_limit = 80;
$message_limit = 500;
if (isset($_POST['username']) & isset($_POST['email']) & isset($_POST['message'])) {
    setcookie("cookie",$_POST['username']);
         if (((strlen($_POST['username'])>0) && (strlen($_POST['username'])<=$username_limit)) &&
            ((strlen($_POST['email'])>0) && (strlen($_POST['email'])<=$email_limit)) &&
            ((strlen($_POST['message'])>0) && (strlen($_POST['message'])<=$message_limit)))
            {
                $arr = array($_POST['username'], $_POST['email'], $_POST['message']);
                $message_str = implode($delitmer, $arr)."\n";
                $file = fopen("messages.txt", "a+");
                fwrite($file, $message_str);
                fclose($file);
                $mes = rawurlencode('Ваше сообщение добавлено!');
                // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                header('Location: http://url этого скрипта?mes='.$mes); exit;
            }
            else
            {
                echo "Ошибка!!!<br>Не все данные введены, либо в одном из полей формы слишком много символов.";
            }
    }

?>
<html>
<head>
 <title>Гостевая книга</title>
</head>
<body>
<?php

if(isset($_GET['mes'])) { echo htmlspecialchars(rawurldecode($_GET['mes'])); }

// ...
// далее, начиная с шаблона, без изменений


Это сообщение отредактировал(а) bars80080 - 21.3.2010, 13:04
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.