-2
私はedit.phpを作成しようとしているので、ユーザーはパスワードを変更して電子メール、ユーザー名などの情報を変更できます。アカウント情報を更新する
ユーザー名はセッションユーザーです。ユーザー名が変更された場合は、新しいユーザー名でUPDATE SESSIONが必要です。それは動作しません。どうしてか分かりません。 ありがとうございます。これは、コード个人设定
<?php
require('includes/config.php');
if(!$user->is_logged_in()){ header('Location: login.php'); }
?>
<?php
class info {
}
$username= $_SESSION['username'];
$sql = 'SELECT * FROM users WHERE username = :username';
$query= $db->prepare($sql);
$query->execute(array(
':username' => $username,
));
$query->setFetchMode (PDO::FETCH_CLASS, 'info');
while($r= $query->fetch(PDO::FETCH_OBJ)) {
$email = $r->email;
$namefull = $r->namefull;
$usertype = $r->usertype;
$password = $r->password;
}
if(isset($_POST['submit'])){
if(strlen($_POST['username']) < 3){
$error[] = 'Username deve avere almeno 4 lettere.';
} else {
$stmt = $db->prepare('SELECT username FROM users WHERE username = :username');
$stmt->execute(array(':username' => $_POST['username']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if(!empty($row['username'])){
$error[] = 'Username già in uso.';
}
}
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
$error[] = 'Inserisci una email valida';
} else {
$stmt = $db->prepare('SELECT email FROM users WHERE email = :email');
$stmt->execute(array(':email' => $_POST['email']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if(!empty($row['email'])){
$error[] = 'Email già in uso.';
}
}
if(!isset($error)){
try {
$stmt = $db->prepare("UPDATE users SET (username,email,usertype) VALUES (:username, :email,:usertype) WHERE username='".$username."'");
$stmt->execute(array(
':username' => $_POST['username'],
':email' => $_POST['email'],
':usertype' => $_POST['usertype'],
));
header('Location: edit.php?action=joined');
exit;
} catch(PDOException $e) {
$error[] = $e->getMessage();
}
}
}
?>
このリセットパスワードのためのアクションフォームで、私は2つの形式である。ここ
<?php
if(isset($_POST['submit'])){
if(strlen($_POST['password']) < 3){
$error[] = 'Password deve contenere almeno 4 lettere.';
}
if(strlen($_POST['passwordConfirm']) < 3){
$error[] = 'Conferma password deve contenere almeno 4 lettere.';
}
if($_POST['password'] != $_POST['passwordConfirm']){
$error[] = 'Le password non sono uguali.';
}
//if no errors have been created carry on
if(!isset($error)){
//hash the password
$hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT);
//create the activasion code
$activasion = md5(uniqid(rand(),true));
try {
//insert into database with a prepared statement
$stmt = $db->prepare('INSERT INTO users (username,password,email,active) VALUES (:username, :password, :email, :active)');
$stmt->execute(array(
':username' => $_POST['username'],
':password' => $hashedpassword,
':email' => $_POST['email'],
':active' => $activasion
));
$id = $db->lastInsertId('id');
//send email
$to = $_POST['email'];
$subject = "Cambio password";
$body = "<p>La tua password è stata cambiata!</p>
<p>Amministrazione Dixard</p>";
$mail = new Mail();
$mail->setFrom(SITEEMAIL);
$mail->addAddress($to);
$mail->subject($subject);
$mail->body($body);
$mail->send();
//redirect to index page
header('Location: register.php?action=joined');
exit;
//else catch the exception and show the error.
} catch(PDOException $e) {
$error[] = $e->getMessage();
}
//aggiornare la sessione con la nuova password
}
}
?>
編集reset.phpを作成(変更の電子メール、ユーザ名、ユーザタイプAND)パスワードを変更します。
ユーザー名 「> Tipologiaはアカウント「> メールアドレス 」> サルバ <h2 class="strong-header large-header">Change Password</h2>
<form role="form" action="edit-reset.php" method="post" novalidate>
<div class="form-group">
<label for="password">Password corrente</label>
<input type="password" placeholder="Password" name="password_corrent" id="password" class="form-control" required>
</div>
<div class="form-group">
<label for="password">Nuova Password</label>
<input type="password" placeholder="Nuova Password" name="password" id="password" class="form-control" required>
</div>
<div class="form-group">
<label for="password-repeat">Conferma Nuova password</label>
<input type="password" name="passwordConfirm" id="passwordConfirm"class="form-control" placeholder="Conferma Nuova Password" required>
</div>
<button type="submit" class="btn btn-primary">Cambia Password</button>
</form>
はい新しいユーザー名データで更新セッションが必要です。しかし問題は、ユーザー名と電子メールは変更されないということです。データベースのデータは \t \t $ stmtは= $ DB->( 'usernameは=ユーザーからユーザー名を選択してください:ユーザー名 \t \t AND NOT EXISTS(ID = $ IDをユーザーからユーザー名を選択)')の準備を変更しません。 \t \t $ stmt-> execute(array( ':username' => $ _POST ['username'])); \t \t $行= $ stmt->フェッチ(PDO :: FETCH_ASSOC); \t \t(!空($行[ 'ユーザ名']))であれば{ \t \t \t $エラー[] = 'ユーザー名が存在します。'; \t \t \t} –
1.更新リクエストに問題があると思われます。あなたはこれを見てみる必要があります:http://dev.mysql.com/doc/refman/5.7/en/update.html。 2.以前の検証では、シンプルで現在のユーザーIDを取得してください。 'SELECT id FROM users WHERE username =:username;'を要求し、ユーザ名がまだ使用されていないかどうかを確認しながら、あなたの状態にこのIDを追加してください: 'username username =:username AND id!=:id;' – Schnapse