X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Как сделать форму и её обработчик в одном файле?, файл add_comments.php
Banderas
Banderas
Topic Starter сообщение 10.6.2011, 19:29; Ответить: Banderas
Сообщение #1


Хочу что бы в одном файле были формы и обрабатывался запрос на добавление комментария. Как мне это сделать?
[php]<form action='add_comment.php?' method='get'>
Ваше имя: <br/><input type='text' name='author' /><br/>
E-mail: <br/><input type='text' name='mail' /><br/>
Текст комментария:<br/>
<textarea name='text' rows='8' cols='30'>
</textarea><br/>
<input type='button' name='ok' value='Отправить'/><br/>
</form>

<?php
!isset($_GET['ok']) ? die('кнопка Отправить не нажата'): '';
$data = array($_GET['text'], $_GET['author'], $_GET['mail'], date(Ymd));[/php]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
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
Banderas
Topic Starter сообщение 11.6.2011, 10:57; Ответить: Banderas
Сообщение #3


Что то я толком не понял :D
вот так надо сделать? метод передачи обязательно 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
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
ThanDdoR
сообщение 19.6.2011, 1:58; Ответить: ThanDdoR
Сообщение #5


Помоему проще сделать через switch :D
Если что стукни, расскажу и покажу все
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 19.6.2011, 12:00; Ответить: matroskin8
Сообщение #6


Можно так, как ниже :D
Использованы сессии, в частности для того, чтобы решить проблему 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
FordogeN
сообщение 19.6.2011, 18:54; Ответить: FordogeN
Сообщение #7


Простейший способ

[php]<?php
if(isset($_POST['name'])){
// Обработчик
}else{
// Здесь форма в которой есть поле <input type='text' name='name'>
}
?>[/php]


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ThanDdoR
ThanDdoR
сообщение 20.6.2011, 2:25; Ответить: ThanDdoR
Сообщение #8


Даже показали как обработать форму и избежать инъекций!! :D

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
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


 



RSS Текстовая версия Сейчас: 19.3.2024, 9:31
Дизайн