За последние 24 часа нас посетили 41142 программиста и 1813 роботов. Сейчас ищут 1045 программистов ...

Данные из формы, как упростить?

Тема в разделе "PHP для новичков", создана пользователем tcp65, 8 авг 2009.

  1. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Как я получаю данные из формы и обрабатываю их (максимально упрощенный код &register_globals:eek:ff):


    PHP:
    1.  
    2. if ($op == "passcheck") { PassCheck($op,$loginform,$passwordform); }
    3. else ShowPass();
    4.  
    5. function ShowPass()
    6. {
    7. print "<form action=\"index.php\" method=\"post\">\n";
    8. print "<input width=10 type=\"text\" name=\"loginform\">";
    9. print "<input width=10 type=\"password\" name=\"passwordform\">";
    10. print "<input type=\"submit\" value=\"ok\">";
    11. print "<input type=\"hidden\" name=\"op\" value=\"passcheck\">
    12. print "</form>";
    13. }
    14.  
    15. function PassCheck($op,$loginform,$passwordform)
    16. {
    17. ...
    18. }
    19.  
    Вообщем всё работает. Вопрос: можно ли сделать что бы данные из формы приходили массивом, т.е. функция была бы как то так:
    function PassCheck($ДАННЫЕ_из_ФОРМЫ) и не важно сколько там 2 переменные или 30?
     
  2. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Почитал немного манула, сделал так (покритикуйте, все ли практично реализовано):


    PHP:
    1.     if ($_POST['form'][op]=="passcheck")
    2.         {Show($_POST['form']);}
    3.     else
    4.         {ShowPass();}
    5.  
    6.  
    7.     function Show($form)
    8.     {
    9.     ...
    10.     }
    11.  
    12.  
    13.     function ShowPass()
    14.     {
    15.     print "<form action=\"test.php\" method=\"post\">\n";
    16.     print "<input width=100 type=\"text\" name=\"form[loginform]\"><br>";
    17.     print "<input width=100 type=\"text\" name=\"form[passwordform]\"><br>";
    18.     print "<input type=\"hidden\" name=\"form[op]\" value=\"passcheck\">\n";
    19.     print "<input type=\"submit\" value=\"ok\" >";
    20.     print "</form>";
    21.     }
     
  3. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    $_POST - это массив

    нет проверки на существование $_POST['form'] и второй индекс не в кавычках.
     
  4. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Скажите, а для чего делать проверку?
    У меня ведь ShowPass() запускается в любом случае, кроме если op=passcheck.
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Потому что 'op' - текст, а op - константа. Это приводит к генерации ошибки типа Notice, что примерно в 7 раз замедляет операцию. И вобще это плохой стиль.
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Можно. Например если поля будут иметь типа такие имена:
    HTML:
    1. <input name="date[name]">
    2. <input name="date[password]">
    то в массиве $_POST элемет date будет массивом с ключами name и date.