2010-12-06 10 views
0

私はこのようなことをしようとしていますので、投稿エントリをすべて入力する必要はありません。私はこれを動作させるように見えることはできません。

編集:いくつか変更が加えられました。

foreach($_POST as $key => $value) 
{ 
    $key = "'".mysql_real_escape_string($key)."'"; 
    $value = "'".mysql_real_escape_string($value)."'"; 
    $qstring = "UPDATE load_test SET ".$key."=".$value." WHERE Id = '".$_POST['id']."'"; 
     mysql_query($qstring); 
} 
+0

少年を消毒され、あなたが受け入れられたコードとトラブルに確かです。 –

答えて

0
foreach($_POST as $k=>$v){ 
     @$select.=" `".mysql_real_escape_string($k)."` = '".mysql_real_escape_string($v)."',"; 
} 
$select = rtrim($select,','); 
$select = "UPDATE load_test SET".$select." WHERE id=".$_POST['id']; 
mysql_query($select) or die(mysql_error());; 

これはより速くあなたがする必要があるしたい以前のもの、次にたくさんある試みるより、その後1クエリ およびi「はdoesnの列を更新しようとしているので、それはキーを逃れるために十分安全だと思うことを、他のあなたがどこにいても逃げることはできません。注射をエスケープしようとすると、あなたはそれを守るでしょう。数字が数字であることを確認してください。

+0

私はちょうどそれに気づいたUPDATEの$ key = $ valueのような何かをしなければならないのですか?それはテーブルに$値を配置する場所を知りません – acctman

+0

ええ、おそらくキーが列名と同じものである場合 – Breezer

+0

私はそれを答えを更新しました – Breezer

3

ここでやろうとしていることは信じられないほど危険です。

// List the fields that may be updated here 
$expectedFields = array('fielda', 'fieldb'); 

// Updated values to be stored here 
$updates = array(); 

// Generate the update strings 
foreach ($_POST as $key => $value) { 
    if (in_array($key, $expectedFields)) { 
     $updates[] = "`$key` = '".mysql_real_escape_string($key)."'"; 
    } 
} 

// Do all updates at once 
$qstring = "UPDATE load_test SET " . join(', ', $updates) . " WHERE Id = '" . mysql_real_escape_string($_POST['id']) . "'"; 
mysql_query($qstring); 

これは

  • すべての更新は1つのクエリで起こるのではなく、彼らがしている場合、彼らは唯一受け入れられているようフィールドごとに1つの
  • フィールドは、検証(および消毒されているいくつかのことを改善
  • )有効なリストにID値も
+0

それは行を更新する方法ではないので動作しません – Breezer

+0

はそこにありますそれを行うための安全な方法?または、必要なフィールド名と投稿をすべて入力するより良い方法です。時々私は20フィールドのように更新しなければならず、ポスト値とフィールド名が更新のために正しい場所にあることを確認しなければならないことがあります。 – acctman

+0

@Breezer - UPDATEを生成します。load_test SET 'somefield' = 'some value' WHERE Id = 'some key'、あなたが更新するのと同じです。だからそれがあなたのダウンフォートだったら、答えをもう一度読んで考えてみて、あなたの投票を修正してください。 –

関連する問題