2014-10-21 4 views
0

Я сделал страницу на PHP, чтобы разрешить пользователю изменять его данные до сих пор, все это работает, и так было сделано по электронной почте ( Так что я в основном пытаюсь сделать, разрешите пользователь может иметь возможность изменять свои данные (пароль) (электронная почта) и т. д. Сейчас пользователь должен изменить все свои данные, чтобы изменить одну конкретную вещь. Я хочу, чтобы пользователь мог изменить свое письмо, не меняя его парольПараметры обновления PHP-обновления

Мой код:

<title>Honda |</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 
<link href='http://fonts.googleapis.com/css?family=Julius+Sans+One' rel='stylesheet' type='text/css'> 
<link href="../css/style.css" rel="stylesheet" type="text/css" media="all" /> 



<?php 
session_start(); 



$username = $_SESSION['sess_user']; 

echo '<div class="search1"><h2>'.$username.'</h2></div>'; 


if (isset($_SESSION['sess_user'])) 
{ 
//user is logged in 

if (isset($_POST['submit'])) 
{ 
//start changing password 
//check fields 

$oldpassword = md5($_POST['oldpassword']); 
$newpassword = md5($_POST['newpassword']); 
$email = $_POST['email']; 


$repeatnewpassword = md5($_POST['repeatnewpassword']); 


//check password against db 
include('../includes/config.php'); 

$queryget = mysql_query("SELECT password FROM login WHERE username='$username'") or die ("change password failed"); 
$row = mysql_fetch_assoc($queryget); 
$oldpassworddb = $row['password']; 

//check passwords 
if ($oldpassword==$oldpassworddb) 
{ 
//check two new passwords 
if ($newpassword==$repeatnewpassword) 
{ 
//successs 
//change password in db 

$querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE username='$username'"); 
$querychange = mysql_query("UPDATE login SET email='$email' WHERE username='$username'"); 
die("<div class='successmate'>Your password has been changed. <a href='index2.php'><br><br> Return</a></div>"); 
} 
else 
die("<div class='results'>New password doesn't match!</div>"); 

}else 
die("<div class='results'>Old password doesn't match!</div>"); 

} 
else 
{ 

echo" 
<form class='search1' action='changepassword.php' method='POST'> 
<label>Current Password:</label> <input type='password' id='password' name='oldpassword'><p> 
<label>New Password:</label> <input type='password' id='password' name='newpassword'><p> 
<label>Repeat New Password:</label> <input type='password' name='repeatnewpassword'><p> 
<label>Email:</label> <input type='email' name='email'><p> 
<input type='submit' name='submit' class='submit' value='submit'><br><br><br> 
<h2><p><a href='index2.php'>Back</a></p></h2> 
</form> 
"; 
} 

}else 
die ("You must be logged in to change your password"); 


?> 

<img src="../images/main.jpg"> 
+1

Сделать отдельные функции для изменения электронной почты, пароля и ... и проверить в начале, какие поля пустые, а какие должны быть изменены. – Gudgip

+0

'md5' еще не считался надежным алгоритмом хэширования на протяжении десятилетия. И я также советую вам солить ваши хеши. [Это очень хорошая статья об этом.] (Http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right) – Alternatex

ответ

1

Обычно, чтобы изменить пароль, необходимо сначала создать пустые поля для них, чем с. если они заполнены, если да, проверьте, действительны ли и обновляют пароль, иначе просто обновите какие-либо другие данные.

[html] 
<input type="password" name="password" value=""/> 
<input type="password" name="password_repeat" value=""/> 

[php] 
$updates = []; 
if (!empty($_POST['password']) && !empty($_POST['password_repeat'])) { 
    /* do validation */ 
    $pswd = sha1($saltString . $_POST['password']); 
    $updates['password'] = "password = `{$pswd}`"; 
} 

unset($_POST['password']); 
unset($_POST['password_repeat']); 

$sql = "UPDATE `tbl_table` SET "; 

foreach ($_POST as $columnName => $value) { 
    /* mind SQL Injection! */ 
    $updates[$columnName] = "{$updates} = `{$values}`"; 
} 

if (!empty($updates)) { 
    $sql .= implode(', ', $updates); 
    mysql_query($sql); 
} 
+0

Возможно, я неправильно сформулировал свой пост, сменил пароль и что не работает нормально, просто электронная почта не – Ariana

+0

@Ariana Я думаю, это потому, что вы делаете 'die()' при обновлении пароля, так что другой код не выполняется. – Justinas

+0

Я обновил свой код выше, и все работает, но я просто пытаюсь разрешить пользователю ТОЛЬКО иметь возможность изменить его электронную почту, чтобы он/она не изменяли свой пароль, чтобы изменить свой адрес электронной почты. – Ariana

0
  1. Показать предварительно заполненную форму первого
  2. Когда форма размещена, проверьте наличие обновлений в каждой области
  3. Update запись в БД отправки только обновленные поля

PS Для пароля вам, возможно, придется проверить хешированную версию по сравнению с той, что хранится в БД (в основном MD5)

Смежные вопросы