我在提交表单(或路由设计)中遇到问题,该表单根据id删除N表。 我创建了一个使用索引php文件的简单路由函数:
function relativeRouter ($controller,$action,$query_data=""){
$param = is_array($query_data) ? http_build_query($query_data) : "$query_data";
$url = "index.php?controller=$controller&action=$action&$param";
return $url;
索引使用controller =?& action =?创建控制器实例。 它还将POST / GET参数绑定到方法参数(在数组中,$ params)。 (即时通讯已经知道不会直接使用超级全局)
$params=array();
if(isset($_GET['controller'])&&isset($_GET['action'])){
$c = $_GET['controller'];
$a = $_GET['action'];
// add all query string additional params to method signature i.e. &id=x&category=y
$queryParams = array_keys($_GET);
$queryValues = array_values($_GET);
for ($i=2;$i<count($queryParams);$i++) {
$params[$queryParams[$i]] = $queryValues[$i];
}
if ($_POST) {
print_r($_POST); // THIS CONTAINS ONLY 1 PASSED ID.
// add all query string additional params to method signature i.e. &id=x&category=y
$queryParams = array_keys($_POST);
$queryValues = array_values($_POST);
for ($i=0;$i<count($_POST);$i++) {
$params[$queryParams[$i]] = $queryValues[$i];
}
}
include_once APP_ROOT."/controller/$c.php";
$controller = new $c();//CombustibiliController
$controller->$a($params);//inserimento
} else {
//attiva controller predefinito
$controller = new Admin();
$controller->index();
}
路由在具有不同HTML表单项名称的表单中运行良好。 (name ='')但我通过传递一个用于多次复选框删除的id数组来解决问题。
$ _POST到达时只有一个项而不是多个项:
Array ( [ids] => 110 )
虽然使用插入形式没有麻烦:
Array ( [title] => 435 [desc] => 5534 )
这里是表格视图:
<?php
if (isset($products)) {
$action = relativeRouter("ProductsController", "deleteProducts");
$html="<form id='multiselect' action='$action' method='POST'>\n";
foreach ($products as $product) {
$html.= "<tr>\n"
."<td><input type='checkbox' name='ids' value='".$product->id."'></td>\n"
."<td>".$product->id."</td>\n"
."<td>".$product->title."</td>\n"
."<td>".$product->description."</td>\n"
."<td>".$product->image."</td>\n"
."</tr>\n";
}
$html.="</form>\n";
echo $html;
}
?>
这里是从按钮运行表单的jQuery:
<script>
function send() {
$('#multiselect').submit();
$('.play-confirm-modal').modal('hide');
}
$('.play-crud-delete').on('click',function(){
var checked = $( "input:checkbox:checked" ).length;
if(checked>0) {
$('.play-confirm-modal').modal('show');
console.log(checked);
} else {
alert("No selected checkboxes");
}
});
</script>
希望有人可以提供帮助。 Firefox网络显示模块参数,但POST只包含其中一个,总是最后一个。
答案 0 :(得分:1)
<input type='checkbox' name='ids[]' value='".$product->id."'>
替换它并检查。名称应包含array operator
multivalue