Как правильно обработь одну из нескольких переменных, переданную через форму в php скрипт?

Тема в разделе "Как сделать...", создана пользователем 01K, 23 июн 2019.

XEvil 4.0 Релиз Состоялся!
  1. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    542
    Симпатии:
    83
    Всем привет!
    На странице есть множество input'ов, вида:
    Код:
    <input type="tel" class="phone_flag" name="phone_tab1[main]" required="">
    ...
    <input type="tel" class="phone_flag" name="phone_tab20[main]" required="">
    <input type="tel" class="phone_flag" name="phone_tabXX[main]" required="">
    
    Далее это всё передаётся AJAX'ом в php mailer.

    Когда поле телефона было одно, то всё просто обрабатывалось:
    Код:
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (isset($_POST['name'])) {$name = $_POST['name'];}
      if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
      if (isset($_POST['email'])) {$email = $_POST['email'];}
       ...
    }
    
    Сейчас же инпутов более 20.
    Вот такой массив приходит в скрипт мэйлера:
    Код:
    ["phone_tab1"]=> array(2) { ["main"]=> string(11) "+7123456789" ["full"]=> string(11) "+7123456789" }
    
    Здесь ["phone_tab1"] - меняется индекс, вплоть до ["phone_tabXX"]

    Собственно вопрос, как мне теперь правильно выдернуть ["main"] или ["full"], если я не знаю какой из ["phone_tabXX"] будет передан? Как это правильно обработать и проверить?
     
  2. sempais8

    sempais8 Писатель

    Регистр.:
    18 окт 2015
    Сообщения:
    8
    Симпатии:
    8
    Привет.
    А разве с атрибутом required, не все поля будут обязательно заполнены?!
     
  3. Azmandios

    Azmandios Создатель

    Регистр.:
    3 июн 2019
    Сообщения:
    32
    Симпатии:
    17
    может вопрос не правильно понимаю(или что то упускаю), но что вам мешает получать через POST данные в переменную ?
    PHP:
    $phone_tab1$_POST['phone_tab1']
    $phone_tab2$_POST['phone_tab2']
    Возможно это рядом с вашим решением ?
     
  4. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    542
    Симпатии:
    83
    в таком случае мне надо будет проверять "N" раз "$_POST['phone_tabX']". Т.е. столько раз, сколько инпутов на странице, когда заполнен будет всего один из "N".
    В принципе, проверять то и так надо будет. Вопрос в изящном и универсальном решении :)
     
  5. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    245
    Симпатии:
    100
    Если можно менять код инпутов, то поменяй
    Код:
    <input type="tel" class="phone_flag" name="phone_tab[1][main]" required="">
    .....
    <input type="tel" class="phone_flag" name="phone_tab[20][main]" required="">
    
    затем просто проверяй массив phone_tab на инициализацию, если да, потом потом foreach
     
  6. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    542
    Симпатии:
    83
    я так заколхозил:
    Код:
      for ($i = 1; $i <= 16; $i++) {
         if (isset($_POST["phone_tab$i"])){       
           $phone = $_POST["phone_tab$i"]["full"];
         }
       }
    
    Или есть вариант получше?
     
  7. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    245
    Симпатии:
    100
    Не меняя инпуты можно и так, все равно будут костылики
     
    01K нравится это.
  8. kmrd

    kmrd Создатель

    Регистр.:
    23 ноя 2016
    Сообщения:
    19
    Симпатии:
    16
    еще вот такой фокус можно, если может быть любое количество
    PHP:
    foreach ($_POST as $key => $value) {
        if (
    preg_match ('/^phone_tab\d+$/',$key)){
          
    $phone=$value["full"];
          break;
        }
    }
     
    01K и Minor нравится это.