PHP Назначение переменных для нескольких строк динамической формы

0

У меня возникли небольшие проблемы с тем, чтобы прикоснуться к скрипту, который извлекает информацию из формы и сохраняет на сервере csv. Проблема в том, что у меня есть форма с несколькими таблицами, в этих таблицах есть кнопка "+" для добавления другой строки. Я использую jquery для этого. Это отлично работает, а также сохраняет количество строк в скрытом вводе и присваивает имя текстовой области _0, _1, _2.

Я просто смущен тем, как я буду использовать PHP для динамического назначения переменных для них в зависимости от того, сколько строк добавляет пользователь. Это моя форма:

<table style="width:100%;" id="directEmployees">
<tbody>
    <tr>
        <td>Name</td>
        <td>Time Start</td>
        <td>Time Finish</td>
        <td>Job Description</td>
        <td>Plant/Machinery Issued/Used</td>
        <td>P.P.E Issued?</td>
        <td>Materials Issued/Used</td>
    </tr>
    <tr>
        <td width="20%"><textarea style="width:100%;" name="directName_0" id="directName_0"></textarea></td>
        <td width="10%"><textarea style="width:100%;" name="directTimeStart_0" id="directTimeStart_0"></textarea></td>
        <td width="10%"><textarea style="width:100%;" name="directTimeEnd_0" id="directTimeEnd_0"></textarea></td>
        <td width="20%"><textarea style="width:100%;" name="directJob_0" id="directJob_0"></textarea></td>
        <td width="15%"><textarea style="width:100%;" name="directPlant_0" id="directPlant_0"></textarea></td>
        <td width="10%"><textarea style="width:100%;" name="directPPE_0" id="directPPE_0"></textarea></td>
        <td width="15%"><textarea style="width:100%;" name="directMaterials_0" id="directMaterials_0"></textarea></td>
    </tr>
</tbody>
</table>
<h2 id="addEmployee" style="cursor:pointer;">+</h2>

<button type="submit">Submit</button>

</form>

<script src="/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

$(document).ready(function(){
    var additional_rows = 0;
    $('#addEmployee').click(function() {
        additional_rows = additional_rows + 1;
        $('#rowsEmployee').val(additional_rows);

        var addTable = '<tr><td width="20%"><textarea style="width:100%;" name="directName_' + additional_rows + '" id="directName_' + additional_rows + '"></textarea></td><td width="10%"><textarea style="width:100%;" name="directTimeStart_' + additional_rows + '" id="directTimeStart_' + additional_rows + '"></textarea></td><td width="10%"><textarea style="width:100%;" name="directTimeEnd_' + additional_rows + '" id="directTimeEnd_' + additional_rows + '"></textarea></td><td width="20%"><textarea style="width:100%;" name="directJob_' + additional_rows + '" id="directJob_' + additional_rows + '"></textarea></td><td width="15%"><textarea style="width:100%;" name="directPlant_' + additional_rows + '" id="directPlant_' + additional_rows + '"></textarea></td><td width="10%"><textarea style="width:100%;" name="directPPE_' + additional_rows + '" id="directPPE_' + additional_rows + '"></textarea></td><td width="15%"><textarea style="width:100%;" name="directMaterials_' + additional_rows + '" id="directMaterials_' + additional_rows + '"></textarea></td></tr>';

        $('#directEmployees tbody').append(addTable);
    });
});

</script>

Любая помощь будет принята с благодарностью.

Теги:

2 ответа

0
Лучший ответ

PHP способен создавать массив из нескольких входов с одним именем, используя квадратные скобки. Я не совсем уверен в том, что вы пытаетесь выполнить, но если есть динамическое количество строк, вы можете не дать каждому уникальное имя.

Вы можете рассмотреть соглашение об именах, подобное этому:

<textarea style="width:100%;" name="directTimeStart[]" id="directTimeStart_0"></textarea></td>
<textarea style="width:100%;" name="directTimeEnd[]" id="directTimeEnd_0"></textarea></td>
<textarea style="width:100%;" name="directJob[]" id="directJob_0"></textarea></td>
<textarea style="width:100%;" name="directPlant[]" id="directPlant_0"></textarea></td>
<textarea style="width:100%;" name="directPPE[]" id="directPPE_0"></textarea></td>
<textarea style="width:100%;" name="directMaterials[]" ... ></td>

Это позволит вам полностью забыть о нумерации на стороне клиента и перенести задачу на PHP. В PHP вы сможете получить доступ к первой строке, используя $_GET[directTimeStart][0], вторую строку с $_GET[directTimeStart][1] и т.д.

$count = count($_POST['directTimeStart']);
for ($i = 1; $i <= $count; $i++) {
 $csv .= $_POST[directTimeStart][$i] . ',';
 $csv .= $_POST[directTimeEnd][$i] . ',';
 $csv .= $_POST[directJob][$i] . ',';
 $csv .= $_POST[directPlan][$i] . ',';
 $csv .= $_POST[directPPE][$i] . ',';
 $csv .= $_POST[directMaterials][$i] . '\n';
}

return $csv;
  • 0
    Это здорово, однако, я ищу способ определить, сколько строк было добавлено, и назначить им переменные, чтобы я мог обработать их в CSV ...
  • 0
    Вы можете использовать count () или foreach () для массива. Обработка в CSV не должна иметь значения, независимо от того, что вы хотите делать с данными, которые вы должны иметь.
Показать ещё 5 комментариев
0

после того, как форма будет отправлена на ваш php-скрипт, будет заполнен массив $ _GET или $ _POST, в зависимости от метода формы.. так что вам нужно будет работать через массив, что-то вроде...

foreach($_POST as $key=>value) {
  //process value 
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню