php - 发送路由 POST 参数的问题

标签 php jquery forms http post

我在提交表单(或路由设计)时遇到问题,该表单会根据 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=? 创建 Controller 实例。 它还将 POST/GET 参数绑定(bind)到方法参数(在数组 $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 )

这里是表格 View :

   <?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 仅包含其中一个,始终是最后一个。

最佳答案

<input type='checkbox' name='ids[]' value='".$product->id."'>

替换它并检查。名称应包含 array operator对于 multivalue

关于php - 发送路由 POST 参数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398236/

相关文章:

Jquery.validate - 一页 - 多个表单,一个提交正常,其他不提交

php - 如何在 PHP 中使用 SimpleXMLElement 生成命名空间前缀的 xml 元素

php - centos如何在浏览器中打开HTML文件?

PHP 数组到 JavaScript

jquery - 如何在rails中的数据表中发送参数

javascript - 自动完成表单中的必填输入字段

php - 找不到对象!在此服务器上找不到请求的 URL。未访问 PHP 文件

php - 从 MySQL 获取汉字

javascript - Angular JS ng-repeat以垂直分割格式排列

jquery - 如何在 Google Gadget API 中调用 jQuery