2014-01-11 3 views
2

У меня есть 10 полей ввода, которые являются необязательными для заполнения пользователем и динамически добавляются через jQuery после нажатия «Добавить другое поле». Они названы так:Обработка полей ввода по номеру

<input name="custom_0" type="text" placeholder="Fill this out..."> 
<input name="custom_1" type="text" placeholder="Fill this out..."> 
<input name="custom_2" type="text" placeholder="Fill this out..."> 
... 
<input name="custom_9" type="text" placeholder="Fill this out..."> 

Затем я использую JQuery Ajax для сериализации их и отправить его в PHP для проверки:

$(document).on("submit", "form", function(event) { 
    event.preventDefault(); 
    $.ajax({ 
     url: 'php/form_handler.php', 
     type: 'POST', 
     dataType: 'json', 
     data: $(this).serialize(), 
     success: function(data) { 
      alert(data); 
     } 
    }); 
}); 

Вот PHP я прямо сейчас. Он содержит цикл, который в 10 раз и возвращает ошибку, если поле не установлено:

<?php 

    $errors = array(); 

    for ($i = 0; $i < 10; $i++) { 
     if(isset($_POST["custom_$i"])) { 
      // input is set, continue verification code... 
     } else { 
      $errors["custom_$i"] = "ERROR!"; 
     } 
    } 

    // code to echo back errors 

?> 

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

Например, если пользователь заполнил только эти входы, а затем отправил форму, он вернет ошибку для входов custom_2 в custom_9. Почему и как я могу это исправить?

<input name="custom_0" type="text" placeholder="Fill this out..."> 
<input name="custom_1" type="text" placeholder="Fill this out..."> 

ответ

4

на самом деле, вопрос в том, насколько вы будете выполнять custom_ $ I проверки ... так как размерность вашего ввода является динамическим, вы должны переосмыслить код и отправить данные POST в виде массива и перебрать его с помощью foreach

шаблон для создания ваших полей ввода должен быть

<input name="custom[0]" type="text" placeholder="Fill this out..."> 
<input name="custom[1]" type="text" placeholder="Fill this out..."> 

затем доступа к данным просто делаются с Еогеасп или для запуска от 0 до длины массива ...но Еогеасп лучше

foreach($_POST['custom'] as $stuff){} 

вы можете проверить входящие данные с print_r($_POST);, чтобы увидеть основную структуру данных

заметь, что при таком подходе вы не можете получить индекс, где $ материала принадлежит, так используя array_keys ($ набить) позволяет получить доступ к элементу в $ _POST [ 'заказ'] [$ материал] и получить доступ к массиву ошибок с использованием $ ошибок [$ вещь]

другой подход к зацикливанию над массивом

foreach($_POST['custom'] as $key=>$value) 

и доступ $ ключ и $ значение отдельно, таким образом, обработкой проблемы, описанной выше

ссылки на https://stackoverflow.com/questions/183914/how-do-i-get-the-key-values-from-post

+0

Я не знаю лучшего подхода к этой динамической форме – patryk

+0

, если ключ является числовым, можно было бы бороться с while или для циклов, но если ключи являются словами ... как пользовательские ["name"] или custom [ «возраст»] ... foreach похож на швейцарский армейский нож –

+0

Какие значения будут $ stuff be? – Bagwell

0

Это потому, что вы проверяете против всех возможных входов в вашем PHP (в данном случае 10):

for ($i = 0; $i < 10; $i++) 
    if(isset($_POST["custom_$i"])) { 
... 

Что вы должны сделать, это пропуск в цифры, которые вы хотели бы проверить против, а не всего, а затем проверять только на PHP-код.

0
<?php 

    $errors = array(); 

    for ($i = 0; $i < 10; $i++) { 
     if(isset($_POST["custom_".$i])) { 
      // input is set, continue verification code... 
     } else { 
      $errors["custom_".$i] = "ERROR!"; 
     } 
    } 

    // code to echo back errors 

?> 
+0

Это ничего не меняет. – Bagwell

+0

«custom _». $ I не «custom_ $ i» – radouane

+1

'' custom_ $ i "' работает так же хорошо, как '' custom_ ". $ i' делает. – Bagwell

0

Ваши входы будут по-прежнему установлены, хотя они не имеют значения.

Вместо этого:

if(isset($_POST["custom_$i"])) 

сделать это

if(isset($_POST["custom_$i"]) && $_POST["custom_$i"] != "") 

Приветствия

0

лучше код РНР как сильфон

<?php 

foreach($_POST as $cus){ 

if(!empty($cus))[ 

// the input is not empty 


} else { 

//the input is empty 
} 



} 

и ваши входы устанавливаются, являются ли они полными или пустыми.

вы предложили использовать if(!empty($_POST["custom_$i"])) в собственном коде

Смежные вопросы