Помощник
|
Как сделать форму и её обработчик в одном файле?, файл add_comments.php |
Banderas
|
Сообщение
#1
|
||
|
|
||
|
|||
yury_mw |
10.6.2011, 22:31;
Ответить: yury_mw
Сообщение
#2
|
|
Banderas,
твой код править лень. ;) Просто покажу свой, где запрос и обработка живут в одном файле. Он короткий и простой, разобраться и сделать так же у себя — легко. Суть такая: * мы знаем, что в нашей форме обработчику передается некое значение * если мы в первый раз вызываем обработчик, то через форму ничего не передавалось, поэтому достаточно проверить установлено ли это значение в массиве переданных переменных (в моем примере — это $_POST['utime']), сделать это можно функцией isset() или, как у меня, заодно проверить правильность формата переданных данных (у меня должно быть передано число, поэтому используется функция is_numeric()) * ну а затем, в зависимости от результата проверки, выбираем дальнейшие действия Файл utime.php Пересчитывает UNIX-время в дату по МСК — либо введенное в форму либо текущее (если в первый раз вызван или была введена ерунда, непохожая на цифру). И пишет эту дату по-англ. и по-русски [php]<?php $ut = is_numeric($_POST['utime']) ? $_POST['utime'] : time(); ?> <form action="utime.php" method="post"> <input type="text" name="utime" value="<?php echo $ut; ?>" /> <input type="submit" value="пересчитать UNIX-время в дату по МСК" /> </form> <?php $ru_month = array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"); $ru_day = array("воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"); $wday = date("w",$ut); $month = date("n",$ut)-1; $r_wday = $ru_day[$wday]; $r_month = $ru_month[$month]; echo date("l, F j, Y, H:i:s",$ut) . "<br />"; echo $r_wday . ", " . date("j",$ut) . " " . $r_month . date(" Y г., H:i:s",$ut); ?>[/php] Поблагодарили: (0) |
|
|
Banderas
|
Сообщение
#3
|
|
Что то я толком не понял
вот так надо сделать? метод передачи обязательно POST? [php]<?php $art_id = isset($_POST['id']) ? $_POST['id'] : ''; ?> <form action='add_comment.php?' method='post'> E-mail: <br/><input type='text' name='mail' /><br/> <input type='hidden' name='art_id' value="<?php echo $art_id; ?>"/> // та самая важная строка <input type='button' name='ok' value='Отправить'/><br/> </form> <?php !isset($_GET['ok']) ? die('кнопка Отправить не нажата'): print('form sent sucssesful'); $data = array($_POST['text'], $_POST['author'], $_POST['mail'], date(Ymd));[/php] |
|
|
yury_mw |
11.6.2011, 13:37;
Ответить: yury_mw
Сообщение
#4
|
|
Banderas,
индекс массива $_POST соответствует значению параметра name в поле ввода. Т.е. чтобы посмотреть что нам передано через это поле ввода [php]<input type='text' name='mail' />[/php]следует использовать $_POST['mail'] а через это поле [php]<input type='hidden' name='art_id' value="<?php echo $art_id; ?>"/>[/php]следует использовать $_POST['art_id'] и т.д. В поле value обычно помещается значение, которое будет показано в данном поле сразу после загрузки страницы, или, если наше поле скрытое (type='hidden'), то таким образом можно передавать значения обрабатывающему скрипту _после_ нажатия кнопки с type='submit' (которой в вашем коде, кстати, нету), т.е. строка html [php]<input type='hidden' name='art_id' value='123' />[/php] поместит в $_POST['art_id'] значение 123, не отображая ничего на странице. Вы уверены, что это поле должно быть скрытым? Метод post обычно используется для передачи данных через поля форм (см пример выше), а метод get — через параметры в адресной строке (типа, index.php?mail=banderas@mail.ru&art_id=123, в этом случае получим в $_GET['mail'] — banderas@mail.ru, а в $_GET['art_id'] — 123 ). Подробнее расспросите, хоть у яндекса, про разницу между этими методами: http://yandex.ru/yandsearch?text=разница+м...m=os&lr=219 Берем первую ссылку, читаем, что эти методы различаются: * способом передачи данных post — через стандартный поток get — вместе с URL * максимальным объёмом данных post — 8 Кб get — 256 байт * кэшированием данных post — нет get — да и делаем выводы о подходящем для нашего случая методе. |
|
|
ThanDdoR |
19.6.2011, 1:58;
Ответить: ThanDdoR
Сообщение
#5
|
|
Помоему проще сделать через switch
Если что стукни, расскажу и покажу все |
|
|
matroskin8 |
19.6.2011, 12:00;
Ответить: matroskin8
Сообщение
#6
|
|
Можно так, как ниже
Использованы сессии, в частности для того, чтобы решить проблему F5. В таблице БД 4 поля: id, author, mail, text. Все 3 поля формы обязательны к заполнению. Если какое-то из полей не должно быть обязательным - достаточно убрать строку с проверкой данного поля на пустоту. В общем, думаю, что ничего сложного нет, тем более, что добавлял комментарии к коду. [php]<?php session_start(); mysql_connect("localhost", "root", "") or die("No connect to server"); mysql_select_db("test") or die("No select DB"); if($_POST['ok']){ $author = trim(mysql_real_escape_string($_POST['author'])); $mail = trim(mysql_real_escape_string($_POST['mail'])); $text = trim(mysql_real_escape_string($_POST['text'])); $error = ''; // переменная для ошибок /* проверяем заполнение обязательных полей */ if(empty($author)) $error .= '<li>Не заполнено поле "Ваше имя"</li>'; if(empty($mail)) $error .= '<li>Не заполнено поле "E-mail"</li>'; if(empty($text)) $error .= '<li>Не заполнено поле "Текст комментария"</li>'; if(empty($error)){ // если в $error ничего не попало - все ок $res = mysql_query("INSERT INTO `comment` SET `author`='{$author}', `mail`='{$mail}', `text`='{$text}'"); if(mysql_affected_rows() > 0){ // если данные добавлены в БД $_SESSION['res'] = 'Добавлено!'; header("Location: {$_SERVER['PHP_SELF']}"); exit; }else{ // если данные не добавлены в БД $_SESSION['res'] = 'Не добавлено!'; $_SESSION['author'] = $author; $_SESSION['mail'] = $mail; $_SESSION['text'] = $text; header("Location: {$_SERVER['PHP_SELF']}"); exit; } }else{ //иначе - не заполнены все обязательные поля $_SESSION['res'] = '<ul>' .$error. '</ul>'; $_SESSION['author'] = $author; $_SESSION['mail'] = $mail; $_SESSION['text'] = $text; header("Location: {$_SERVER['PHP_SELF']}"); exit; } } ?> <form method='post' action=""> Ваше имя: <br/><input type='text' name='author' value="<?php echo $_SESSION['author']; ?>" /><br/> E-mail: <br/><input type='text' name='mail' value="<?php echo $_SESSION['mail']; ?>" /><br/> Текст комментария:<br/> <textarea name='text' rows='8' cols='30'><?php echo $_SESSION['text']; ?> </textarea><br/> <input type='submit' name='ok' value='Отправить'/><br/> </form> <?php echo $_SESSION['res']; session_unset(); session_destroy(); ?>[/php] |
|
|
FordogeN |
19.6.2011, 18:54;
Ответить: FordogeN
Сообщение
#7
|
|
Простейший способ
[php]<?php if(isset($_POST['name'])){ // Обработчик }else{ // Здесь форма в которой есть поле <input type='text' name='name'> } ?>[/php] -------------------- |
|
|
ThanDdoR |
20.6.2011, 2:25;
Ответить: ThanDdoR
Сообщение
#8
|
|
|
Даже показали как обработать форму и избежать инъекций!!
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Как вы бросили работу и перешли на заработок с сайтов? | 7 | uahomka | 1567 | 17.3.2024, 14:54 автор: uahomka |
|
Арбитражники, как ведете учет расходов и доходов? | 10 | Boymaster | 1468 | 17.3.2024, 3:22 автор: malamut |
|
Как отозвать банковский платеж фрилансеру? | 26 | metvekot | 3656 | 15.3.2024, 10:42 автор: Skyworker |
|
Как вы отдыхаете от работы за компом | 140 | adw-kupon.ru | 18368 | 12.3.2024, 23:28 автор: Lumex |
|
Как бездомные хранят деньги? | 79 | metvekot | 13008 | 12.3.2024, 23:00 автор: Lumex |
Текстовая версия | Сейчас: 19.3.2024, 9:31 |