У меня есть динамическая таблица HTML, которая позволяет пользователю добавлять строки одним нажатием кнопки. Данные из каждой строки должны быть вставлены в таблицу MySQL, для которой я использую PHP-скрипт. Теперь, поскольку каждый раз количество строк в таблице HTML может отличаться, как мне это сделать в PHP. Один из способов – подсчитать количество строк в таблице HTML (что я нашел где-то так, как это делается)
$rows = $table->find('#studenttable'); /*line 4 of my code*/ $count = count($rows); /*studenttable is the id of my table*/ echo $count;
а затем запустите цикл for для вставки данных для каждой строки. Но это приводит к фатальной ошибке.
Notice: Undefined variable: table in savedata.php on line 4
Fatal error: Call to a member function find() on a non-object in savedata.php on line 4
Другим способом может быть использование цикла foreach, который я совершенно не понимаю, как реализовать в этой ситуации.
Этот код динамически добавляет новые строки
var count=2; function addRow() { var table=document.getElementById("studenttable"); var row=table.insertRow(-1); var cell15=row.insertCell(14); var ipt8 = document.createElement('input'); ipt8.setAttribute("type", "hidden"); ipt8.name = "htmlrow[]"; ipt8.value = count; cell15.appendChild(ipt8); count++; }
PHP-файл, чтобы получить количество строк
<?php $arr = $_POST['htmlrow']; foreach ($arr as $val) { $count= $val; echo $count; } ?>
все еще не получая результата.
Вы не можете напрямую обращаться к элементам HTML в PHP.
Мое предложение изменило бы клиентский код, чтобы всякий раз, когда строка добавляется в таблицу, <input type="hidden" value="value-of-that-row" name="htmlrow[]"/>
получает добавлен в форму.
Таким образом, при отправке формы (у вас есть все, что завершено внутри формы, правильно?) Вы можете получить доступ к сгенерированным строкам таблицы в PHP, обрабатывая форму, используя $_POST['htmlrow']
, который теперь будет содержать массив данные пользователя.
в таблице.php
<script> function addRow() { var table = document.getElementById("studentsTable"); var row = table.insertRow(-1); var cell = row.insertCell(0); //get the current count of rows //-1 for the head row another -1 to index from 0 var last_row_index = table.getElementsByTagName("tr").length-2; cell.innerHTML = '<input name="name_'+ last_row_index +'" type="text" />'; }
<body> <form action="update.php" method="post"> <table id="studentsTable"> <tr> <th>Name</th> </tr> <tr> <td><input name="name_0" type="text" /></td> </tr> </table> <input name="submit" type="submit" value="Submit" /> <br> </form> <button onclick="addRow()">Add New Row</button> </body>
в update.php
<?php foreach($_POST as $name => $value) { if(substr($name, 0, 5) == 'name_') { echo $name .' : '. $value .'<br>' ; } } ?>
выход будет выглядеть примерно так:
имя_0: Джейн
имя_1: Боб
имя_2: Сэм
,
,
Так же, как пользователь добавил в table.php
Вы можете, конечно, поместить их в массив, вставить в MySQL … и т. Д.