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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Проверка введённых данных
 
 автор: Oligarx   (24.04.2005 в 09:37)   письмо автору
 
 


<?

$error     
"";
$action    $_POST['action'];
if(!empty(
$action))
 {
  
$nik     trim($nik);
  
$msg     trim($msg);
   if(empty(
$msg))
    {
     
$action "";
     
$error  $error."<LI>Вы не ввели сообщение\n";
    }
   if(empty(
$nik))
    {
     
$action "";
     
$error  $error."<LI>Вы не ввели имя\n";
    }
   if(!empty(
$email))
    {
     if(!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$email))
      {
       
$action "";
       
$error  $error."<LI>Неверно введён email.&nbsр Введите e-mail
          в виде <i>softtime@softtime.ru</i> \n"
;";
      }
    }
   
$nik   = substr($HTTP_POST_VARS["nik"],0,32);
   
$nik   = htmlspecialchars(stripslashes($nik)); // обрабатываем имя
   
$email = substr($HTTP_POST_VARS["email"],0,32);
   
$email = htmlspecialchars(stripslashes($email)); // обрабатываем e-mail
   
$url   = substr($HTTP_POST_VARS["url"],0,36);
   
$url   = htmlspecialchars(stripslashes($url)); // обрабатываем url-адрес
   
$msg   = substr($HTTP_POST_VARS["msg"],0,1024);
   
$msg   = htmlspecialchars(stripslashes($msg)); // обрабатываем сообщение

   if (empty(
$error)) // если ошибок нет, обрабатываем сообщение
  {
    
$msg = nl2br($msg);
    
$msg = str_replace("[u]","<u>",$msg);
    
$msg = str_replace("[U]","<u>",$msg);
    
$msg = str_replace("[i]","<i>",$msg);
    
$msg = str_replace("[I]","<i>",$msg);
    
$msg = str_replace("[b]","<B>",$msg);
    
$msg = str_replace("[B]","<B>",$msg);
    
$msg = str_replace("[sub]","<SUB>",$msg);
    
$msg = str_replace("[SUB]","<SUB>",$msg);
    
$msg = str_replace("[sup]","<SUP>",$msg);
    
$msg = str_replace("[SUP]","<SUP>",$msg);
    
$msg = str_replace("[/u]","</u>",$msg);
    
$msg = str_replace("[/U]","</u>",$msg);
    
$msg = str_replace("[/i]","</i>",$msg);
    
$msg = str_replace("[/I]","</i>",$msg);
    
$msg = str_replace("[/b]","</B>",$msg);
    
$msg = str_replace("[/B]","</B>",$msg);
    
$msg = str_replace("[/SUB]","</SUB>",$msg);
    
$msg = str_replace("[/sub]","</SUB>",$msg);
    
$msg = str_replace("[/SUP]","</SUP>",$msg);
    
$msg = str_replace("[/sup]","</SUP>",$msg);
    
$msg = eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a
                       href
=\\2>\\2</a>\\3",$msg);
    
$msg = str_replace("\n"," ",$msg);
    
$msg = str_replace("\r"," ",$msg);

    echo "
nik.$nik";
    echo "
email.$email";
    echo "
url.$url";
    echo "
msg.$msg";

 }
>


Вначале ругается на 34 строчке! Если я убираю кавычки из квадратных скобочек, то находит ещё ошибки. А вообще, надо ставить кавычки в квадр. скобках или нет?

   
 
 автор: Sin   (24.04.2005 в 09:57)   письмо автору
 
   для: Oligarx   (24.04.2005 в 09:37)
 

Ошибка в строке
<?php
$error  
$error."<LI>Неверно введён email.&nbsр Введите e-mail 
          в виде <i>softtime@softtime.ru</i> \n"
;"; 
?>

В конце лишняя ковычка и точка с запетой
надо так
<?php
$error  
$error."<LI>Неверно введён email.&nbsр Введите e-mail 
          в виде <i>softtime@softtime.ru</i> \n"

?>

   
 
 автор: Oligarx   (24.04.2005 в 11:47)   письмо автору
 
   для: Sin   (24.04.2005 в 09:57)
 

Всё исправил, теперь выдаёт слудующее
Notice: Undefined index: action in z:\home\localhost\www\proect\qwerty.php on line 4

   
 
 автор: Loki   (24.04.2005 в 13:15)   письмо автору
 
   для: Oligarx   (24.04.2005 в 11:47)
 

Это пердупреждение что переменная action не определена.

   
 
 автор: Oligarx   (24.04.2005 в 13:40)   письмо автору
 
   для: Loki   (24.04.2005 в 13:15)
 

Чё-то я не понял, как понять не определена? Объясните пожалуйста.

   
 
 автор: cheops   (24.04.2005 в 13:41)   письмо автору
 
   для: Oligarx   (24.04.2005 в 11:47)
 

Это лишь замечание из-за высокой тревожности интерпретатора, которая выставлена по умолчанию. На хостингах обычно стоит меньший уровень, рекомендуется также выставить его меньшим при помощи функции
<?php
  Error_Reporting
(E_ALL & ~E_NOTICE); 
?>

или глобально в конфигурационном файле php.ini, исправив директиву error_reporting
error_reporting = E_ALL & ~E_NOTICE


http://www.softtime.ru/info/articlephp.php?id_article=23

   
 
 автор: Oligarx   (24.04.2005 в 16:21)   письмо автору
 
   для: cheops   (24.04.2005 в 13:41)
 

В общем вроде всё замечательно, но вот только теперь у меня текст в базу не добавляется! Если без проверки вводимых данных, то всё работает, а так нет!
Незнаю в чём дело!

<?
Error_Reporting
(E_ALL & ~E_NOTICE);
$error     "";
$action    $_POST['action'];
if(!empty(
$action))
 {
  
$nik     trim($nik);
  
$msg     trim($msg);
   if(empty(
$msg))
    {
     
$action "";
     
$error  $error."<LI>Вы не ввели сообщение\n";
    }
   if(empty(
$nik))
    {
     
$action "";
     
$error  $error."<LI>Вы не ввели имя\n";
    }
   if(!empty(
$email))
    {
     if(!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$email))
      {
       
$action "";
       
$error  $error."<LI>Неверно введён email. Введите e-mail
          в виде <i>zlt-nnov@yandex.ru</i> \n"
;
      }
    }
   
$nik   substr($HTTP_POST_VARS["nik"],0,32);
   
$nik   htmlspecialchars(stripslashes($nik)); // обрабатываем имя
   
$email substr($HTTP_POST_VARS["email"],0,32);
   
$email htmlspecialchars(stripslashes($email)); // обрабатываем e-mail
   
$url   substr($HTTP_POST_VARS["url"],0,36);
   
$url   htmlspecialchars(stripslashes($url)); // обрабатываем url-адрес
   
$msg   substr($HTTP_POST_VARS["msg"],0,1024);
   
$msg   htmlspecialchars(stripslashes($msg)); // обрабатываем сообщение

   
if (empty($error)) // если ошибок нет, обрабатываем сообщение
  
{
    
$msg nl2br($msg);
    
$msg str_replace("[u]","<u>",$msg);
    
$msg str_replace("[U]","<u>",$msg);
    
$msg str_replace("","<i>",$msg);
    
$msg str_replace("[I]","<i>",$msg);
    
$msg str_replace("","<B>",$msg);
    
$msg str_replace("[B]","<B>",$msg);
    
$msg str_replace("","<SUB>",$msg);
    
$msg str_replace("[SUB]","<SUB>",$msg);
    
$msg str_replace("","<SUP>",$msg);
    
$msg str_replace("[SUP]","<SUP>",$msg);
    
$msg str_replace("[/u]","</u>",$msg);
    
$msg str_replace("[/U]","</u>",$msg);
    
$msg str_replace("
"
,"</i>",$msg);
    
$msg str_replace("[/I]","</i>",$msg);
    
$msg str_replace("
","</B>",$msg);
    
$msg str_replace("[/B]","</B>",$msg);
    
$msg str_replace("","</SUB>",$msg);
    
$msg str_replace("[/sub]","</SUB>",$msg);
    
$msg str_replace("","</SUP>",$msg);
    
$msg str_replace("[/sup]","</SUP>",$msg);
    
$msg eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a href=\\2>\\2</a>\\3",$msg);
    
$msg str_replace("\n"," ",$msg);
    
$msg str_replace("\r"," ",$msg);
 
 print 
"<HTML><HEAD>\n";
 print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=qwerty.php'>\n";
 print 
"</HEAD></HTML>\n";
 }
}
 if(empty(
$action))
  {
   
?>
    <HTML>
    <HEAD>
    <TITLE>Гостевая книга - добавление записи</TITLE>
    </HEAD&tg;
    <BODY>
    <H3>
      <? print "<center>"?> 
      <font color=#1E90FF>Добавление записи</font>
    </H3>
    <?
    
if (!empty($error))
    
/* если есть ошибки, выводим сообщение об ошибках */
    
{
      print 
"<P><font color=green>Во время добавления записи произошли 
      следующие ошибки:</font></P>\n"
;
      print 
"<UL>\n";
      print 
$error;
      print 
"</UL>\n";
    } else {

//Если всё ОК, то записываем и выводи все сообщения
$dbname    'guestbook';
$host      'localhost';
$user      'root';
$pass      '';
$tbname    'gb';
$link      mysql_connect($host,$user,$pass);

$query="INSERT into gb values('0','$nik','$email','$msg')";
mysql_connect($host,$user,$pass);
if (!@
mysql_select_db($dbname,$link) )
  {
    echo 
"<p>К сожалению, не доступна база данных</p>";
    exit();
  }
if (
mysql_db_query($dbname,$query,$link)) 

$query  =  "SELECT * FROM $tbname";
$result mysql_db_query ($dbname,$query,$link);
if(!
$result) exit(mysql_error());

print (
"<table border=1 width=\"75%\" cellspacing=2 cellspadding=2 align=center>\n");
print (
"<tr align=center valign=top>\n");
print (
"<td align=center valign=top>nik</td>\n");
print (
"<td align=center valign=top>email</td>\n");
print (
"<td align=center valign=top>msg</td>\n");
print (
"</tr>\n");
while (
$row=mysql_fetch_array ($result)) 
{
print (
"<tr align=center valign=top>\n");
print (
"<td align=center valign=top>$row[nik]</td>\n");
print (
"<td align=center valign=top>$row[email]</td>\n");
print (
"<td align=center valign=top>$row[msg]</td>");
print (
"</tr>\n"); 
}
print (
"</table>\n");           }
    
?>
    <!-- пишем HTML-код формы добавления сообщений !-->
    <center>
     <table width=1 border=0>
     <form action=qwerty.php method=post>
     <input type=hidden name=action value=post>
    <tr>
     <td width=50%>Имя:<font color=red><sup>*</sup><font></td>
     <td align=right>
       <input type=text name=nik maxlength=32 value='<? echo $name?>'>
     </td>
    </tr>
    <tr>
      <td width=50%>E-Mail:</td>
      <td align=right>
        <input type=text name=email maxlength=32 value='<? echo $email?>'>
      </td>
    </tr>
    <tr>
      <td width=50%>URL:</td>
      <td align=right>
        <input type=text name=url maxlength=36 value='<? echo $url?>'>
      </td>
    </tr>
    <tr>
      <td colspan=2>Сообщение:<font color=red<sup>*</sup></font><br>
        <textarea cols=50 rows=8 name=msg></textarea>
      </td>
    </tr>
    <tr>
      <td colspan=2><input type=submit value='Добавить'></td>
    </tr>
  </form>
  <tr>
    <td colspan=2><font color=red><sup>*</sup></font> - поля,
      обязательные для заполнения
    </td><td align=left>
  </table>
  </center>
  </BODY>
  </HTML>
  <?
   
}
  
?>

   
 
 автор: glsv (Дизайнер)   (24.04.2005 в 20:57)   письмо автору
 
   для: Oligarx   (24.04.2005 в 16:21)
 

Если не добавляется, значит где ошибка в запросе, либо совсем до кода добавления не доходит. Модифицируйте блок добавления в базу. Что выведет?

if (!mysql_db_query($dbname,$query,$link))
{
   echo "Ошибка выполнения запроса: ".$query;
   echo mysql_error();
}

Кстати, про функцию mysql_db_query в мануале говорится следующее:

Замечание: Функция устарела с выходом PHP 4.0.6. Не используйте её. Используйте комбинацию из mysql_select_db() м mysql_query().

   
 
 автор: Oligarx   (24.04.2005 в 22:19)   письмо автору
3.1 Кб
 
   для: glsv (Дизайнер)   (24.04.2005 в 20:57)
 


if (!mysql_db_query($dbname,$query,$link))
{
   echo "Ошибка выполнения запроса: ".$query;
   echo mysql_error();



Испробывал! Не ругается, значит всё нормально!
Но всё равно не работает!
Главное, что видно что что-то в базу добавляется и мне кажется что пустые поля (но почему???), и самое интересное (как я уже говорил, без проверки данных всё работает замечательно!!!), ну что ещё можете посоветовать?!
Лучше я всё прикреплю, а вы посмотрите?!

   
 
 автор: ZC   (24.04.2005 в 22:32)   письмо автору
 
   для: Oligarx   (24.04.2005 в 22:19)
 

Как я понимаю у Вас гостевая книга похожа на ту которая есть в downloads.
Ну так вот посмотрите вот эту.
http://softtime.ru/info/gbzc.php
Там что-то похожее на Вашу но всё работает.

   
 
 автор: cheops   (24.04.2005 в 22:53)   письмо автору
 
   для: Oligarx   (24.04.2005 в 16:21)
 

Помещать информацию в базу данных следует вот до этих строк
<?php
print "<HTML><HEAD>\n"
print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=qwerty.php'>\n"
print 
"</HEAD></HTML>\n";
?>

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

   
 
 автор: Oligarx   (25.04.2005 в 22:04)   письмо автору
 
   для: cheops   (24.04.2005 в 22:53)
 

Спасибо всем огромное, всё замечательно, особенно cheops . У меня ещё вопросик :”Как сделать так, чтобы после добавления записи в базу, если пользователь нажимает обновить, то чтоб ещё раз не выполнялась запись?”. (надеюсь понятно объяснил :)

   
 
 автор: cheops   (26.04.2005 в 12:34)   письмо автору
 
   для: Oligarx   (25.04.2005 в 22:04)
 

Для этого предназначена проверка
<?php
if(!empty($action))
{
  
// Код добавления в базу данных
}
?>

который проверяет передано ли из формы скрыторе поле
<input type=hidden name=action value=post>

Чтобы POST-данные обнулились, после добавления их в базу данных осуществляется редирект
<?php
print "<HTML><HEAD>\n"
print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=qwerty.php'>\n"
print 
"</HEAD></HTML>\n";
?>

Который и осуществляет сброс POST-данных.

   
 
 автор: Oligarx   (26.04.2005 в 15:44)   письмо автору
 
   для: cheops   (26.04.2005 в 12:34)
 


<input type=hidden name=action value=post>

Я не очень понял, как использовать скрытое поле (если можно, объясните поподробней).

Да, и я применил то, что вы написали и всё работает нормально (но только в Exploer, а в Mozile к примеру при нажатии на "Обновить", всё равно добавляется запись, наверное потому что страница кешируется?! Так вот, как можно сделать чтобы и в Мазиле всё было тип-топ :),

<?php
print "<HTML><HEAD>\n";
print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=qwerty.php'>\n";
print 
"</HEAD></HTML>\n";
?> 

   
 
 автор: cheops   (26.04.2005 в 22:32)   письмо автору
 
   для: Oligarx   (26.04.2005 в 15:44)
 

Скрытое поле говорит о том, что пользователь нажал кнопку в форме и если оно присутствует в суперглобальном массиве $_POST значит это событие произошло. Тогда включается в дело обработичик, размещённый на этой же странице
<?php
  
if(isset($_POST['action']))
  {
     
// Код обработичка HTML-формы
  
}
?>

Если бы такой проверки не стояло, то код обработчика срабатывал бы каждый раз при загрузке страницы, не зависимо от того осуществляем мы перезагрузку страницы или нет (т.е. при первой бы загрузке добавлялась пустая запись). Можно обойтись без скрытых полей, когда HTML-форма и её обработчик разнесены по разным файлам (имя обработчика указывается в атрибует action HTML-формы).

У меня к сожалению нет под рукой Mozile :((( что-бы поэкспериметировать.

   
Rambler's Top100
вверх

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