Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > обработка форм


Автор: p0zt3r 6.1.2009, 01:41
Вот код.

Он должен работать так. Пользователь открывает страницу,  унего появляется форма с вводом данных. Он ввёл данные, нажал Сабмит,  унего всё отправилось. Если есть ошибки возвращается страница с формой йи описанием ошибки. Если нет, происходит дальше подключение к mysql и исполнения запросов из файла install.sql.

Код

<?php

function ShowRegisterForm ()
{
print <<< HTML_END
<form action="install.php" method="post">
<table>
<tr><td>
Site home (f.e. www.site.com): </td><td><input type="text" name="site"></td>
<tr><td>
Site description (f.e. The New Company official): </td><td><input type="text" name="desc"></td>
<tr><td>
Your e-mail (f.e. admin@site.com): </td><td><input type="text" name="mail"></td>
<tr><td>
Password for superuser (min 8 symbols, will be shown): </td><td><input type="text" name="p" ></td>
<tr><td>
Superuser''s name for DB (min 8 symbols, will be shown): </td><td><input type="text" name="udb" ></td>
<tr><td>
Password for DB superuser (min 8 symbols, will be shown): </td><td><input type="text" name="pdb" ></td>
<tr><td>
<input type="hidden" name="op" value="1">
<input type="submit" value="Îòïðàâèòü!">
</table>
</form>
HTML_END;
}

if (!empty($_POST))
{
    switch ($_POST['op'])
    {
        case '1':
     if (($_POST['site']) && ($_POST['desc']) && ($_POST['mail']) && ($_POST['p']) && ($_POST['udb']) && ($_POST['pdb']))
      {
        if (!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['mail']))
        {
         print ('<h1>Íåïðàâèëüíûé e-mail!</h1><br><br>');
          ShowRegisterForm();
          break;
        }
        if (strlen($_POST['p'])<8)
        {
         print ('<h1>Ïàðîëü ìåíüøå 8 ñèìâîëîâ!</h1><br><br>');
          ShowRegisterForm();
          break;
        }

        # Èíñòàëëèðóåì CSV

        $fname = "./sql/install.sql";

        $f = fopen ($fname, "r");

        if (!$f)
        {
         die ("<h1>Êðèòè÷åñêàÿ îøèáêà! Íåóäàëîñü îòêðûòü ôàéë $fname</h1><br><br>");
        }

        $s = 0;

        mysql_connect("localhost",$udb,$pdb);

        while (!feof($f))
        {
         $str = fgets($f);
          $s++;
          if(!mysql_query($str))
          {
            die ("<h1>Îøèáêà ïðè ðàáîòå ñ ÁÄ ïðè îáðàùåíèè ê ñòðîêå $s ôàéëà $fname:".mysql_error()."</h1><br><br>");
          }
                }
        print ("Âñ¸ çàåáèñü!");
      }
      else
      {
       print ('<h1>Íåêîòîðûå ïîëÿ íå áûëè çàïîëíåíû! Ïîâòîðèòå ââîä!</h1><br><br>');
        ShowRegisterForm();
        break;
      }
      break;

    default:
    print ("Îøèáêà ïðè óñòàíîâêå!");
    break;
    }
}
else
{
    ShowRegisterForm();
}

?>


Не работает же следующее.

Цитата

if (!empty($_POST))


в любом случае массив $_POST считается пустым. =(

Как правильно парсить форму? Как проверять наличие параметров в запросе? Именно их наличие или отсутствие.

Спасибо!


Автор: krundetz 6.1.2009, 01:58
ну я обычно проверяю нужные мне переменные в нем тоесть следующим образом
Код

if(isset($_POST['nameParamForm']))

если она есть то обрабатываю ее, если нет то произвожу действие реагируешее на отсутствие пришедщего параметра

Автор: ksnk 6.1.2009, 02:05
Файл точно называется install.php? А то можно писать и так, без явного указания имени файла - подставится текущий
Код

<form action="" method="post">


Автор: p0zt3r 6.1.2009, 11:34
Благодарю всех за ответы!

Спасибо вам! Со всем разобрался. Дело в том, что я использую DzSoft PHP Editor для написания и отладки скриптов, а он как-то странно генерирует POST запросы при запуске.

Поэтому я дописал ещё формочку для отладки скрипта smile

Что важно отметить, что в DzSoft Perl'е таких проблем у  меня никогда не возникало. =(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)