【问题标题】:PHP POST via AJAX loop through javascript sent object literalPHP POST 通过 AJAX 循环通过 javascript 发送的对象文字
【发布时间】:2013-04-23 20:15:46
【问题描述】:

嘿,我通常通过这样做来获取 ajax 发送的 js 对象字面量

$_POST['called']
$_POST['chk1']
etc etc...

但是现在我遇到了一个我似乎无法找到解决方案的问题。

根据选中的复选框数量,我循环(使用 js)查看所有选中的复选框并将它们添加到最终看起来像这样的 js 对象:

doBulk = {
   called: "Approved",
   chk0: "1789156857",
   chk2: "5134465673753",
   chk3: "234123554646",
   chk10: "25511545542"        
};

现在 chkXX 可以是 0-19 之间的任意数字(因此每页 2​​0 个复选框)。我正在将它发送到我的 PHP 页面,但我不确定如何进行循环以获取更新数据库所需的数据。

$chk1 = $_POST['chk0'];
$chk2 = $_POST['chk1'];
$chk3 = $_POST['chk2'];
$chk4 = $_POST['chk3'];
$chk5 = $_POST['chk4'];
$chk6 = $_POST['chk5'];
$chk7 = $_POST['chk6'];
$chk8 = $_POST['chk7'];
$chk9 = $_POST['chk8'];
$chk10 = $_POST['chk9'];
$chk11 = $_POST['chk10'];
$chk12 = $_POST['chk11'];
$chk13 = $_POST['chk12'];
$chk14 = $_POST['chk13'];
$chk15 = $_POST['chk14'];
$chk16 = $_POST['chk15'];
$chk17 = $_POST['chk16'];
$chk18 = $_POST['chk17'];
$chk19 = $_POST['chk18'];
$chk20 = $_POST['chk19'];

我可以做很多 if than else 来检查每个人是否有数据,但必须有更好的方法吗?

因此,如果我正在执行批量 mySQL 更新,那么我将不得不为 每个 复选框运行查询,我在上面有一个值?是否还有更好的方法来一次更新所有需要的记录?

$result = mysql_query("UPDATE userAccount SET Accept = 1 WHERE ID = " . $chk1 . "");

谢谢!

更新

foreach($_POST as $key => $value)
{
    // $key = CHK1-20 
    // $value = XXXXXXXXX
    $dbBuilder = $value . ", " . $dbBuilder;
}

$dbBuilder = '(' . $dbBuilder . ')';

$result = mysql_query("UPDATE userAccount SET Accept = 1 WHERE ID in $dbBuilder");

【问题讨论】:

    标签: php mysql ajax post javascript-objects


    【解决方案1】:

    您可以在 IN SQL 子句中传入 id。因此,例如,您将拥有:

    UPDATE userAccount SET Accept = 1 WHERE ID in $idCollection
    

    其中 $idCollection 将是检查的所有 ID,以逗号分隔并在括号内,如下所示:

    (1, 2, 3)
    

    对于循环,您可以像在任何其他数组中一样遍历 $_POST 数组,并使用读取的值填充此字符串。

    希望有帮助

    【讨论】:

    • 你能再检查一下我的 OP,我刚刚用新代码更新了它,看看我是否在正确的轨道上。
    • 另外,请确保您添加了正确的 id,因为您正在迭代整个 $_POST 数组,您可能会得到意想不到的值
    【解决方案2】:
    for ($i=1;$i<=20;$i++){
    ${'chk'."$i"}=$_POST["chk"."$i"];
    } 
    

    对于UPDATE,我想你可以像这样使用Mysql create procedure

    $query=mysql_query("CREATE PROCEDURE dorepeat(p1 INT) SET $i = 0; REPEAT SET @i = @i + 1; UPDATE userAccount SET Accept = 1 WHERE ID = ${'chk'."$i"}; UNTIL @i =p1 END REPEAT; END") or (die mysql_error());
    $result=mysql_query("CALL dorepeat(20)") or (die mysql_error());
    

    编辑:也许不使用CREATE PROCEDURE 会更好。

    for ($i=1;$i<=20;$i++){
      ${'chk'."$i"}=$_POST["chk"."$i"];
      $exp.=${'chk'."$i"}.',';
    } 
    $exp=substr($exp,0,-1);
    $exp='('.$exp.')'; 
    
    $query=mysql_query("UPDATE userAccount SET Accept = 1 WHERE ID IN '$exp') or (die mysql_error());
    

    【讨论】:

    • 感谢您的回复,阿米尔!
    猜你喜欢
    • 2011-10-19
    • 2015-12-19
    • 2015-06-14
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多