0

現在、自分のサイトでユーザー プロファイルの更新ページを作成しようとしています。以下のコードは、ユーザーがすべての情報を更新した場合は正常に機能しますが、フィールドを省略した場合はテーブルに空白のレコードが挿入されます。

現在、ユーザーがフィールドを空白のままにした場合にこの問題を回避するために、空白のフィールドを置き換えて、$_SESSION['user']['field']現在のデータを再挿入するだけです。

これが現時点での私のphpです

<?php
session_start();
if($_SESSION['uname']) {
$logged_in=true;
} else {
$logged_in=false;
}
include_once("../connection/conn.php");

if(isset($_POST['update'])) {

if($_POST['firstname']){ $firstname = $_POST['firstname']; }
else { $firstname = $_SESSION['uname']['firstname']; }

if($_POST['lastname']){ $lastname = $_POST['lastname']; }
else { $lastname = $_SESSION['uname']['lastname']; }

if($_POST['email']){ $email= $_POST['email']; }
else { $email = $_SESSION['uname']['email']; }

$id = $_SESSION['uname']['id'];

$query = "UPDATE users SET firstname=?, lastname=?, email=? WHERE id=? ";

$results = $condb->prepare($query);

$results->execute(array($firstname, $lastname,$email,$id));

if($results) {
echo "updated";
}
}

?>
4

2 に答える 2

2
UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...

これにより、MySQL への空のエントリをチェックするジョブがサブスクライブされ、フィールドは空の値の代わりに以前の値を使用します。これを機能させるには、値を 2 回渡す必要がありますexecute()。それは基本的にあなたがやっているのと同じことをしますが、PHP セッションに値を保存する必要はありません。

このアプローチを使用すると、更新コードは次のようになります。

/*
  This block is no longer necessary
if($_POST['firstname']){ $firstname = $_POST['firstname']; }
else { $firstname = $_SESSION['uname']['firstname']; }

if($_POST['lastname']){ $lastname = $_POST['lastname']; }
else { $lastname = $_SESSION['uname']['lastname']; }

if($_POST['email']){ $email= $_POST['email']; }
else { $email = $_SESSION['uname']['email']; }
*/

$query = "
  UPDATE `users`
  SET
    `firstname` = IF(? <> '', ?, `firstname`),
    `lastname` = IF(? <> '', ?, `lastname`),
    `email` = IF(? <> '', ?, `email`)
  WHERE `id` = ?
";

$results = $condb->prepare($query);

$results->execute(array(
  $_POST['firstname'], $_POST['firstname'],
  $_POST['lastname'], $_POST['lastname'],
  $_POST['email'], $_POST['email'],
  $_SESSION['uname']['id']
));

あなたの既存のコードは、ユーザーが単独でシングルを入力するのを止めていたでしょうが0、これはそうではありません - あなたはそれについてもチェックを追加したいと思うかもしれません.

于 2012-08-01T06:52:31.333 に答える
0

フィールド検証を行う必要があります

if($firstname!="" && $lastname!="" && $email!=""){

  $query = "UPDATE users SET firstname=?, lastname=?, email=? WHERE id=? ";
  $results = $condb->prepare($query);
  $results->execute(array($firstname, $lastname,$email,$id));
  if($results) {
   echo "updated";
  }
}
else{
  echo "Fill all the fields!";
}
于 2012-08-01T06:41:08.147 に答える