0

複数の行を更新しようとしているので、誰かが私を正しい方向に向けることができるかどうか疑問に思っていますが、何らかの理由で、更新を行うたびに、変数id_employeeがすべての行に同じ値で設定されます..それが私が理解したことです$_POSTをvar_dumpedしたとき。残りのフィールドは問題ありません。これが私のコードの完全なビューです。http://pastie.org/5478920、これも私がvar_dumphttp://pastie.org/5478980のときに得られるものです

    $query = "update project_staff
    set
    id_employee=?
    where
    id_project=?
    and
    id_projectemployee=?
    ";

    $stmt = $this->dbh->prepare($query);

    for ($i = 0; $i < count($_POST['id_employee']); $i++){

    $employee = $_POST['id_employee'][$i];

    $stmt->bindValue(1, $employee, PDO::PARAM_INT);
    $stmt->bindValue(2, $_POST["id"], PDO::PARAM_INT);
    $stmt->bindValue(3, $_POST["idstaff"], PDO::PARAM_INT);

    $stmt->execute();

    }

    echo("Project" . " " . $_POST["nom"] . " ". "has been updated");
4

1 に答える 1

1

バインドパラメータを明示的なデータ型に設定してPDO::PARAM_INTいますが、FROM$_POSTの値は常に文字列です。

POST入力を変更して検証し、INT最初に変更するINTか、を使用する必要がありますPDO::PARAM_STR

//アップデート

コードを見て、where句の値を$ _POST ['id'] AND $_POST["idstaff"]の内容に設定します。したがって、foreachを介したすべての実行で、同じ値を要求しています。したがって、$ employeeは実行ごとに更新されますが、where句は常に同じです。これは次のようになります。

//example
//$_POST['id'] = 20;
//$_POST['idstaff'] = 40;
//$_POST['id_employee'][0] = 1;
//$_POST['id_employee'][1] = 2;
//$_POST['id_employee'][2] = 3;

//run 1
$employee = $_POST['id_employee'][0]; //1
update project_staff set id_employee=1 where id_project=20 and id_projectemployee=40

//run 1
$employee = $_POST['id_employee'][1]; //2
update project_staff set id_employee=2 where id_project=20 and id_projectemployee=40

//run 1
$employee = $_POST['id_employee'][2]; //3
update project_staff set id_employee=3 where id_project=20 and id_projectemployee=40

したがって、実行するたびに以前の変更を上書きします。

于 2012-12-04T14:24:11.400 に答える