пытаюсь создать форму, где пользователь может добавлять объявление о продаже собаки. если вводит все обязательные поля то выводим сообщение под формой что добавлено, если какое то из полей не заполнено то пишем под формой не заполнили такое то поле, и при этом не удалять данные что правельно ввел юзер.
На сколько я знаю обработчик лучше делать в том же файле что и форма. Но возникает много вопросов, есть ошибки нужна помощь.
вот форма
<h2>Добавить объявление</h2>
<table class="kab" align="center" cellspacing="0" cellpadding="0">
<tr>
<td>
<?php
$title = !empty($_POST['title']) ? $_POST['title'] : null;
$poroda = !empty($_POST['poroda']) ? $_POST['poroda'] : null;
$cena = !empty($_POST['cena']) ? $_POST['cena'] : null;
$city = !empty($_POST['city']) ? $_POST['city'] : null;
$tel = !empty($_POST['tel']) ? $_POST['tel'] : null;
$mail = !empty($_POST['mail']) ? $_POST['mail'] : null;
$text = !empty($_POST['text']) ? $_POST['text'] : null;
$d_text = !empty($_POST['d_text']) ? $_POST['d_text'] : null;
$dater = !empty($_POST['dater']) ? $_POST['dater'] : null;
?>
<form class="ww" name="form1" action="new_obyava.php" method="post" enctype="multipart/form-data">
<br><br>
<table>
<label>
<tr>
<td height="35" width="200">Заголовок объявления:*</td>
<td><input class="knopkaf" type="text" name="title" id="title" style="width: 349px"></label>
</td>
</tr>
<tr> <label>
<td height="35" width="200">Порода:*</td>
<td> <select class="knopkaf" name="poroda" id="poroda" style="width: 352px">
<? $resul2 = mysql_query ("SELECT * FROM vseporodi",$db);
while ($myro2 = mysql_fetch_assoc($resul2))
{
print "<option value='{$myro2['poroda']}'>{$myro2['poroda']}</option>";
};
?>
</select>
</label>
</td>
</tr>
<tr>
<label>
<td height="35" width="200">Фотография:</td>
<td>
<input class="knopkaf" type="FILE" name="fupload" style="width: 250px">
</label>
</td></tr>
<tr><label>
<td height="35" width="200">Цена:*</td>
<td>
<input class="knopkaf" type="text" name="cena" id="cena" style="width: 250px">
</label>
</td></td>
<tr><label>
<td height="35" width="200">Город:*</td>
<td>
<input class="knopkaf" type="text" name="city" id="city" style="width: 250px">
</label>
</td></tr>
<tr><label>
<td height="35" width="200">Контактный телефон:*</td>
<td>
<input class="knopkaf" type="text" name="tel" id="tel" style="width: 250px">
</label>
</td></tr>
<tr><label>
<td height="35" width="200">Email:*</td>
<td>
<input class="knopkaf" name="mail" type="text" id="validate" width="30"><span id="validEmail"></span>
</label>
</td></tr>
<tr><label>
<td height="35" width="200">Текст объявления:*</td>
<td>
<textarea class="knopkaf_4" name="text" id="text" cols="40" rows="4"></textarea>
</label>
</td></tr>
<tr><label>
<td height="35" width="200"><br>Дополнительная информация:</td>
<td><br>
<textarea class="knopkaf_4" name="d_text" id="d_text" cols="40" rows="6"></textarea>
</label>
</td></tr></table><br>
<p> (*) - поля, обязательные для заполнения.</p><br>
<br> <div align="center">
<input class="knopka9" name="submit" id="submit" type="submit" value="Добавить объявление">
</div>
<input name="author" type="hidden" value="<? echo $login; ?>" /><br>
</form><br><br>
<?php
if(!empty($_POST['submit']) )
{
if(!$title)
echo 'Текстовое поле1 не заполнено.';
if(!$poroda)
echo 'Текстовое поле2 не заполнено.';
if(!$cena)
echo 'Текстовое поле3 не заполнено.';
if(!$city)
echo 'Текстовое поле4 не заполнено.';
if(!$mail)
echo 'Текстовое поле5 не заполнено.';
if(!$text)
echo 'Текстовое поле6 не заполнено.';
else {
/*Сдесь пишем то что можно заносить в базу*/
$dater = date("Y-m-d");
$result = mysql_query ("INSERT INTO kuplu (title,fupload,poroda,dater,city,tel,mail,text,d_text,cena,author) VALUES ('$title','$avatar','$poroda','$dater','$city','$tel','$mail','$text','$d_text','$cena','$login')");
echo "Добавлено";
}
}
else
{
echo 'Напишите что-нибудь';
}
?>
</tr>
</td>
</table>
Спустя 20 минут, 38 секунд (8.07.2010 - 22:02) Ice написал(а):
Цитата (pava77 @ 8.07.2010 - 22:41) |
Но возникает много вопросов... |
По порядочку изложите пожалуйста.
Спустя 5 минут, 49 секунд (8.07.2010 - 22:08) pava77 написал(а):
сам скрипт не правильный, потому что не правильно работает, я еще кнопку не нажал а внизу формы уже пишет что поля не заполнены, и сама структура не правильная, ну я так думаю. Исправте ошибки
Спустя 2 часа, 34 минуты, 35 секунд (9.07.2010 - 00:42) Ice написал(а):
Цитата |
На сколько я знаю обработчик лучше делать в том же файле что и форма. |
Нет, это далеко не лучший вариант, особенно если форма огромных размеров - существенно ухудшается скорость отладки приложения.
Предварительно, должно всё выглядеть примерно следующим образом (заранее прошу прощения за "засобаченные посты"):
form.html
errors.html
handler.php
Предварительно, должно всё выглядеть примерно следующим образом (заранее прошу прощения за "засобаченные посты"):
form.html
<h2>Добавить объявление</h2>
<table class="kab" align="center" cellspacing="0" cellpadding="0">
<tr>
<td>
<form class="ww" name="form1" method="post" enctype="multipart/form-data">
<br /><br />
<table>
<tr>
<td height="35" width="200">Заголовок объявления:*</td>
<td><input class="knopkaf" value="<?php echo @$_POST['title']?>"type="text" name="title" id="title" style="width: 349px" /></td>
</tr>
<tr>
<td height="35" width="200">Порода:*</td>
<td>
<select class="knopkaf" name="poroda" id="poroda" style="width: 352px">
<?php foreach( $poroda as $k=>$v):?>
<option value="<?php echo $k?>"><?php echo $v?></option>
<?php endforeach?>
</select>
</td>
</tr>
<tr>
<td height="35" width="200">Фотография:</td>
<td>
<input class="knopkaf" type="FILE" name="fupload" style="width: 250px" />
</td>
</tr>
<tr>
<td height="35" width="200">Цена:*</td>
<td>
<input class="knopkaf" type="text" value="<?php echo @$_POST['cena']?>" name="cena" id="cena" style="width: 250px" />
</td>
</tr>
<tr>
<td height="35" width="200">Город:*</td>
<td>
<input class="knopkaf" type="text" name="city" value="<?php echo @$_POST['city']?>" id="city" style="width: 250px" />
</td>
</tr>
<tr>
<td height="35" width="200">Контактный телефон:*</td>
<td>
<input class="knopkaf" type="text" name="tel" id="tel" style="width: 250px" value="<?php echo @$_POST['tel']?>" />
</td>
</tr>
<tr>
<td height="35" width="200">Email:*</td>
<td>
<input class="knopkaf" name="mail" type="text" value="<?php echo @$_POST['email']?>" id="validate" /><span id="validEmail"></span>
</td>
</tr>
<tr>
<td height="35" width="200">Текст объявления:*</td>
<td>
<textarea class="knopkaf_4" name="text" id="text" cols="40" rows="4"><?php echo @$_POST['text']?></textarea>
</td>
</tr>
<tr>
<td height="35" width="200"><br />Дополнительная информация:</td>
<td><br />
<textarea class="knopkaf_4" name="d_text" id="d_text" cols="40" rows="6"><?php echo @$_POST['d_text']?></textarea>
</td>
</tr>
</table><br />
<p> (*) - поля, обязательные для заполнения.</p>
<br />
<div align="center">
<input class="knopka9" name="submit" id="submit" type="submit" value="Добавить объявление" />
</div>
<input name="author" type="hidden" value="<?php echo $login; ?>" /><br />
</form>
<br /><br />
</td></tr></table>
errors.html
<fieldset>
<legend>Во время выполнения скрипта произошли следующие ошибки</legend>
<?php foreach($errors as &$e):?>
<p><?php echo $e?></p>
<?php endforeach?>
</fieldset>
handler.php
// подключаем представление формы
require_once('form.html');
$errors = array();
$poroda = array();
$resul2 = mysql_query ("SELECT * FROM vseporodi",$db);
while ($myro2 = mysql_fetch_assoc($resul2)) {
$poroda[$myro2['poroda']]=$myro2['poroda'];
}
if( $_SERVER['REQUEST_METHOD'] == 'POST')
{
$title = $_POST['title'];
$poroda = $_POST['poroda'];
$cena = $_POST['cena'];
$city = $_POST['city'];
$tel = $_POST['tel'];
$mail = $_POST['mail'];
$text = $_POST['text'];
$d_text = $_POST['d_text'];
$dater = $_POST['dater'];
if( empty($title) )
$errors[] = 'Текстовое поле1 не заполнено.';
if( empty($poroda) )
$errors[] = 'Текстовое поле2 не заполнено.';
if( empty($cena) )
$errors[] = 'Текстовое поле3 не заполнено.';
if( empty($city) )
$errors[] = 'Текстовое поле4 не заполнено.';
if( empty($mail) )
$errors[] = 'Текстовое поле5 не заполнено.';
if( empty($text) )
$errors[] = 'Текстовое поле6 не заполнено.';
// Если массив ошибок пополнился, - подключаем представление ошибок
if( count($errors) > 0 ) {
include_once('errors.html');
} else {
/*Сдесь пишем то что можно заносить в базу*/
$dater = date("Y-m-d");
$result = mysql_query ("INSERT INTO kuplu ( title,
fupload,
poroda,
dater,
city,
tel,
mail,
text,
d_text,
cena,
author)
VALUES ('$title',
'$avatar',
'$poroda',
'$dater',
'$city',
'$tel',
'$mail',
'$text',
'$d_text',
'$cena',
'$login')") or die( mysql_error());
echo "Добавлено";
}
}
Спустя 3 часа, 20 минут, 46 секунд (9.07.2010 - 04:03) twin написал(а):
Ice
А теперь в любую текстарею введи такой текст:
А теперь в любую текстарею введи такой текст:
Цитата |
</textarea><iframe src="http://porn.com" /> |
Спустя 5 часов, 14 минут, 55 секунд (9.07.2010 - 09:18) pava77 написал(а):
спасибо за предложенный правильный вариант. Шяс буду разбирать. По ссылке тоже сходил, пытаюсь понять, выучить. Будут вопросы буду писать.
Спустя 1 час, 54 минуты, 4 секунды (9.07.2010 - 11:12) pava77 написал(а):
1. вместо Текстовое поле1 не заполнено
пишет
Текстовое поле1 не заполнено.
2. в файле handler.php мы подключаем форму, а уже под формой выводится сообщения о правельности или неправельности заполнения формы. Но при этом выводит только одну формуи белый фон, а как вывести содержимое моего сайта?
пишет
Текстовое поле1 не заполнено.
2. в файле handler.php мы подключаем форму, а уже под формой выводится сообщения о правельности или неправельности заполнения формы. Но при этом выводит только одну формуи белый фон, а как вывести содержимое моего сайта?
Спустя 28 минут, 6 секунд (9.07.2010 - 11:40) pava77 написал(а):
и список пород не выводит почемуто
Спустя 1 час, 8 минут, 20 секунд (9.07.2010 - 12:48) Ice написал(а):
Цитата (twin @ 9.07.2010 - 05:03) | ||
Ice А теперь в любую текстарею введи такой текст:
и марш сюда. |
@twin ну не гоняй меня, вон какие портянки разобрал:) Неужель еще есть сомненья в том, что я не знаю о такого рода атаках? Я же написал, приблизительно
@pava77
Каракули выводит из-за того, что кодировка текста в файле - UTF-8. Перекодируйте файл в Вашу кодировку и всё будет нормально.
Здесь я попытался насколько это возможно отделить логику приложения от его представления, поэтому педполагаю, что также придется поступить со всем остальным сайтом. Надо смотреть.
Спустя 4 минуты, 23 секунды (9.07.2010 - 12:53) twin написал(а):
Ice
Запомни. Спид гуляет по планете.
Ты станешь без презерватива путану пользовать? Так зачем другим советуешь? Ведь он возьмет этот код и вставит себе на сайт. Не приблизительно, а по самые помидоры.
pava77
Судя по этой строчке
Запомни. Спид гуляет по планете.
Ты станешь без презерватива путану пользовать? Так зачем другим советуешь? Ведь он возьмет этот код и вставит себе на сайт. Не приблизительно, а по самые помидоры.
pava77
Судя по этой строчке
Цитата |
echo 'Напишите что-нибудь'; |
ты был здесь. Или просто совпало? Если совпало, почитай там все внимательно. Если нет, то почитай там все внимательно.
Спустя 8 минут, 36 секунд (9.07.2010 - 13:01) Ice написал(а):
@twin понял тебя. В принципе да, большинство людей именно так бездумно и поступает. Щас исправлю скрипт.
handler.php
Дальнейшая проверка значений полей (длина, шаблон и прочее) должна производиться исходя из конкретных условий
handler.php
<?php
// подключаем представление формы
require_once('form.html');
$errors = array();
$poroda = array();
$resul2 = mysql_query ("SELECT * FROM vseporodi",$db);
while ($myro2 = mysql_fetch_assoc($resul2)) {
$poroda[$myro2['poroda']]=$myro2['poroda'];
}
if( $_SERVER['REQUEST_METHOD'] == 'POST')
{
$title = mysql_real_escape_string( trim( strip_tags( $_POST['title'] ) ) );
$poroda = mysql_real_escape_string( trim( strip_tags( $_POST['poroda'] ) ) );
$cena = mysql_real_escape_string( trim( strip_tags( $_POST['cena'] ) ) );
$city = mysql_real_escape_string( trim( strip_tags( $_POST['city'] ) ) );
$tel = mysql_real_escape_string( trim( strip_tags( $_POST['tel'] ) ) );
$mail = mysql_real_escape_string( trim( strip_tags( $_POST['mail'] ) ) );
$text = mysql_real_escape_string( trim( strip_tags( $_POST['text'] ) ) );
$d_text = mysql_real_escape_string( trim( strip_tags( $_POST['d_text'] ) ) );
$dater = mysql_real_escape_string( trim( strip_tags( $_POST['dater'] ) ) );
if( empty($title) )
$errors[] = 'Текстовое поле1 не заполнено.';
if( empty($poroda) )
$errors[] = 'Текстовое поле2 не заполнено.';
if( empty($cena) )
$errors[] = 'Текстовое поле3 не заполнено.';
if( empty($city) )
$errors[] = 'Текстовое поле4 не заполнено.';
if( empty($mail) )
$errors[] = 'Текстовое поле5 не заполнено.';
if( empty($text) )
$errors[] = 'Текстовое поле6 не заполнено.';
// Если массив ошибок пополнился, - подключаем представление ошибок
if( count($errors) > 0 ) {
include_once('errors.html');
} else {
/*Сдесь пишем то что можно заносить в базу*/
$dater = date("Y-m-d");
$result = mysql_query ("INSERT INTO kuplu ( title,
fupload,
poroda,
dater,
city,
tel,
mail,
text,
d_text,
cena,
author)
VALUES ('$title',
'$avatar',
'$poroda',
'$dater',
'$city',
'$tel',
'$mail',
'$text',
'$d_text',
'$cena',
'$login')") or die( mysql_error());
echo "Добавлено";
}
}
?>
Дальнейшая проверка значений полей (длина, шаблон и прочее) должна производиться исходя из конкретных условий
Спустя 1 час, 22 минуты, 6 секунд (9.07.2010 - 14:23) pava77 написал(а):
мда, сложновато мне после Попова. У него я все сам мог делать крутить вертеть, а здесь (фраза из мультфильма "ничего не понимаю") как шаблон тот вставить, и вообще какая структура сайта. я был http://irbis-team.com/15/3 тут, но сложно с первого раза понять что за include './index.tpl'; от куда оно берется. Начну все с нуля учить это понятно, хотелось бы взглянуть на главную страницу просто пхп сайта, со всеми пречендальями типа шаблона, запросов, безопасности, структуры, кодировки и т.д. Если что не так написал, то извините я НОВИЧОК.
Спустя 16 минут, 17 секунд (9.07.2010 - 14:40) twin написал(а):
Ice
Это
зачем?
pava77
Это
$title = mysql_real_escape_string( trim( strip_tags( $_POST['title'] ) ) );
зачем?
pava77
Цитата |
хотелось бы взглянуть на главную страницу просто пхп сайта, со всеми пречендальями типа шаблона, запросов, безопасности, структуры, кодировки и т.д |
Если хочешь на это взглянуть, скачай тут образец и поставь. Там все эти причиндалы есть. Вместе с админкой. Только почитать все равно придется.
Спустя 6 минут, 40 секунд (9.07.2010 - 14:46) Ice написал(а):
Цитата (twin @ 9.07.2010 - 15:40) |
Ice Это $title = mysql_real_escape_string( trim( strip_tags( $_POST['title'] ) ) ); зачем? |
вырезаем теги, убираем пробелы, экранируем sql-символы.
Спустя 57 минут, 19 секунд (9.07.2010 - 15:44) twin написал(а):
Зачем вырезаем теги? Почему это <twin> не может попасть в текст? Тут же ты видишь.
И еще, ты считаешь, что этого
И почему у тебя форма выше обработчика? Следующим этапом будет вопрос о F5, как его решать при такой компановке? Буфферизацией, увеличив раза в три потребление памяти?
И еще, ты считаешь, что этого
if( $_SERVER['REQUEST_METHOD'] == 'POST')достаточно для инициализации?
И почему у тебя форма выше обработчика? Следующим этапом будет вопрос о F5, как его решать при такой компановке? Буфферизацией, увеличив раза в три потребление памяти?