Reputation: 3276
I want to write the array values into my database like:
"UPDATE tbl SET $fieldname = $fieldvalue WHERE id=$recid"
and I get this array from $_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] => [email protected]
)
[3] => Array
(
[recid] => 4
[vorname] => Maria
[nachname] => Maier
)
[4] => Array
(
[recid] => 5
[vorname] => Werner
[nachname] => Rock
)
)
When I do it with this foreach
loop, the recid
get's also as field name - but this should not happen.
foreach ($_POST['changed'] as $SubArray)
{
foreach ($SubArray as $key => $value)
{
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
}
}
Upvotes: 0
Views: 100
Reputation: 14501
Try this:
foreach ($_POST['changed'] as $SubArray) {
foreach ($SubArray as $key => $value) {
if ($key === 'recid') continue;
$sql = "UPDATE kunden SET $key = $value WHERE id = '$SubArray[recid]'";
}
}
This code is not for production. You must escape each $_POST
variable or use PDO placeholders.
Update (PDO placeholders example):
$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
}
}
}
Upvotes: -1
Reputation: 341
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
}
Upvotes: 2
Reputation: 14523
Just use:
if ($key === 'recid') continue;
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id='".$SubArray['recid']."'";
instead of
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
Upvotes: 0