Ввод данных

S@fer

Новичок
Ввод данных

Добрый день
Пишу обработку ввода данных. Хочу узнать насколько она эффективна?
PHP:
<?$err='';
if (isset($_GET['DetailNum']))
{
   $bbb = htmlspecialchars($_GET['DetailNum']);
   @$bbb=preg_replace('|\-|Uis','', $bbb);
   @$bbb=preg_replace('|\s|Uis','', $bbb);
   if(!preg_match("/^[a-zA-Z0-9]+$/",$bbb))
   {
      $err = "Номер детали может состоять только из букв английского алфавита, цифр и знака \"-\"";
   }
   echo "Результаты поиска детали ".$bbb.":";
}?>
<form method="GET">
  <table>
    <tr>
      <td>
        <input type="text" name="DetailNum" maxlength="15" size="22">
      </td>
      <td>
        <input type="submit" value="Найти">
      </td>
    </tr>
  </table>
</form>
<?if (!@$bbb) $err"Введите номер запчасти";
if (!$err)
{
  //обработка заказа
}
else
{
echo $err;
}?>
Жду критики.
 

Духовность™

Продвинутый новичок
http://phpclub.ru/talk/showthread.php?s=&threadid=43521&rand=0

там метод пост, но не суть важно

-~{}~ 22.01.09 10:18:

собаку - @ - использовать не надо (нельзя - это плохой, дурной тон). она только для отладки может использоваться и в крайне редких случаях. для проверки переменных на существование используются ф-ии isset и empty
 

S@fer

Новичок
спасибо за ссылку. Да @ забыл удалить после отладки.
 

DiMA

php.spb.ru
Команда форума
все не так

1. htmlspecialchars можно юзать только в момент вывода на экран или в инпут поля

2. 3 рега сокращаются до одного. +Еще strlen для сухого остатка (код запчасти от 4 до 20 символов).

3. В базах всегда нужно хранить по 2 кода - оригинальный (с пробелами, минусами и подчеркиваниями) и урезанный (как у тебя).
 

Фанат

oncle terrible
Команда форума
что за бред - использовать @ для отладки? что вы оба несете?
и при чем здесь эта ссылка?

S@fer, что ты называешь словом "эффективна". конкретно что тебя интересует?
 

Фанат

oncle terrible
Команда форума
если номер детали может состоять только из букв английского алфавита, цифр и знака -, то проблем с безопасностью не должно быть.
 

Фанат

oncle terrible
Команда форума
другое дело, что логика в скрипте отсутствует.
нормальная, человеческая, что за чем.
Какой смысл в надписи
Результаты поиска детали
Введите номер запчасти
нафига тут вообще переменная $err - загадка.
 

S@fer

Новичок
Сделал вот так
PHP:
<?$err='';
if (isset($_GET['DetailNum']))
 {
	foreach ($_GET as $key => $bbb)
     {
    	$bbb=trim($bbb);
        if (get_magic_quotes_gpc()) $bbb = stripslashes($bbb);
        $bbb = htmlspecialchars($bbb,ENT_QUOTES);
        $_GET[$key]=$bbb;
        $bbb=str_replace("\r","",$bbb);
        $bbb=preg_replace('|\-|Uis','', $bbb);
        $bbb=preg_replace('|\s|Uis','', $bbb);
	 }
  	if(!preg_match("/^[a-zA-Z0-9]+$/",$bbb))
     {
    	$err = "Номер детали может состоять только из букв английского алфавита, цифр и знака \"-\"";
     }
  	if (!$err) echo "Результаты поиска детали ".$bbb.":";
 }?>
<form method="GET">
<input type="text" name="DetailNum" maxlength="15" size="22">&nbsp;
<input type="submit" value="Найти">
</form>
<?if (!@$bbb) $err="Введите номер запчасти";
if (!$err)
{
	echo "Введенные данные верны";
	//обработка данных
}
else
 {
 echo $err;
 }?>
нафига тут вообще переменная $err - загадка.
$err использую как обработчик ошибок
 

Фанат

oncle terrible
Команда форума
ошибка только одна, нафига ей какой-то "обработчик" - обратно загадка.

зачем в двух местах одна и та же проверка if (!$err) - непонятно.

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

ох. я сразу и не заметил. ЦИКЛ мы тоже к себе в скрипт затащили. по ссылке есть цикл - и у нас тоже будет. и плевать, что у нас параметр ЕДИНСТВЕННЫЙ.
я не знаю, кто из вас больший дурак - триумвират, который ссылку давал, или ты, который ее читал.

-~{}~ 22.01.09 14:03:

что тебе надо? ввести запчасть, обработать, проверить и выдать результаты.
вот это и надо делать. и больше ничего.
PHP:
Введите номер запчасти: 
<form method="GET">
<input type="text" name="DetailNum" maxlength="15" size="22">&nbsp;
<input type="submit" value="Найти">
</form>
<?
if (isset($_GET['DetailNum'])) {
  $bbb=$_GET['DetailNum']
  $bbb=trim($bbb);
  $bbb=str_replace("-","",$bbb);
  if(!preg_match("/^[a-zA-Z0-9]+$/",$bbb)) {
    echo "Номер детали может состоять только из букв английского алфавита, цифр и знака \"-\"";
  } else {
    echo "Результаты поиска детали ".$bbb.":";
    //обработка данных
  }
}
?>
 

x-yuri

Новичок
и определись, нужен тебе '-' или нет. Если нужен, то
PHP:
# $bbb=str_replace("-","",$bbb); 
  if(!preg_match("/^[a-zA-Z0-9-]+$/",$bbb)) { 
    echo "Номер детали может состоять только из букв английского алфавита, цифр и знака '-'";
 

S@fer

Новичок
и определись, нужен тебе '-' или нет.
при вводе '-' использовать можно, но в базе номер пишется без тире.

Сделал вот так
PHP:
Введите номер запчасти:<br>
<form method="GET">
  <input type="text" name="DetailNum" maxlength="15" size="22">
  <input type="submit" value="Найти">
</form>
<?if (isset($_GET['DetailNum']))
    {
      $bbb=$_GET['DetailNum'];
      $bbb=trim($bbb);
      $bbb=str_replace("-","",$bbb);
      if (!$bbb)
      {
        echo "Вы ничего не ввели";
       }
       else
       {
         if(!preg_match("/^[a-zA-Z0-9]+$/",$bbb))
         {
        	echo "Номер детали может состоять только из букв английского алфавита, цифр и знака \"-\"";
          }
         else
         {
    	echo "Результаты поиска детали $bbb:";
            //обработка данных
          }
        }
     }?>
 

Фанат

oncle terrible
Команда форума
echo "Вы ничего не ввели"; - лишнее
впрочем ладно. все равно тебе что тот код, что этот - смысла в нем ты видишь одинаково
 

x-yuri

Новичок
S@fer давай будем честны по отношению к пользователю:
PHP:
echo "Вы ничего не ввели... ну разве что - ))))";
ну и я б тебе посоветовал результаты поиска отделить от проверки ввода, а не пихать все в один if
 
Сверху