0

ねえ、私は通常、これを行うことでajax 送信された js オブジェクト リテラルを取得します。

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

しかし今、解決策が見つからないように見える問題があります。

選択されているチェックボックスの数に応じて、(js を使用して) ループしてすべてのチェックボックスを表示し、それらを js オブジェクトに追加すると、次のようになります。

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

現在、chkXXは 0 ~ 19 の任意の数値にすることができます (つまり、1 ページあたり 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 . "");

ありがとう!

アップデート

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

2 に答える 2

1

IN SQL 句内で ID を渡すことができます。たとえば、次のようになります。

UPDATE userAccount SET Accept = 1 WHERE ID in $idCollection

$idCollection は、チェックされたすべての ID であり、次のようにコンマで区切られ、括弧で囲まれます。

(1, 2, 3)

ループの場合、他の配列と同じように $_POST 配列を反復処理し、読み取った値をこの文字列に入力できます。

それが役立つことを願っています

于 2013-04-30T01:51:00.487 に答える
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());
于 2013-04-30T04:30:35.227 に答える