Я хочу добавить несколько строк в таблицу по форме.
Я знаю, как сделать только один массив данных, но в случае всего массива имен, всех подробных массивов, всех массивов контактов я не могу этого сделать.
Я также читаю здесь и много статей в Google, но я не смог добиться результата.
Поэтому, пожалуйста, помогите мне создать его?
Итак, я от:
<form action="" method="POST"> Name: <input type="text" name="name[]" value=""> Detail: <input type="text" name="detail[]" value=""> Address: <input type="text" name="add[]" value=""> <br /> Name: <input type="text" name="name[]" value=""> Detail: <input type="text" name="detail[]" value=""> Address: <input type="text" name="add[]" value=""> <br /> Name: <input type="text" name="name[]" value=""> Detail: <input type="text" name="detail[]" value=""> Address: <input type="text" name="add[]" value=""> <input type="submit" name="submit" id="submit" value="Submit">
И мой php для вставки в sql
include("../db.php"); global $dbh; if(isset($_POST['submit'])){ $data = array(); // now how to do all single post array? $name = mysqli_real_escape_string($_POST['name']); $detail = mysqli_real_escape_string($_POST['detail']); $add = mysqli_real_escape_string($_POST['add']); $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$name','$detail','$add')");
вinclude("../db.php"); global $dbh; if(isset($_POST['submit'])){ $data = array(); // now how to do all single post array? $name = mysqli_real_escape_string($_POST['name']); $detail = mysqli_real_escape_string($_POST['detail']); $add = mysqli_real_escape_string($_POST['add']); $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$name','$detail','$add')");
Конечно, сначала вам нужно их закодировать, вы можете использовать foreach
. Затем вы можете использовать ключ внутри foreach для доступа к другим выстроенным индексам в форме:
Пример:
if(isset($_POST['submit'])) { foreach($_POST['name'] as $k => $name) { $name = mysqli_real_escape_string($dbh, $name); $detail = mysqli_real_escape_string($dbh, $_POST['detail'][$k]); $add = mysqli_real_escape_string($dbh, $_POST['add'][$k]); // continue insertion } }
Или с использованием подготовленных заявлений:
if(isset($_POST['submit'])) { foreach($_POST['name'] as $k => $name) { $insert = $db->prepare('INSERT INTO varify (id, name, detail, add) VALUES('', ?, ?, ?)'); $insert->bind_value('sss', $name, $_POST['detail'][$k], $_POST['add'][$k]); $insert->execute(); } }
Другой альтернативой было бы создание структуры группировки в вашей форме разметки html.
Используйте клавиши внутри группировки имен, чтобы сгруппировать их. Таким образом, разметка будет выглядеть примерно так:
<form action="" method="POST"> Name: <input type="text" name="input[0][name]" value=""> Detail: <input type="text" name="input[0][detail]" value=""> Address: <input type="text" name="input[0][add]" value=""> <br /> Name: <input type="text" name="input[1][name]" value=""> Detail: <input type="text" name="input[1][detail]" value=""> Address: <input type="text" name="input[1][add]" value=""> <br /> Name: <input type="text" name="input[2][name]" value=""> Detail: <input type="text" name="input[2][detail]" value=""> Address: <input type="text" name="input[2][add]" value=""> <br /> <input type="submit" name="submit" id="submit" value="Submit">
Когда вы обрабатываете его в PHP, теперь они сгруппированы по строкам и могут быть доступны следующим образом:
<?php if(isset($_POST['submit'])) { $input = $_POST['input']; foreach($input as $values) { if(!empty($values['name']) && !empty($values['detail']) && !empty($values['add'])) { $insert = $db->prepare('INSERT INTO varify (id, name, detail, add) VALUES('', ?, ?, ?)'); $insert->bind_value('sss', $values['name'], $values['detail'], $values['add']); $insert->execute(); } } }
Замените код следующим:
include("../db.php"); global $dbh; if(isset($_POST['submit'])){ $data = array(); // now how to do all single post array? $names = $_POST['name']; $details = $_POST['detail']; $adds = $_POST['add']; for($i = 0; $i < count($names); $i++) $curr_name = mysqli_real_escape_string($names[$i]); $curr_detail = mysqli_real_escape_string($details[$i]); $curr_add = mysqli_real_escape_string($adds[$i]); $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$curr_name','$curr_detail','$curr_add')"); } }
вinclude("../db.php"); global $dbh; if(isset($_POST['submit'])){ $data = array(); // now how to do all single post array? $names = $_POST['name']; $details = $_POST['detail']; $adds = $_POST['add']; for($i = 0; $i < count($names); $i++) $curr_name = mysqli_real_escape_string($names[$i]); $curr_detail = mysqli_real_escape_string($details[$i]); $curr_add = mysqli_real_escape_string($adds[$i]); $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$curr_name','$curr_detail','$curr_add')"); } }
Если поле id
является полем автоматического увеличения, я предлагаю вам не вручную вставлять идентификатор, особенно когда вы передаете пустую строку. Вместо этого замените код вставки следующим образом:
$result=mysqli_query($dbh,"INSERT INTO varify (name,detail,add) VALUES('$curr_name','$curr_detail','$curr_add')");
используйте это
<? if(isset($_POST['submit'])){ $1=0; foreach($_POST['name'] as $key=>$inp) { $name = mysqli_real_escape_string($_POST['name'][$i]); $detail = mysqli_real_escape_string($_POST['detail'][$i]); $add = mysqli_real_escape_string($_POST['add'][$i]); $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','".$name."','".$detail."','".$add."')"); } $1++; } ?>
создать массив с использованием цикла foreach
$data = '('; foreach($_POST['name'] as $key => $name){ //here use a mandatory field as foreach paremeter $data .= "'".mysqli_real_escape_string($name)."'", "'".mysqli_real_escape_string($_POST['detail'][$key])."'", "'".mysqli_real_escape_string($_POST['add'][$key])."'"; $data .= '),'; } $data = rtirm($data, ','); $result=mysqli_query($dbh,"INSERT INTO varify (name, detail, add) VALUES". $data);