PHP Как вставить ввод данных из динамически генерируемой формы

Мне нужна помощь, чтобы сделать следующий шаг по вставке данных, введенных в динамически сгенерированную форму. Я несколько дней искал другие похожие вопросы, но все еще не нашел нужного.

Вот моя HTML-форма (без отлова / проверки ошибок):

<form id="form" name="form" method="post" action="recipeaddsubmit.php">
<table id="myTable">
            <tr>
              <td width="10%">Amount</td>
              <td width="10%">Measure</td>
              <td width="35%">Ingredient</td>
            </tr>
            <tr>
              <td valign="top">
                <input type="text" name="Amt1" id="Amt1" size="1" />
                <input type="text" name="Amt2" id="Amt2" size="1"  />
              </td>
              <td valign="top">
                 <select name="Measure" id="Measure">
                   <option>Cup</option>
                   <option>Ounce</option>
                 </select>
              </td>
              <td valign="top">
                 <input type="text" name="Ing" id="Ing" size="40" />
              </td>
             </tr>
         </table>
         <button type="button" onclick="displayResult()">Insert new row</button>
         <input type="submit" name="button" id="button" value="Submit" />
         </form>

Вот код javascript в моем заголовке:

<script>
function displayResult()
{
    var table=document.getElementById("myTable");
    var row=table.insertRow(-1);
    var cell1=row.insertCell(0);
    var cell2=row.insertCell(1);
    var cell3=row.insertCell(2);
            cell1.innerHTML="<input type='text' name='Amt1' id='Amt1' size='1' /> 
    <input type='text' name='Amt2' id='Amt2' size='1'  />";
    cell2.innerHTML="<select name='Measure' id='Measure'> <option>Cup</option> 
    <option>Ounce</option></select>";
    cell3.innerHTML="<input type='text' name='Ing' id='Ing' size='40' />";
}

</script>    

И вот моя попытка / частичная инструкция вставки mysqli (checkInput - это самостоятельно созданная функция проверки, которую я использовал раньше без проблем):

$amt1 = checkInput($_POST['Amt1']);
$amt2 = checkInput($_POST['Amt2']);
$measure = checkInput($_POST['Measure']);
$ing = checkInput($_POST['Ing']);

$ingAddQuery ="INSERT INTO Ingredient (Amt1, Amt2, Measure, Ing)
VALUES ({$amt1}, {$amt2}, {$measure}, {$ing})";

mysqli_query($mysqli,$ingAddQuery);              

    if (!mysqli_query($mysqli,$ingAddQuery))
{
  die('Error: ' . mysqli_error());
}

Я не понимаю, как включить цикл foreach с точки зрения увеличения определенного количества строк; Я понимаю концепцию, но не приложение в данном случае.

Спасибо вам за вашу помощь!


person user1713438    schedule 06.12.2013    source источник
comment
Назовите свои динамические входы с помощью [] (т.е. <input name="Ing[]">, отправьте форму и посмотрите, что вы получите.   -  person Babblo    schedule 07.12.2013
comment
Я получаю только последнюю запись, когда пробую это.   -  person user1713438    schedule 07.12.2013


Ответы (2)


измените имя с amt1 на amt1 [] и так далее ...

so

<input type="text" name="Amt1[]" id="Amt1[]" size="1" />

Когда вы отправляете форму,

$_POST['Amt1']; //is an array

будет массивом, поэтому вы можете сделать

$Amt1Array = $_POST['Amt1'];
foreach($Amt1Array => $Amt1){
//do stuff here
}

Еще лучше вы можете проиндексировать массив с помощью js для создания имен вроде ...

<input type="text" name="Amt1[0]" id="Amt1[0]" size="1" />
<input type="text" name="Amt2[0]" id="Amt2[0]" size="1" />

<input type="text" name="Amt1[1]" id="Amt1[1]" size="1" />
<input type="text" name="Amt2[1]" id="Amt2[1]" size="1" />

Тогда в PHP вы могли

$Amt1Array = $_POST['Amt1'];
$Amt2Array = $_POST['Amt2'];

foreach($Amt1Array as $key => $Amt1Value){
$Amt2Value = $Amt2Array[$key];
//do stuff with rows
}
person paquino    schedule 07.12.2013
comment
Пакуино, как мне объяснить тот факт, что существует более одного поля? Мне понадобится Amt1 [0] для работы с Amt2 [0] и т. Д. - person user1713438; 07.12.2013
comment
@ user1713438 Я отредактировал ответ как продолжение вашего комментария - person paquino; 09.12.2013

У меня есть предложение.

Почему бы вам не создать скрытый тип ввода.

<input type="hidden" name="cellCount" value="0" />

Каждый раз, когда вы вставляете новую строку, меняйте значение этого скрытого поля. Это не будет отображаться в браузере. Этот скрытый элемент также будет отправлен, когда вы отправите форму. это может быть получено на сервере с помощью $_POST["cellCount"].

Надеюсь, это поможет тебе.

person Pradeep    schedule 06.12.2013
comment
Pradeep, мне нравится эта идея, но как мне изменить значение, когда я вставляю новую строку? - person user1713438; 07.12.2013
comment
Я думаю, вы добавляете строки с помощью javascript. Предположим, что имя и идентификатор поля ввода - это cellCount. ‹Тип ввода = скрытое имя = значение cellCount = 0 id = cellCount /› Если одновременно создается несколько строк, сначала создайте строки и возьмите переменную счетчика. После создания строк поместите туда следующий код: var counter = 10; // предполагаемый счетчик - это количество вычисленных вами строк document.getElementById (cellCount) .value = counter; Надеюсь, это помогло тебе. - person Pradeep; 08.12.2013