0

私はこれを持っています:

if(isset($_POST["Submit"])) {
$updatequery = @mysql_query("UPDATE users SET FirstName='".$_POST['firstname']."', LastName='".$_POST['lastname']."', Address='".$_POST['address']."', City='".$_POST['city']."', PostalCode='".$_POST['postalcode']."', HomePhone='".$_POST['homephone']."', AltPhone='".$_POST['altphone']."', HomeWebsite='".$_POST['homewebsite']."', EmailAddress='".$_POST['email']."', Paypal='".$_POST['paypal']."', Alertpay='".$_POST['alertpay']."', Payoneer='".$_POST['payoneer']."' WHERE Username = '".$_SESSION['Username']."'");</i>

残念ながら、ユーザーが自分の情報 (プロフィール ページ) を更新すると、すべてが更新されます。つまり、Paypal の電子メールを空のままにしておくと (既にそこにあるため)、Paypal の電子メールが空で更新されます。

これを解決するにはどうすればよいですか?

4

4 に答える 4

0

UPDATEフィールドをループして、ステートメントを動的に構築します。

ユーザーが値を消去するコーナーケースに注意してください。

于 2012-10-04T19:43:44.027 に答える
0
$sql = '';
if( !empty($_POST['email']) )  //if value is not empty, then update        
      $sql = ", EmailAddress = '{$_POST['email']}'";

次に、クエリで、

 if(isset($_POST["Submit"])) {
 $updatequery = @mysql_query("UPDATE users SET FirstName='".$_POST['firstname']."',     LastName='".$_POST['lastname']."', Address='".$_POST['address']."', City='".$_POST['city']."', PostalCode='".$_POST['postalcode']."', HomePhone='".$_POST['homephone']."', AltPhone='".$_POST['altphone']."', HomeWebsite='".$_POST['homewebsite']."' $sql , ...
于 2012-10-04T19:47:56.890 に答える
0

marc_b が言ったように: SQL インジェクション攻撃に注意してください。次に、次のようなことができます。

UPDATE users 
SET FirstName = case when '$firstname' = '' then FirstName else '$firstname' end, 
    LastName = ...
WHERE Username = $username

空の値で値を上書きしないようにする

于 2012-10-04T19:48:34.220 に答える
0

これは非常に基本的な例であり、ライブ環境でこれを使用することはお勧めしませんが、正しい方向に進むはずです:-

$_POSTまず、列名を変数にマッピングする配列を作成します。例:

$array = array(
  'FirstName' => 'firstname',
  'LastName' => 'lastname',
  'Address' => 'address',
  'City' => 'city'
);

次に、新しく作成したものをループして、次$arrayのように値が$_POST配列に存在するかどうかを確認します。

  $data = array();
  foreach ($array as $key => $value) {
    if (isset($_POST[$value]) && !empty($_POST[$value]) {
      $data[] = $key . '="' . mysql_real_escape_string($_POST[$value]) . '"';
    }
  }

$data作成された配列に注目してください。これはcolumn = "value"データを格納します。$data次に、配列を SQL 文字列に単純化できます。

if (!empty($data)) {
  $strSQL = 'UPDATE tbl_name SET ' . implode(', ', $data) . ' WHERE Username = "' . $_SESSION['Username'] . '"';
}

どちらが出力されますか(いくつかの架空の$_POSTデータを使用):

UPDATE tbl_name SET FirstName="John", LastName="Doe", Address="Some Street", City="Somewhere"

繰り返しますが、このコードをそのまま使用することはお勧めしません。事前にユーザー入力を検証してサニタイズすることが不可欠です!

于 2012-10-04T20:22:43.053 に答える