2013-04-30 66 views
0

嘿,我通常抓住AJAX发送JS做这个物件常PHP POST通过JavaScript发送对象字面

$_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']; 

我可以做很多的如果比其他来检查,看看是否每个人都有数据,但有一定是这样做的更好的办法?

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

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

谢谢!

UPDATE

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

回答

1

您可以在ID的一个在SQL子句中传递。所以,举例来说,你将有:

UPDATE userAccount SET Accept = 1 WHERE ID in $idCollection 

其中$ idCollection将所有的ID检查,用逗号和括号内分离出来的,就像这样:

(1, 2, 3) 

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

希望帮助

+0

你可以再次检查我的OP,我只是用新的代码更新它,看看我是否在正确的轨道上。 – StealthRT 2013-04-30 02:02:20

+0

是的,你是!让我知道这是否可行 – 2013-04-30 02:06:08

+0

此外,请确保您添加了正确的ID,因为您正在遍历整个$ _POST数组,您可能会得到您不期望的值 – 2013-04-30 02:07:16

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

谢谢你的回复,埃米尔! – StealthRT 2013-04-30 14:32:02