gpt4 book ai didi

php - 根据用户交互的需要处理网页、服务器和数据库之间的 div 克隆

转载 作者:行者123 更新时间:2023-11-30 21:42:09 25 4
gpt4 key购买 nike

我为用户编写了这个脚本来克隆 div="test hidden"根据需要多次。在每个 div 内有一些用户输入,class="user_input1" ,以及一些复选框 class="user_input2" .此脚本有两个问题:

  1. 对于每个div="test hidden",输入应该被系统地插入到数据库中被克隆和追加。例如,如果有三个具有不同值的 input1,则应为每个值创建三行。这个问题已经解决并且工作得很好。但是现在第二个问题:

  2. 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] =>
)

最佳答案

由于字符限制,我将在这里发布我的评论摘要。

我想出了一个解决你的问题的方法,但它不是很漂亮,我不能保证它适用于所有情况,因为我仍然没有正确理解你不想做什么 - 但我希望它会仍然帮助你。

我生成了 3 个静态数组来模拟您的输入和复选框:

    $val1 = array(1,2);
$val2 = array("Hello","World");
$check = array(1,3,1,2);
$check2 = array();

然后我生成一个新的输出数组 $check2 并根据您的要求格式化它:

    $x = -1;
foreach($check as $k=>$tmp)
{
if($k % count($val1) == 0)
{
$x++;
}

if(!isset($check2[$x])) $check2[$x] = "";
$check2[$x] .= $tmp.",";
}

foreach($check2 as $k=>$tmp)
{
$check2[$k] = substr($tmp,0,-1);
}

$check2 的输出是:

  array(2) {
[0]=>
string(3) "1,3"
[1]=>
string(3) "1,2"
}

您可以对其进行json_encode,然后再进行查询。我真的希望这对你有帮助,请让我知道

关于php - 根据用户交互的需要处理网页、服务器和数据库之间的 div 克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com