0
プロフィールページ、編集機能、編集機能があります。プロフィール更新時にプロフィールデータが存在するかどうかチェック
プロフィールページ:
if (isset($_POST['edit']) && $_POST['edit'] === 'Edit') {
$errorMsgs = $user->validateUpdate($_POST);
if (empty($errorMsgs)) {
$id = $_POST['id'];
$username = $_POST['username'];
$email = $_POST['email'];
$user->updateProfile($username,$email,$id);
echo 'edited';
exit;
}
foreach ($errorMsgs as $msg) {
echo '<li>'. $msg. '</li>';
}
}
while ($row = mysqli_fetch_assoc($result)) {
?>
<form action="<?php $_SERVER['PHP_SELF'];?>" method="POST">
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
Username<br>
<input type="text" name="username" value="<?php echo $row['username']; ?>" /><br>
Email<br>
<input type="text" name="email" value="<?php echo $row['email']; ?>" /><br>
<input name="edit" type="submit" value="Edit"/>
</form>
<?php }
?>
更新機能:
function updateProfile($username,$email,$id){
$con = new Core();
$con->connect();
$username = trim(strtolower($username));
$username = str_replace(' ', '', $username);
$sql = 'UPDATE users SET username = ?, email = ? where id = ?';
if ($stmt = $con->myconn->prepare($sql))
{
$stmt->bind_param('ssi', $username, $email, $id);
$stmt->execute();
$stmt->close();
}
else{
die("errormessage: " . $con->myconn->error);
}
}
チェック機能:
function validateUpdate(array $userDetails)
{
$con = new Core();
$con->connect();
$errmsg_arr = array();
foreach($userDetails as $key => $value) {
if (empty($value)) {
$errmsg_arr[] = ucwords($key) . " field is required";
}
}
if (!empty($userDetails['edit'])) {
if (!empty($userDetails['email']) && !filter_var($userDetails['email'], FILTER_VALIDATE_EMAIL)) {
$errmsg_arr[] = "the provided email is not a valid email address";
}
$sqlu = "SELECT username FROM users WHERE username = ?";
if($stmt = $con->myconn->prepare($sqlu)){
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
}
if($stmt->fetch() > 0){
$errmsg_arr[] = "Username already exists!";
$stmt->close();
}
$sqle = "SELECT email FROM users WHERE email = ?";
if($stmt = $con->myconn->prepare($sqle)){
$stmt->bind_param('s', $_POST['email']);
$stmt->execute();
}
if($stmt->fetch() > 0){
$errmsg_arr[] = "Email already exists!";
$stmt->close();
}
}
return $errmsg_arr;
}
すべてが完璧に動作します。しかし、この小切手には欠陥があります。
誰かがプロフィールに移動します。 人物が詳細を編集しようとしています。コードエコーは「正常に編集されました」。
しかし、すべての詳細ではなく電子メールのみを編集しようとすると、「ユーザー名の値」が既に存在するというエラーメッセージが表示されます。
私の質問:私はそれが編集されていない場合、ユーザー名の値をチェックしないようにする方法はありますか?または電子メールの価値?
ありがとうございます!
これが助けになりました!私は全くこのように考えなかった。ありがとうございました! –
いいえ問題ありません^^私は助けになることができてうれしい!あなたのプロジェクトの残りの部分で幸運を祈って、私は他の問題に遭遇したら助けてうれしいです。 P.S.私はちょうど用意されたステートメントを使用してそれらのセッション変数を追加するべきであることに気がつきました(私がここで行ったようにそれを連結しません)が、あなたはすでにそれを正しく実装していると仮定しています:) – Jester
そうです。私はPDOの仕事をしています。 –