[英]How to submit multiple array checkbox with html forms
我正在嘗試使用復選框表單提交多個數組,但我現在只能提交一個數組,這是我到目前為止所擁有的
在這個例子中,我使用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 </th>
<th>Rank </th>
<th>Condition </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']
數組聯系起來,這樣一切都會再次匹配。
編輯
上面創建密鑰的方式並不好,回想起來,這是錯誤的方法。
為了演示正確的方法,讓我們假設我們有以下數組,簡單明了:
$books = array(
10001 => 'good',
10002 => 'new',
10003 => 'new',
10004 => 'good'
);
我們需要做的是占用與每本書相關的兩個輸入,這意味着我們需要一組可以匹配的鍵/值對。 這聽起來像是一個陣列給我。 但與上面的示例不同,密鑰應該與數據無關 - 它們不需要任何意義,因為我們想要的只是數據。
我們需要做的是明確指定每個單獨的鍵(沒有堆棧樣式的數組推送)並使密鑰與它們相關的數據不可知。
我們做得到:
$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
}
我對你的要求有點困惑,但我想我可以為你簡化這個。 我不知道你是如何生成隱藏字段的值,它們是硬編碼的嗎? 無論如何,如果簡化,這個系統會更好。
試試這個....
這將結合數字和條件的信息,然后將它們分割在后端進行處理。 這樣,信息就會同時傳遞。
<tr>
<td>
<input type='checkbox' name='delete[]' value='100001-good' />
</td>
</tr>
<tr>
<td>
<input type='checkbox' name='delete[]' value='100002-new' />
</td>
</tr>
<tr>
<td>
<input type='checkbox' name='delete[]' value='100003-new' />
</td>
</tr>
<?php
if(isset($_POST['deleteInventoryBook'])){
if(isset($_POST['delete']) && is_array($_POST['delete'])){
foreach($_POST['delete'] as $checkbox){
$checkbox = explode('-', $checkbox);
echo $checkbox[1];
echo '<br />';
echo $checkbox[0];
echo '<br />';
}
}else{
echo "No values have been set";
}
}
?>
同樣,我不知道這是否有用,因為我對你究竟想要實現的目標有點誤解,但我希望它有所幫助。
您將不得不找到一種創造性的方法將多個隱藏字段作為數組傳遞給PHP處理程序,或者更改收集數據的方式。 “序列化”陣列似乎是最好的選擇。
這個StackOverflow答案確實概述了你可以做什么,並且仍然應該匹配你的腳本的行為。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.