У меня есть html-форма, содержащая таблицу текстовых входов, которая в конечном итоге будет использоваться для генерации запроса SQL INSERT. Проблема у меня есть моя таблица ввода вручную имеет 5 текстовых входов, то я дал пользователю возможность добавить больше. Эти дополнительные поля ввода создаются отлично, и когда я проверяю элементы на странице после их добавления, они имеют правильное имя, идентификатор, типы и т. Д. (Попытались опубликовать скриншот, чтобы дать лучшую идею, но я новый пользователь, поэтому не может – в любом случае обойти это ?!)
Проблема заключается только в том, что текст из первых 5 (те, которые я вручную ввел с помощью html-тегов) публикуется, когда я нажимаю кнопку отправки формы. Это потому, что он считывает данные до создания новых входов? Я чувствую, что это не должно быть, потому что я использую if (isset ($ _ POST ['save'])) {где 'save' – моя последняя кнопка отправки.
Таблица, которую я получил в моем html, выглядит следующим образом (извинения – это плохо выложенный / беспорядочный синтаксис, но в этом смысле он работает отлично):
edit: У меня есть две таблицы в одной форме; это не имеет значения? то есть:
<form action='createtable.php' method='post' border='0'> <table> <tr> <td><input type="button" value="Add column" onclick="addRowToTable();" /></td> <td><input class='strong' type='submit' value='Create Table' name='save' /></td> </tr> </table> <table name='columnnames' id='columnnames' border='0'> <tr> <!--start table row 1--> <td>Column 1:</td> <!--first item in row is just text--> <td><input type='text' name='col1' id='col1' /></td> <!--second item in row is input text box--> </tr> <!--end table row--> <tr> <!--start table row 2--> <td>Column 2:</td> <td><input type='text' name='col2' id='col2' /></td> </tr> <!--end table row--> <tr> <!--start table row 3--> <td>Column 3:</td> <td><input type='text' name='col3' id='col3' /></td> </tr> <!--end table row--> <tr> <!--start table row 4--> <td>Column 4:</td> <td><input type='text' name='col4' id='col4' /></td> </tr> <!--end table row--> <tr> <!--start table row 5--> <td>Column 5:</td> <td><input type='text' name='col5' id='col5' /></td> </tr> <!--end table row--> </table> </form>
JavaScript, который я использую для добавления строк таблицы, приведен ниже:
<script> function addRowToTable() { //get table var tbl = document.getElementById('columnnames'); //find length var numberRows = tbl.rows.length; // as there's no header row in the table, then iteration = numberRows + 1 var rowNumber = numberRows + 1; var row = tbl.insertRow(numberRows); // left cell var cellLeft = row.insertCell(0); var textBox = document.createTextNode('Column ' + rowNumber + ':'); cellLeft.appendChild(textBox); // right cell var cellRight = row.insertCell(1); var el = document.createElement('input'); el.type = 'text'; el.name = 'col' + rowNumber; el.id = 'col' + rowNumber; //el.onkeypress = keyPressTest; cellRight.appendChild(el); } </script>
Я видел несколько вопросов, связанных с генерируемыми JS битами форм, которые не хотят правильно отправлять, используя $ _POST, но ответы на них кажутся довольно минимальными и задаются вопросом, может ли кто-нибудь помочь, поскольку я пытался считывать данные часами. Большое спасибо!
Вы проверили, что ваш тег формы написан правильно? (вы должны были включить его в свой вопрос: o))
<form method=POST action="myURL"> [...] </form>
Хотя это очень старый вопрос, я пишу ответ, если кто-то еще повторит его.
PHP-код не принимает значения из недавно добавленных полей ввода с помощью jquery, потому что все они имеют одинаковые атрибуты имени. Для этих типов динамически вводимых полей вам нужно установить имя в массив <input type="text" name "text[]">
. Когда вы пишете, $text= $_POST['text']
, текстовая переменная будет сохранять все значения из полей ввода с text[]
имени text[]
и сохранять их в виде массива.
Надеюсь, поможет. 🙂