0

次のように配列値をデータベースに書き込みたいとします。

"UPDATE tbl SET $fieldname = $fieldvalue WHERE id=$recid"

そして、私はこの配列をから取得します$_POST['changed']:

[changed] => Array
        (
            [0] => Array
                (
                    [recid] => 1
                    [vorname] => Walter
                    [nachname] => Bauer
                )

            [1] => Array
                (
                    [recid] => 2
                    [vorname] => Michael
                )

            [2] => Array
                (
                    [recid] => 3
                    [vorname] => Peter
                    [nachname] => Highler
                    [email] => p.highler@aol.com
                )

            [3] => Array
                (
                    [recid] => 4
                    [vorname] => Maria
                    [nachname] => Maier
                )

            [4] => Array
                (
                    [recid] => 5
                    [vorname] => Werner
                    [nachname] => Rock
                )

        )

このforeachループでそれを行うとrecid、フィールド名としても取得されますが、これは発生しないはずです。

foreach ($_POST['changed'] as $SubArray)
{
    foreach ($SubArray as $key => $value)
    {
        $sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
    }       
}
4

3 に答える 3

2
foreach ($_POST['changed'] as $SubArray)
{
    $id = $subArray['recid'];
    $values = array();

    foreach ($SubArray as $key => $value)
    {
        if($key != 'recid')
        {
            $values[] = $key . '=' . $value;                
        }
        $sqlValues = implode(', ', $values);
    }

    $sql = "UPDATE kunden SET " . $sqlValues . " WHERE id='" . $id . "'";
    //execute query here
}
于 2013-09-02T17:15:33.357 に答える
0

使用するだけです:

if ($key === 'recid') continue;
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id='".$SubArray['recid']."'";

それ以外の

$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
于 2013-09-02T17:14:58.580 に答える
-1

これを試して:

foreach ($_POST['changed'] as $SubArray) {
    foreach ($SubArray as $key => $value) {
        if ($key === 'recid') continue;

        $sql = "UPDATE kunden SET $key = $value WHERE id = '$SubArray[recid]'";
    }    
}

このコードは本番用ではありません。$_POST各変数をエスケープするか、PDO プレースホルダーを使用する必要があります。

更新(PDO プレースホルダーの例):

$dsn = 'mysql:dbname=kunden;host=127.0.0.1';
$enc = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'");
$dbh = new PDO($dsn, $user, $pass, $enc);

foreach ($_POST['changed'] as $SubArray) {
    foreach ($SubArray as $key => $value) {
        if ($key === 'recid') continue;

        $sql  = "UPDATE kunden SET $key = :value WHERE id = :recid";
        $stmt = $dbh->prepare($sql);

        try {
            $stmt->execute(array(':value' => $value, ':recid' => $SubArray['recid']));
        } catch (PDOException $e) {
            // error processing
        }
    }
}
于 2013-09-02T17:12:16.463 に答える