Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Форма и обработчик

Сообщения:  [1-10]   [11-14] 

 
 автор: serjinio   (18.09.2008 в 08:41)   письмо автору
 
   для: sim5   (17.09.2008 в 14:02)
 

Вы совершено правы ,просто это был кусок кода проверки из первых экспериментов,где некоторые поля не проверялись регулярками.... сделал еще два варианта один по Вашему рецепту другой подгрузкой формы с обработчиком по ссылке...все прекрасно работает...сейчас подчищу код и буду тестировать все варианты...какой понравится такой и оставлю..Спасибо за помощь ..Наконец-то полностью разобрался в данном вопросе....остальное нюансы :)

  Ответить  
 
 автор: sim5   (17.09.2008 в 14:02)   письмо автору
 
   для: serjinio   (17.09.2008 в 13:50)
 

Это вы проверяете собственно говоря лишнее, так как в случае запрещенных символов (а вы все ли хотите иметь в имени?), вместо одного, может быть троица :)
Я вам уже писал (это как раз для защиты вашей задницы, как вы выразились, и для того, чтобы иметь возможность вернуть данные уже введенные пользователем, а также по умолчанию):
<?
$author 
= isset($_POST['author']) ? substr(trim($_POST['author'])), 021) : "";

И вы не получите предупрежедений в случае, если не было еще отпарвки формы, и заметьте без всяких "собак".
Я вам два способа описал, как можно сделать, вы не хотите. Так как вы делаете, я бы не за что не стал, и обошелся бы без применения всплывающеих окошек и JS.

  Ответить  
 
 автор: serjinio   (17.09.2008 в 13:50)   письмо автору
 
   для: sim5   (17.09.2008 в 07:33)
 

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

Обработчик
<?php 
error_reporting
(E_ALL & ~E_NOTICE); 

$author=substr(htmlspecialchars(trim($_POST['author'])), 021); 
$email=substr(htmlspecialchars(trim($_POST['email'])), 030);

// Проверяем поле ---> author ///
if (empty($author)){$err.='ОШИБКА! Вы не ввели своё имя!';}
if(
preg_match('|[^a-zA-Z_А-Яа-я0-9-]+|is',$author)) {$err.='<p>ОШИБКА! В имени  недопустимый символ или пробелы!<br>
Запрещен html код!</p>'
;}
if(
strlen($author) < 2){$err.='<p>ОШИБКА! Слишком короткое имя!</p>';}
// Проверяем поле ---> email ////
if (empty($email)){$err.='<p>ОШИБКА! Вы не ввели e-mail!</p>';}
.........................................................................................


if (isset(
$err)) {echo '<div><font color=red>'.$err.'</font></div>' ;}


if ((
$_SERVER['REQUEST_METHOD']=='POST') && (count($_POST)>0) && (!isset($err)))  
{
// Запрос к базе данных на добавление сообщения
$res mysql_query ("INSERT INTO `comments`..................................., NOW())  "$db);
if (
$res == 'true'){

echo
'<div class="ok">Ваш комментарий успешно добавлен !</div>';
// можем отправить письмо админу..............Можно еще чего надо..........
// очищаем форму и выводим с базы добавленный коммент....
echo"<html><head><meta http-equiv='Refresh' content='3; URL = $_SERVER[PHP_SELF] '> </head> </html> ";
}
//...........Можно еще чего надо..........
}


Форма

<?php
echo '<h3 id="с">Оставьте комментарий</h3>';

if ((
$_SERVER['REQUEST_METHOD']=='POST')&& (count($_POST)>0))  
{
include (
'обработчик.php');// если что-то введено и нажата капа...подгружаем обработчик.....
}
?>

<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post"  >
<input name="author" type="text"  value="<?php echo $author ;?>" size="45" maxlength="21">
--------------------------
<input name="submit"  value="Отправить" type="submit">
</form>


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

  Ответить  
 
 автор: sim5   (17.09.2008 в 07:33)   письмо автору
 
   для: serjinio   (17.09.2008 в 03:01)
 

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

  Ответить  
 
 автор: serjinio   (17.09.2008 в 03:01)   письмо автору
 
   для: sim5   (16.09.2008 в 15:49)
 

Да поставить ссылку на скрипт комментариев в котором совместить форму и обработчик самый оптимальный вариант, но захотелось сделать по принципу блоговых комментариев где форма встроена в посты..
а чем плохо передавать переменные сессией ..чем это грозит или в чем неудобство?

  Ответить  
 
 автор: sim5   (16.09.2008 в 15:49)   письмо автору
 
   для: serjinio   (16.09.2008 в 15:35)
 

И какую вы тут ошибку на свою задницу ожидаете, если не секрет? А недопустимые символы в логине надо запрещать, а не "прикрывать" их html-эквивалентами. И вообще, использование сесии для того чтобы запомнить сообщение, это не ахти выход. Что вам вам мешает обработку сообщения делать в одном скрипте, производить запись, и переходить на другой скрипт, основной?

  Ответить  
 
 автор: serjinio   (16.09.2008 в 15:35)   письмо автору
 
   для: sim5   (16.09.2008 в 11:41)
 

Задницу прикрыть ..в случае какой-то ошибки чтобы никто не видел....

  Ответить  
 
 автор: sim5   (16.09.2008 в 11:41)   письмо автору
 
   для: serjinio   (16.09.2008 в 11:14)
 

Нужно проверять на допустимые вами символы. А вообще... Вот что это такое:
@$email=$_SESSION['e_mail']=... К чему тут собака?

  Ответить  
 
 автор: serjinio   (16.09.2008 в 11:14)   письмо автору
 
   для: Trianon   (15.09.2008 в 13:10)
 

Промучился с генерацией формы все получилось ,но слишком много кода ,плюнул на это и сделал сессией...вот приблизительная схема рабочая...
Форма
<?php 
session_start
();
?>
<form action="ccc.php" method="post" name="coments" >
<input name="author" type="text"  value="<?php echo $_SESSION['username'] ; ?>" size="45" maxlength="21">
--------------------------
<input name="submit"  value="Отправить" type="submit">
</form>


Обработчик
<?php session_start();
include (
"config.php");//сonnect BD

@$author=$_SESSION['username']=substr(htmlspecialchars(trim($_POST['author'])), 021); 
@
$email=$_SESSION['e_mail']=substr(htmlspecialchars(trim($_POST['email'])), 030);
---------------------------------------
// Проверяем поле ---> author ///
if (empty($author))output_err(0);
if(
preg_match('|[^a-zA-Z_А-Яа-я0-9-]+|is',$author)) output_err(1);
if(
strlen($author) < 2)output_err(2);
------------------------------------------------
function 
output_err($num)
{
$err[0] = 'ОШИБКА! Вы не ввели своё имя!';
$err[1] = 'ОШИБКА! В имени  недопустимый символ!';
$err[2] = 'ОШИБКА! Слишком короткое имя!';
$err[3] = 'ОШИБКА! Вы не ввели e-mail!';
------------------------------------------------------
$err[7] = 'ОШИБКА! В сообщении недопустимые символы!';
echo 
'<p>'.$err[$num].'</p>';
exit (
"<p>Вы ввели не всю информацию,заполните корректно все поля!</p>
<html><head><meta http-equiv='Refresh' content='3; URL=xxxx.php'></head></html>"
);

if ((
$_SERVER['REQUEST_METHOD']=='POST')&& (count($_POST)>0))  
{
// тут проверяем есть ли такой пользователь в БД.....
// если есть.... и майл и имя совпадают то....
$res mysql_query ("INSERT INTO................",$db);

if (
$res == 'true'){

session_destroy(); // разрушаем сессию
echo'<br>Ваш комментарий успешно добавлен!';
// можем отправить письмо админу..если надо.............
echo"<html><head><meta http-equiv='Refresh' content='3; URL=xxxx.php'></head></html>";
}
//если не совпадают....то.....{}///
}


вопрос такого плана надо ли обрабатывать поле value
типа
 value="<?=htmlspecialchars($_SESSION['username']) ?>

  Ответить  
 
 автор: sim5   (16.09.2008 в 07:06)   письмо автору
 
   для: serjinio   (15.09.2008 в 12:09)
 

Допустим, у вас скрипт А выводит сообщения и форму добавления сообщения. Хотя, на мой взгляд, нужно не выводить форму, а делать ссылку на открытие этой формы. Вот эта ссылка как раз и ведет на скрипт В, который выводит форму, принимает ее данные и обрабатывает. Если данные введены с ошибками, возвращаем форму, если верно, записываем их в базу и делаем перенаправление на скрипт А. Собственно так выглядит данный форум.

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования