PHP: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <title>Гостевая Книга</title> <meta http-equiv="Content-Type" content="text/html; charset= windows-1251"> <head></head> <body> <form action = '' method = 'POST'> <b>Имя</b><br><input type = 'text' name = 'name'><br> <b>Имейл</b><br><input type = 'text' name = 'email'><br> <b>Сообщение</b><br><textarea cols = '70' rows = '20' name = 'message'></textarea><br> <input type = 'submit' name = 'submit' value = 'Отправить'> <input type = 'reset' value = 'Очистить'><br><br> <?php $date = date('t/m/Y - h:i:s'); $name = trim(substr($_POST['name'],0,25)); $email = trim(substr($_POST['email'],0,25)); $message = trim(substr($_POST['message'],0,300)); $email = filter_var ($_POST['email'],FILTER_VALIDATE_EMAIL); if(!filter_var ($_POST['email'],FILTER_VALIDATE_EMAIL) && isset ($_POST['email'])) { exit('<b><font color = \'red\'>Не верно заполнено поле имейл</font></b>'); } $name = htmlspecialchars($_POST['name'],ENT_QUOTES,'UTF-8'); $email = htmlspecialchars($_POST['email'],ENT_QUOTES,'UTF-8'); $message = htmlspecialchars($_POST['message'],ENT_QUOTES,'UTF-8'); if (isset ($_POST['name']) && isset ($_POST['email']) && isset ($_POST['message'])) { $mysql_connect = mysql_connect ('localhost','root','vertrigo') or die (mysql_error()); $insert_query = mysql_query ("INSERT INTO guestbook.main (date,name,email,message) VALUES ('$date','".mysql_real_escape_string($name)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($message)."');") or die (mysql_error()); if ($insert_query) { $select_query = mysql_query ("SELECT date,name,email,message FROM guestbook.main") or die (mysql_error()); while ($row = mysql_fetch_array($select_query)) { echo "Дата: {$row['date']} Имя: {$row['name']} Имейл: {$row['email']}".'<br>'.'<br>'."Сообщение: {$row['message']}".'<br>'.'<br>'; } } } ?> </body> </html> После отправки сообщения, при нажатии на F5, многократно дублируется и вносится в базу последнее сообщение, как этого избежать? Еще почему то не отображается дата, все время выводит 0000-00-00 00:00:00
всё, что касается работы с БД и проверкой POST-данных, помещаем ДО какого-либо вывода (в данном случае до Code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> ). После проверки данных и соответствующих действий в БД используй редирект сразу, чтобы при F5 потом не отправлялись данные заново. Либо оставляй, как есть, редирект делай на JS или средствами meta через n секунд, если хочешь показать какое-то сообщение после добавления. Дату просто клади в формате date(U), потом выводи как нужно.
Редирект не помогает, я уже пытался так делать, до того, как запостил сюда. В общем был бы признатален, если бы дали готовый вариант, так как перепробовал уже все что можно. Голова уже не соображает.
PHP: if ($insert_query) { $select_query = mysql_query ("SELECT date,name,email,message FROM guestbook.main") or die (mysql_error()); while ($row = mysql_fetch_array($select_query)) { echo "Дата: {$row['date']} Имя: {$row['name']} Имейл: {$row['email']}".'<br>'.'<br>'."Сообщение: {$row['message']}".'<br>'.'<br>'; echo "<script type=text/javascript>document.location.href='".basename(__FILE__)."'</script>"; //redirect } } попробуй так
Необходимо сравнить две переменные, Если переменная a = b ничего не выводим, а вот если b хоть чем то отличается от a - выводим текст. Я ничего лучше придумать не смог чем: if ($a == $b) $c = ''; else $c = '<tr><td>abc!</td></tr>'; В принципе работает, но хочется сделать более быстрый вариант
Чё-то смысла в этом.. При первой же итерации редирект сработает, не дав юзеру прочитать сообщение. Тогда уж в head пишем <meta http-equiv="refresh" content="5;URL=адрес"> Через 5 секунд сработает редирект на "адрес".
Так юзер не успеет ввести сообщение, так как идет редирект через 5 секунд его нахождения на странице, а если и успеет, то после редиректа не отображаются не старые ни новые сообщения, просто пустая форма. Может в логике скрипта какая то ошибка и дело тут вовсе не в редиректе ?
допиши в конец скрипта echo "<script type=text/javascript>document.location.href='".basename(__FILE__)."'</script>"; чтобы редирект был только после того как все действия выполнятся UP: точнее не в конец а после while
Если у тебя уже поймался $_POST, то зачем пользователь должен что-либо вводить? Если есть $_POST - отрабатываем добавление в БД и делаем редирект на эту же страницу, если нет - даём юзеру заполнить поля. SHiNiGaMi, всё равно юзер ничё не успеет увидеть.
Timon132009 Это ответ почему не видна внешняя переменная $res: https://forum.antichat.ru/showthread.php?p=2407843#post2407843 https://forum.antichat.ru/showthread.php?p=2394475#post2394475 И посмотрите, какой параметр передается функции. Уточняю для ленивых - вы должны прописать вместо echo xorkey($a); => echo xorkey($res);
$file='@C:\Users\ФиЛя\Desktop\Папки\ПХП\Тест\peoples\ava\'.$x1.'.jpg'; $data=array('photo' => $file); так он выдает ошибку но если вместо переменной поставим цифку или букву то норм : $file='@C:\Users\ФиЛя\Desktop\Папки\ПХП\Тест\peoples\ava\1.jpg'; $data=array('photo' => $file); скрин ошибки http://cs10555.vkontakte.ru/u80070400/-3/x_003cca84.jpg ошибку выдает на $data=array('photo' => $file); как в неё переменную вставить?
Обратный слеш в пути файла экранирует кавычку, поэтому вылезает ошибка. Делай так: PHP: $file='C:/Users/ФиЛя/Desktop/Папки/ПХП/Тест/peoples/ava/'.$x1.'.jpg'; $data=array('photo' => $file); Либо так: PHP: $file='C:\Users\ФиЛя\Desktop\Папки\ПХП\Тест\peoples\ava\\'.$x1.'.jpg'; $data=array('photo' => $file);
Не получается подсчитать кол-во символов в строке массива.. Вот код, но вывод 0, всесто 4.... Или я не к месту использовал strlen() ? PHP: $files = file("1.txt"); if(!$files) { echo "Error"; } else { for($i = 1; $i <= count($files);$i++) { $str_len = strlen($files[$i]); echo ("$str_len"."\n"); }}
PHP: <?php $file_array = file("c.txt"); $co = count($file_array); for($i = 0; $i <= $co; $i++) { $file_array[$i] = trim($file_array[$i]); $str_len = strlen($file_array[$i]); echo $str_len."<br>"; } ?>
miniden, сорри я сейчас проверить не могу... Так что задам вопрос. Может я конечно что-то не доглядел... Но кроме того что удаляются пробелы, я ничего нового не заметил =( Или я что-то пропустил?