我有一个表单中继器(https://github.com/DubFriend/jquery.repeater),可以在需要时添加多个输入,但唯一的问题是..我不知道如何在sql中一次插入表单中的所有数据。这就是我到目前为止所做的,为我糟糕的英语道歉,我是一个学习者,你们是最好的。
HTML:
<form action="" method="POST">
<div class="modal-body">
<div class="repeater-default">
<div data-repeater-list="sectiuni" class="col-md-12">
<div data-repeater-item="">
<div class="row">
<div class="form-group mb-1 col-sm-12 col-md-4">
<label for="email-addr">Sectiunea</label>
<br>
<input type="text" class="form-control" id="sectiunea" name="sectiunea[]" placeholder="Introdu sectiunea">
</div>
<div class="form-group mb-1 col-sm-12 col-md-2">
<label for="pass">Nr.Dansatori</label>
<br>
<input type="number" class="form-control" name="nrdansatori[]" id="nrdansatori" placeholder="Numarul dansatorilor">
</div>
<div class="skin skin-flat form-group mb-1 col-sm-12 col-md-2">
<label for="tel-input">Timp piesa</label>
<br>
<input class="form-control" type="text" name="timpsectiune[]" id="timpsectiune" placeholder="2:34">
</div>
<div class="form-group mb-1 col-sm-12 col-md-2">
<label for="pret">Pret</label>
<br>
<input class="form-control" type="number" name="pretsectiune[]" id="pretsectiune" placeholder="250">
</div>
<div class="form-group col-sm-12 col-md-2 mt-1">
<button type="button" class="btn btn-danger" style="margin-top: 12px;" data-repeater-delete=""> <i
class="feather icon-trash"></i> Delete</button>
</div>
<hr>
</div>
</div>
</div>
<div class="form-group overflow-hidden">
<div class="col-12">
<button type="button" data-repeater-create="" class="btn btn-primary col-sm-12 btn-sm">
<i class="feather icon-plus"></i> ADD ONE MORE SECTION
</button>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<input type="reset" class="btn btn-secondary" data-dismiss="modal" value="Close">
<input type="submit" id="save" class="btn btn-success" value="Save">
</div>
</form>Javascript:
$("#save").click(function(e) {
e.preventDefault();
var sectiunea = $("#sectiunea").val();
var nrdansatori = $("#nrdansatori").val();
var timpsectiune = $("#timpsectiune").val();
var pretsectiune = $("#pretsectiune").val();
var infos = {
sectiunea : sectiunea,
nrdansatori : nrdansatori,
timpsectiune: timpsectiune,
pretsectiune: pretsectiune
};
$.ajax({
type: 'POST',
data: infos,
url: 'sql-insert.php',
success: function(data) {
if (data === TRUE) {
alert('Success');
} else {
alert("ERROR");
}
}
});PHP:
if(isset($_POST['sectiunea'])) {
$table = "`".RDCP_PREFIX."sectiuni`";
$data = array(
'sectiune' => trim($db->escape($_POST['sectiunea'])),
'max_d' => trim($db->escape($_POST['nrdansatori'])),
'timp' => trim($db->escape($_POST['timpsectiune'])),
'pret' => trim($db->escape($_POST['pretsectiune']))
);
foreach ($data as $name) {
$db->insert($table, $data);
}
}
public function insert($table,$fields) {
$field = array_keys($fields);
$single_field = implode(",", $field);
$val = implode("','", $fields);
$stmt = $this->conn->prepare("INSERT INTO ".$table."(".$single_field.") VALUES('".$val."')");
$stmt->execute();
if($stmt === true) { echo true; }
else { echo false; }
}发布于 2021-05-12 04:24:48
您的insert函数可能是问题所在。您正在将每个列插入到它自己的记录中,您还误用了准备好的语句。您应该像这样编写函数(下面的伪代码):
public function insert($table, $array) {
$fields = array_keys($array);
$stmt = $this->conn->prepare('INSERT INTO ' . $table . '(' . implode(",", $fields) .') VALUES (' . implode(',', array_fill(0, count($fields), '?')) .')');
$stmt->bind_param(implode('', array_fill(0, count($fields), 's')), ...array_values($array));
$stmt->execute();
if($stmt === true) {
echo true;
} else {
echo false;
}
}有关潜在的bind_param问题,请参阅https://stackoverflow.com/a/50654198/3783243。
然后这样叫它:
if(isset($_POST['sectiunea'])) {
$table = "`".RDCP_PREFIX."sectiuni`";
$data = array(
'sectiune' => trim($_POST['sectiunea']),
'max_d' => trim($_POST['nrdansatori']),
'timp' => trim($_POST['timpsectiune']),
'pret' => trim($_POST['pretsectiune'])
);
$db->insert($table, $data);
}发布于 2021-05-12 09:16:00
我想我已经做到了这一点,并且正在使用bcz jquery repeater来做像这样的名称:
if(!empty(isset($_POST))) {
$table = "`".RDCP_PREFIX."sectiuni`";
foreach($_POST as $key => $value){
for ($i=0; $i < count($value); $i++) {
$data = array(
'sectiune' => $value[$i]['sectiunea'],
'max_d' => $value[$i]['nrdansatori'],
'timp' => $value[$i]['timpsectiune'],
'pret' => $value[$i]['pretsectiune']
);
$db->insert($table, $data);
}
}
} https://stackoverflow.com/questions/67479954
复制相似问题