Вот есть код Код (Text): <form method="GET" action="#"> <div id="parentId"> <div> <input name="name_1" type="text" /> <a onclick="return deleteField(this)" href="#">[X]</a> </div> </div> <input class="s" type="submit" value="GO!" /> </form> <a onclick="return addField()" href="#">Добавить поле</a> <script> var countOfFields = 1; // Текущее число полей var curFieldNameId = 1; // Уникальное значение для атрибута name var maxFieldLimit = 5; // Максимальное число возможных полей function deleteField(a) { // Получаем доступ к ДИВу, содержащему поле var contDiv = a.parentNode; // Удаляем этот ДИВ из DOM-дерева contDiv.parentNode.removeChild(contDiv); // Уменьшаем значение текущего числа полей countOfFields--; // Возвращаем false, чтобы не было перехода по сслыке return false; } function addField() { // Проверяем, не достигло ли число полей максимума if (countOfFields >= maxFieldLimit) { alert("Число полей достигло своего максимума = " + maxFieldLimit); return false; } // Увеличиваем текущее значение числа полей countOfFields++; // Увеличиваем ID curFieldNameId++; // Создаем элемент ДИВ var div = document.createElement("div"); // Добавляем HTML-контент с пом. свойства innerHTML div.innerHTML = "<input name=\"name_" + curFieldNameId + "\" type=\"text\" /> <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>"; // Добавляем новый узел в конец списка полей document.getElementById("parentId").appendChild(div); // Возвращаем false, чтобы не было перехода по сслыке return false; } </script> В базу добавляется только одно поле, как сделать обработчик чтобы при добавление несколько полей, все добавлялись в базу?
в форме: Код (Text): <form method="POST" ... <input name="name[1]" type="text" /> <input name="name[2]" type="text" /> в обработчике: Код (PHP): print_r($_POST); - ну а там думаю поймешь....
достаточно так Код (Text): <input name="name[]"... <input name="name[]"... <input name="name[]"... <input name="name[]"... так и добавлять проще
Код (PHP): - div.innerHTML = "<input name=\"name_" + curFieldNameId + "\" type=\"text\" /> ".... + div.innerHTML = "<input name=\"name[" + curFieldNameId + "]\" type=\"text\" /> "....
Надо не добавлять, а изменить существующую (та возле которой стоит знак -), на ту у которой стоит знак +. Речь шла не о добавлении записи в базу, а о print_r($_POST);
Читал, пробывал, в print_r($_POST); массив отображается правильно, в базу так же только одну запись. Скорее всего дело в обработчике, кто знает откликнитесь...
Код (Text): <? if (isset($name)) { $result = mysql_query ("INSERT INTO data (name) VALUES ('$name')"); if ($result == 'true') {echo "<p><h2>Заявка отправлена!</p>";} else {echo "<p><h2>Ваша заявка не отправлена!</h2></p>";} } else { exit ("<p>Вы ввели не всю информацию, вернитесь назад и заполните все поля.</p>"); } ?>
if (isset($name)) замени на if (isset($_GET['name'])) Добавь $name = trim(substr(trim($_GET['name']),0,64)); $result = mysql_query ("INSERT INTO data (name) VALUES ('$name')"); замени на $result = mysql_query ("INSERT INTO `data` (`name`) VALUES ('".mysql_real_escape_string($name)."')"); т.к. это дырка в безопасности. мало ли что туда тебе напишут. может туда напишут запрос на удаление всей бд $result == 'true' замени на $result !== false Это сравнение со строкой! со словом в этой строке! =) А не с true или false. Как ты умудрился такое написать. Это во-первых. Во-вторых, запрос вернет false если он обломился. И ответ, если все прошло успешно. Так что сравнивать тут надо с false (с проверкой типа). echo "<p><h2>Ваша заявка не отправлена!</h2></p>"; замени на echo 'Ошибка обращения к базе данных. Приносим свои извинения.';
Спасибо за исправленные ошибки. Но все таки как сделать чтобы в базу добавлялись все значения с инпутов в БД. На данный момент только с одного инпута добавляется.
Код (Text): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <script> var countOfFields = 1; // Текущее число полей var curFieldNameId = 1; // Уникальное значение для атрибута name var maxFieldLimit = 5; // Максимальное число возможных полей function deleteField(a) { // Получаем доступ к ДИВу, содержащему поле var contDiv = a.parentNode; // Удаляем этот ДИВ из DOM-дерева contDiv.parentNode.removeChild(contDiv); // Уменьшаем значение текущего числа полей countOfFields--; // Возвращаем false, чтобы не было перехода по сслыке return false; } function addField() { // Проверяем, не достигло ли число полей максимума if (countOfFields >= maxFieldLimit) { alert("Число полей достигло своего максимума = " + maxFieldLimit); return false; } // Увеличиваем текущее значение числа полей countOfFields++; // Увеличиваем ID curFieldNameId++; // Создаем элемент ДИВ var div = document.createElement("div"); // Добавляем HTML-контент с пом. свойства innerHTML div.innerHTML = "<input name=\"name[]" + curFieldNameId + "\" type=\"text\" /> <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>"; // Добавляем новый узел в конец списка полей document.getElementById("parentId").appendChild(div); // Возвращаем false, чтобы не было перехода по сслыке return false; } </script> <title>Untitled Document</title> </head> <form method="post" action="add.php"> <div id="parentId"> <div> <input name="name" type="text" /> <a onclick="return deleteField(this)" href="#">[X]</a> </div> </div> <input class="s" type="submit" value="GO!" /> </form> <a onclick="return addField()" href="#">Добавить поле</a> <body> </body> </html> add.php Код (Text): <?php include ("./blocks/bd.php"); if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}} ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Обработчик</title> </head> <? print_r($_POST); $name = trim(substr(trim($_POST['name']),0,64)); if (isset($_POST['name'])) { /* Здесь пишем что можно заносить информацию в базу */ $result = mysql_query ("INSERT INTO `data` (`name`) VALUES ('".mysql_real_escape_string($name)."')"); if ($result !== false) {echo "<p><h2>Заявка отправлена!</h2><br><br><p align='center'><a href='index.php'><img src='./images/back2.png' border='0'></a></p></p>";} else {echo "<p><h2>Ошибка обращения к базе данных. Приносим свои извинения.</h2></p>";} } else { exit ("<p><h2>Вы ввели не всю информацию, вернитесь назад и заполните все поля. </h2><br><br> <input name='back' src='images/back.png' type='image' value='Вернуться назад' onclick='history.back();'><br><br></p>"); } ?> <body> </body> </html>
Код (Text): div.innerHTML = "<input name=\"name[]" + curFieldNameId + "\" type=\"text\" /> тут касяк. нужно(а нужно ли вообще?) внести curFieldNameId внутрь квадратных скобок name[] Добавлено спустя 1 минуту 31 секунду: Код (Text): $name = trim(substr(trim($_POST['name']),0,64)); Этому не бывать, ибо $_POST['name'] вроде как массив Добавлено спустя 2 минуты 29 секунд: Код (Text): <input name="name" type="text" /> Это будет убито конструкцией name[]