gpt4 book ai didi

php - 如何使用 html 表单提交多个数组复选框

转载 作者:IT王子 更新时间:2023-10-29 00:21:31 25 4
gpt4 key购买 nike

我正在尝试使用复选框表单提交多个数组,但目前我只能提交一个数组,这是我目前所拥有的

在这个例子中,我提交了一个带有 delete[] 数组的数字数组,这个数组得到了正确处理,我还想提交数组 condition[]这没有得到正确处理,解决此问题的最佳方法是什么?

php代码

$catalog = $database->getInventory();

if($catalog){
$numRows = sizeof($catalog);//count
echo "<b>Book Count:</b> ".$numRows."<br>";

echo "<form method='post' action='inventory.php'>";
echo "<table id='example' class='tablesorter' border='0' cellpadding='0' cellspacing='1'>";
echo "
<thead>
<tr>
<th>ISBN</th>
<th>Title&nbsp;&nbsp;&nbsp;</th>
<th>Rank&nbsp;&nbsp;</th>
<th>Condition&nbsp;&nbsp;</th>
<th><input type='checkbox' name='delete' value='all' /></th>
</tr>
</thead>\n";


foreach($catalog as $elem){
echo "
<tr>
<td>".$elem["isbn"]."</td>
<td>".$elem["title"]."</td>
<td>".$elem["rank"]."</td>
<td>".$elem["condition"]."</td>
<td>
<input type='checkbox' name='add[]'
value='".$elem['isbn']."_".$elem['condition']."_"."' />
</td>
</tr>";
}

echo "</table>";
echo "</form>";
}

示例 html 标记

<form method='post' action='inventory.php'>
<table>
<tr>
<td>
<input type='hidden' name='addInventoryBook' value='1'>
<input type='submit' value='Add' />
</td>
</tr>

<tr>
<td>
<input type='checkbox' name='add[]' value='100001_used' />
</td>
</tr>

<tr>
<td>
<input type='checkbox' name='add[]' value='100001_new' />
</td>
</tr>

<tr>
<td>
<input type='checkbox' name='add[]' value='100003_new' />
</td>
</tr>

</table>
</form>

php函数

function Inventory(){   
if(isset($_POST['addInventoryBook'])){
if(isset($_POST['add']) && is_array($_POST['add'])){
$arr = array();
foreach($_POST['add'] as $checkbox){
$temp = explode("_", $checkbox);

$arr[] = array(
"isbn" => $temp[0],
"condition" => $temp[1],
"sub_condition" => $temp[2]
);
}
$this->addInventoryBook($arr);
}

else{
echo "No values have been set";
}
}


function addInventoryBook($arr){
foreach($arr as $elem){
//if used get sub-category
if($elem['condition']=='used'){
echo $elem['isbn']."-".ucfirst($elem['condition'])
.ucfirst($elem['sub_condition'])."<br>";
}

else if($elem['condition']=='new'){
echo $elem['isbn']."-".ucfirst($elem['condition'])."<br>";
}

}
}

我想要的只是基本上能够将两个数组传递给我的 php 脚本

电流输出

100001
100002
100003

期望的输出

100001   good
100002 new
100003 new

最佳答案

我怀疑您遇到的问题是,只有选中的复选框才会传回服务器,而所有隐藏字段将始终被传递,因此数组会有所不同,键不会对应。

这个问题的解决方案实际上相对简单 - 您只需为 condition 数组指定键,这样您就可以再次匹配这些值。像这样:

HTML:

  <tr>
<td>
<input type='hidden' name='condition[100001]' value='good' />
<input type='checkbox' name='delete[]' value='100001' />
</td>
</tr>

<tr>
<td>
<input type='hidden' name='condition[100002]' value='new' />
<input type='checkbox' name='delete[]' value='100002' />
</td>
</tr>

PHP:

foreach ($_POST['delete'] as $delete) {
$condition = $_POST['condition'][$delete];
// Do stuff
}

这会将 $_POST['condition'] 数组中的值与 $_POST['delete'] 数组联系起来,这样一切都会再次匹配。

编辑

上面创建 key 的方式并不好,回想起来这是错误的方式。

为了演示正确的方法,让我们假设我们有以下数组,既漂亮又简单:

$books = array(
10001 => 'good',
10002 => 'new',
10003 => 'new',
10004 => 'good'
);

我们需要做的是绑定(bind)与每本书关联的两个输入,这意味着我们需要一组可以匹配的键/值对。这对我来说听起来像是一个数组。但与上面的例子不同,键应该与数据无关——它们不需要任何意义,因为我们想要的只是数据。

我们需要做的是明确指定每个键(没有堆栈式数组推送)并使键与它们相关的数据无关。

我们可以这样做:

$i = 0;
foreach ($books as $isbn => $condition) {
echo "
<tr>
<td>
<input type='hidden' name='condition[$i]' value='$condition' />
<input type='checkbox' name='delete[$i]' value='$isbn' />
</td>
</tr>
";
$i++;
}

...然后,当提交表单时,我们可以这样做:

// We still base our code on $_POST['delete'] - because this is the array that
// depends on the user input. This time, though, we'll look at the keys as well
foreach ($_POST['delete'] as $key => $isbn) {
$condition = $_POST['condition'][$key];
// Do stuff
}

关于php - 如何使用 html 表单提交多个数组复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820608/

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