【发布时间】:2018-06-26 21:41:51
【问题描述】:
我已经为用户编写了这个脚本,可以根据需要多次克隆div="test hidden"。在每个div 中都有一些用户输入class="user_input1",以及一些复选框class="user_input2"。此脚本有两个问题:
对于克隆和附加的每个
div="test hidden",输入应系统地插入到数据库中。例如,如果存在三个具有不同值的 input1,则应使用每个相应的值创建三行。这个问题已经解决并且工作得很好。但现在第二个问题:class="user_input2"中的复选框是根据数据库 1 的内容添加到页面中的。这样用户可以在网页中添加可供选择的测试名称,而无需必须实际修改 html 代码并向 MySQL 数据库添加列。如果选中复选框,则相应测试的 id 将与class="user_input1"的输入一起保存到数据库中。稍后,可以再次调用这些 id 并引用它们相应的测试名称。这些 id 保存为 JSON 文本的一部分,以将选定的测试保存为数据库中同一行的单个条目中的数组,并且应该对每一行都这样做。
这是我的问题:由于 div 的克隆和服务器脚本考虑了多个克隆条目,复选框选择的 id 没有正确插入数据库。如果您进行了三个克隆,则所有三个克隆的复选框 ID 都将插入到每个数据库条目中。我认为它与服务器脚本有关,需要一些嵌套函数,但我是 php 新手,不知道我做错了什么。
请随意使用下面的代码在您的机器上试用。
用于创建数据库 1 和一些条目的 SQL:
CREATE TABLE `envirocare`.`database1` ( `id` INT NULL AUTO_INCREMENT , `checkb` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
INSERT INTO `database1` (`id`, `checkb`) VALUES (NULL, 'test1'), (NULL, 'test2')
用于创建数据库 2 的 SQL:
CREATE TABLE `envirocare`.`database2` ( `id` INT NULL AUTO_INCREMENT , `input1` VARCHAR(255) NOT NULL , `input2` VARCHAR(255) NOT NULL , `checkbox` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
HTML 脚本:
<style>
.hidden {
display: none;
}
</style>
<body>
<button id="add">Add</button>
<div class="test hidden">
<div class="input1">
<label>Input1</label>
<input class="input1" type="text" name="value1[]" value="1" required>
<label>Input2</label>
<input type="text" name="value2[]" required>
<div class="input2">
<table>
<thead>
<tr>
<th>Pick Option</th>
</tr>
</thead>
<tbody>
<?php
if ($resultCheck01 > 0) {
while ($row = mysqli_fetch_assoc($result01)) { ?>
<tr>
<td><input type="checkbox" name="check[]" value="<?php echo $row['id']; ?>"><?php echo $row['checkb']; ?></td>
</tr>
<?php } } ?>
</tbody>
</table>
</div>
</div>
</div>
<form action="server/server.php" method="POST">
<div class="paste">
</div>
<button type="submit" name="insert_res">Submit</button>
</form>
JavaScript:
$(document).ready(function() {
var variable = 0
$("#add").click(function() {
var element = $(".test.hidden").clone(true);
element.removeClass("hidden").appendTo(".paste:last");
variable++;
$(".input1:last").val(variable);
});
});
最后是服务器端:
$sql01 = "SELECT * FROM database1";
$result01 = mysqli_query($conn, $sql01);
$resultCheck01 = mysqli_num_rows($result01);
if (isset($_POST['insert_res'])) {
$n = count($_POST['value1']);
for($i = 0; $i<$n; ++$i) {
$value1 = mysqli_real_escape_string($conn, $_POST['value1'][$i]);
$value2 = mysqli_real_escape_string($conn, $_POST['value2'][$i]);
$encode = json_encode($_POST['check']);
$check = mysqli_real_escape_string($conn, $encode);
$query = "INSERT INTO database2 (input1, input2, checkbox) VALUES ('$value1', '$value2', '$check')";
mysqli_query($conn, $query);
}
header("Location: ../test.php?success");
}
当使用echo "<pre>"; print_r($_POST); die; 时显示如下:
Array
(
[value1] => Array
(
[0] => 1
[1] => 2
)
[value2] => Array
(
[0] => Hello
[1] => World
)
[check] => Array
(
[0] => 1
[1] => 3
[2] => 1
[3] => 2
)
[insert_res] =>
)
所以检查部分应该是这样的:
[check] => Array
(
[0] => 1,3
[1] => 1,2
)
[insert_res] =>
)
【问题讨论】:
-
你能告诉我们
$_POST里面有什么吗? 3个克隆? (echo "<pre>"; print_r($_POST); die;) -
我不确定在我的代码中的何处输入?请您指出正确的方向吗?
-
你可以在
if(isset($_Post['insert_res'])){之后马上做 -
我有一个类似的问题,这个问题的一些答案将不胜感激!!
-
@toffler 请查看更新!
标签: php jquery html mysql json