хранить переменные php из данных добавленной формы в виде массива - PullRequest
0 голосов
/ 26 октября 2018

Я создал форму php, которая добавляет новые текстовые переменные, такие как:

<form action="" enctype=”multipart/form-data” method="post" action="<?php echo $_SERVER['REQUEST_URI'];?>">

    <div id="div">
        value <input type="text" name="tst" >
     <button onclick ="appendRow()" value="Add Row">Add Row</button>
     <input type="submit" value="test" name="submit" >
     </div>
</form>

Я добавил следующий java-скрипт к нему:

<script> 
    var x=1
function appendRow()
{
   var d = document.getElementById('div');
   d.innerHTML += "<input type='text' name='tst"+ x++ +"'><br >";
}
</script>

Теперь я хочу сохранить все переменные, полученные из формы, и использовать их для дальнейших вычислений. Я попробовал для каждого цикла для этого:

if (isset($_POST['submit']) && is_array($_POST['submit'] == "test")) {
    foreach($_POST["submit"] as $key => $tst){
        $capture_field_vals .= $tst .", ";
    }
    echo $capture_field_vals;

Но ничего не происходит. Подскажите, пожалуйста, что не так?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Сначала удалите свойства action из формы.

<form enctype="multipart/form-data" method="post">
    ...
</form>

Наличие нескольких действий с формами не поддерживается, и формы будут публиковаться на той же странице, на которую они были отправлены, если не будет выполнено никаких действий (по умолчанию).

Далее отправьте форму name='tst' в виде массива, например:

<input type="text" name="tst[]"/>

И в вашем JavaScript сделайте то же самое:

d.innerHTML += '<input type="text" name="tst[]"/><br>';

(вам не нужна переменная x), (input arrays)

Теперь в вашем PHP вы можете просмотреть все представленные tst значения.

if (isset($_POST['submit'])) {
    foreach($_POST['tst'] as $tst){
        $capture_field_vals .= $tst .", ";
    }
    echo rtrim($capture_field_vals, ','); //rtrim will remove trailing comma
}

(rtrim() документация )

Но это можно упростить еще больше с implode().

if(isset($_POST['submit'])) {
    echo implode(', ', $_POST['tst']);
}
0 голосов
/ 26 октября 2018

Ваш цикл кажется неправильным. С $_POST['submit'] ничего не перебрать, это всего лишь одно значение. Фактический массив $_POST.

foreach($_POST["submit"] as $key => $tst){
        $capture_field_vals .= $tst .", ";
    }

Попробуйте это:

foreach($_POST as $key => $tst){
        $capture_field_vals .= $tst .", ";
    }
...