PHP POST通过AJAX循环通过javascript发送对象文字

时间:2013-04-30 01:43:58

标签: php mysql ajax post javascript-objects

嘿,我通常会通过这样做抓住 ajax发送的js对象文字

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

但现在我有一个问题,我似乎无法找到解决方案。

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

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

现在 chkXX 可以是0-19之间的任何数字(每页20个复选框)。我发送的信息很好,我的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 else 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");

2 个答案:

答案 0 :(得分:1)

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

UPDATE userAccount SET Accept = 1 WHERE ID in $idCollection

其中$ idCollection将检查所有ID,用逗号和括号分隔,如下所示:

(1, 2, 3)

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

希望有所帮助

答案 1 :(得分:0)

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());