У меня проблема, когда я хочу вставить несколько полей в одну таблицу.
Вот моя форма:
<h1>Add user</h1> <form method="post" action="index.php"> <table> <thead> <th>Name</th> <th>Age</th> </thead> <tr> <td><input name="name[]" type="text" /></td> <td><input name="age[]" type="text" /></td> </tr> <tr> <td><input name="name[]" type="text" /></td> <td><input name="age[]" type="text" /></td> </tr> <tr> <td><input name="name[]" type="text" /></td> <td><input name="age[]" type="text" /></td> </tr> </table> <input type="submit" name="submit" value="Submit" /> </form>
И вот код отправки:
if (isset($_POST['submit'])) { foreach ($_POST as $val) { $name = $val['name']; $age = $val['age']; mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')"); } }
Запрос вставляется в базу данных, но не значения, которые я ввел.
Может кто-нибудь, пожалуйста, помогите мне?
Вы делаете foreach на $_POST
а не на имя / возрастные массивы. Вы должны делать foreach по имени или возрасту, например:
if ( !empty($_POST['name']) && !empty($_POST['age']) && is_array($_POST['name']) && is_array($_POST['age']) && count($_POST['name']) === count($_POST['age']) ) { $name_array = $_POST['name']; $age_array = $_POST['age']; for ($i = 0; $i < count($name_array); $i++) { $name = mysql_real_escape_string($name_array[$i]); $age = mysql_real_escape_string($age_array[$i]); mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')"); } }
Я также хотел бы отметить, что вы в настоящее время восприимчивы к SQL-инъекции, поэтому я добавил шаг экранирования строк для имени / возраста.
Я также настоятельно рекомендую просто сделать единую объемную вставку в БД, а не вставлять каждую запись отдельно (я оставлю это для вас, чтобы реализовать). Такой подход почти всегда предпочтительнее с точки зрения производительности.
Наконец, вы ДЕЙСТВИТЕЛЬНО не должны использовать функции mysql_*
поскольку они устарели. Подумайте о переходе на mysqli или PDO.
if (isset($_POST['submit'])) { $i = 0; foreach ($_POST as $val) { $name = $_POST['name'][$i]; $age = $_POST['age'][$i]; mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')"); $i++; } }
Это решит вашу проблему!
Немного более легкий код, который хорошо работает для меня.
if (isset($_POST['submit'])) { $i = 0; for ((array) $_POST as $val) { $sql = "INSERT INTO users (name, age) VALUES ( '{$_POST["name"][$i]}','{$_POST["age"][$i]}' ); mysql_query($sql); echo (!mysql_affetced_rows()) ? "Query Wrong" : "Query Okay"; $i++; } }
ниже приведен пример того, как вставлять несколько строк за один раз
$query_string = "INSERT INTO YOURTBL_NAME(column_1,column_2)VALUES"; $data =""; for($i=0;$i<count($YOUR FILE ARRAY);$i++) { $data .='("'.$paramater_1[$i].'","'.$paramater_2.'"),'; } $qry = substr($query_string.$data, 0, -1); $result = mysql_query($qry);
$education_institute_array = $_POST['education_institute']; $education_qualification_array = $_POST['education_qualification']; $education_start_date_array = $_POST['education_start_date']; $education_end_date_array = $_POST['education_end_date']; $education_note_array = $_POST['education_note']; for ($i = 0; $i < count($education_institute_array); $i++) { $education_institute = mysql_real_escape_string($education_institute_array[$i]); $education_qualification = mysql_real_escape_string($education_qualification_array[$i]); $education_start_date = mysql_real_escape_string($education_start_date_array[$i]); $education_end_date = mysql_real_escape_string($education_end_date_array[$i]); $education_note = mysql_real_escape_string($education_note_array[$i]); $sql_education_insert = "INSERT INTO `education` (`user_id`, `education_institute`, `education_qualification`, `education_start_date`, `education_end_date`, `education_note`) VALUES ('$user_id', '$education_institute', '$education_qualification', '$education_start_date', '$education_end_date', '$education_note')"; $sql_result_education = mysql_query($sql_education_insert); }