2014-06-20 2 views
0

Я простенький с меньшим беглым знанием программирования. У меня есть семейный веб-сайт, где мы делимся фотографиями, видео, файлами и другими ресурсами. На сайте есть простая функция входа в систему, которая начинает сеанс, и я хочу, чтобы у людей была возможность изменить свой пароль после входа в систему.Как сделать смену пароля Работа PHP-скрипта

База данных находится в MySQL и чрезвычайно проста; ID, имя пользователя и столбцы паролей (не зашифрованные или хэшированные вообще).

Когда дело доходит до PHP и MySQL, я стараюсь исследовать примеры других людей и сделать их своими, и с помощью скрипта входа я нашел это очень простым в использовании. Тем не менее, я попытался и попытался найти PHP-фрагмент, который соответствует моему сайту, и позволит пользователям изменять свои пароли и, к сожалению, не удалось при каждой попытке.

Я надеюсь, что кто-то может помочь мне в разработке того, что у меня уже есть, чтобы оно работало на моем сайте, любая помощь будет чрезвычайно оценена!

Моя форма просто просит вошедшего в систему пользователя, чтобы ввести новый пароль, а затем подтвердить тот же пароль:

<form name="frmChange" role="form" class="form-signin" method="POST" action="changepword_script.php"> 

    <div class="form-group"> 

    <label for="InputPassword2">New Password</label> 
    <input type="password" class="form-control" id="InputPassword2" placeholder="New Password" name="newPassword"> 
    <label for="InputPassword3">Confirm New Password</label> 
    <input type="password" class="form-control" id="InputPassword3" placeholder="Confirm Password" name="confirmPassword"> </div> 
    <button class="btn btn-lrg btn-default btn-block" type="submit" value="send">Change it</button> 


     </div> 


     </form> 

И мой PHP скрипт (тоже очень просто) просто нужно проверить, что матч паролей а затем обновить базу данных, если они (я удалил IP-адрес базы данных и заменяются нулями):

<?php 
session_start(); 

if (!(isset($_SESSION['username']) && $_SESSION['username'] != '')) 
{ 
    header("location:login.php"); 
} 

$dbcon = mysql_connect ('000.000.000.00', 'my_db_username', 'my_db_password') 

$password1 = $_POST['newPassword']; 
$password2 = $_POST['confirmPassword']; 

$password1 = mysql_real_escape_string($password1); 
$password2 = mysql_real_escape_string($password2); 

if ($password1 <> $password2){ echo "Your passwords do not match.";} 
{ 
    echo "your passwords do not match"; 
} 
if (mysql_query(UPDATE ebsmembers SET password='$password1' WHERE username='$session[username]')) 
{ 
    echo "You have successfully changed your password."; 
} 

mysql_close($dbcon); 
header("location:login.php"); 

?> 

Опять же, любая помощь будет массово оценили, как я действительно боролся с созданием этой работы!

Большое спасибо, Пол

+0

вам необходимо обновить все. Кажется, что вы пропустили выбранную базу данных. –

ответ

0

Изменилось несколько вещей, где ошибки или не имели смысла для меня. Также переключается на mysqli_*.

<?php 

session_start(); 

if (!(isset($_SESSION['username']) || $_SESSION['username'] == '')) 
{ 
    header("location:login.php"); 
} 

$dbcon = mysqli_connect('000.000.000.00', 'my_db_username', 'my_db_password', 'my_db_name') or die(mysqli_error($dbcon)); 

$password1 = mysqli_real_escape_string($dbcon, $_POST['newPassword']); 
$password2 = mysqli_real_escape_string($dbcon, $_POST['confirmPassword']); 
$username = mysqli_real_escape_string($dbcon, $_SESSION['username']); 

if ($password1 <> $password2) 
{ 
    echo "your passwords do not match"; 
} 
else if (mysqli_query($dbcon, "UPDATE ebsmembers SET password='$password1' WHERE username='$username'")) 
{ 
    echo "You have successfully changed your password."; 
} 
else 
{ 
    mysqli_error($dbcon); 
} 
mysqli_close($dbcon); 

?> 
+0

Спасибо, это очень полезно - однако я получаю следующую ошибку при отправке: Warning: mysqli_real_escape_string() ожидает ровно 2 параметра, 1 заданных в \\ winnas01.winvh1.fasthosts.co.uk \ Domains \ e \ ebsworth.co .uk-1071379550 \ user \ htdocs \ changepword_script.php в строке 11 – Pebbles

+0

О, я забыл добавить дескриптор DB ... обновленный ответ. – bloodyKnuckles

+0

Еще раз спасибо - я получаю такое же предупреждение об ошибке в запросе таблицы обновлений, мне также нужно добавить $ dbcon к этому запросу? – Pebbles

1

Использование сессии является неправильным. В запросе на SQL это должно быть:

UPDATE ebsmembers SET password = '$password1' WHERE username= '$_SESSION[username]' 

Также ваш синтаксис очень плохой. В некоторых местах отсутствуют котировки. Перед внесением изменений вы должны начать с основ PHP.

+1

Спасибо, я знаю, это ужасно. Я купил книги и планирую вернуться к основам, а не редактировать код, доступный другим, однако я просто хочу, чтобы эта часть сайта работала, и она работает, так как она прослушивала меня целую вечность. – Pebbles

0
  1. запросы должны быть указаны:

    if (mysql_query("UPDATE ebsmembers SET password='$password1' WHERE username='$_SESSION[username]'")) 
    
  2. Не используйте mysql, это не рекомендуется. Используйте mysqli или PDO вместо: The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

  3. Не храните пароли в виде обычного текста. Используйте Bcrypt шифрование с password_hash() и password_verify() функций: How do you use bcrypt for hashing passwords in PHP?

+0

Cheers - Я буду стараться зашифровать пароли своевременно, я знаю, что это важно, но я не чрезмерно суетился из-за простой причины, по которой это семейный сайт, и я не очень ценен о том, что здесь пока доступно. – Pebbles

0

$ password1 = $ _POST [ 'Новый_пароль']; $ password2 = $ _POST ['confirmPassword'];

должен быть

$ password1 = $ _POST [ 'InputPassword2']; $ password2 = $ _POST ['InputPassword3'];

+0

Похоже, что «InputPassword2» и «InputPassword3» - это идентификаторы, а не имена. Пожалуйста, дважды проверьте свой ответ. – bloodyKnuckles

+0

Да, это идентификаторы, а не имена, но спасибо за ваш ответ. – Pebbles

0

вы можете использовать оператор обновления для этой цели, создать такую ​​же форму с:

  1. имя пользователя (имя = $ название)
  2. существующий пароль (пароль = $ PW1)
  3. новый пароль
  4. отправить

Сначала выберите имя текущего пользователя ˙U петь SQL SELECT заявление:

$my_qry ="select * from table_name where name= $name"; 

для Updation использовать оператор:

$query = mysql_query("UPDATE table_name SET password='".$pw1."' WHERE name='".$name."'"); 
    if(!$query) 
{ 
    mysql_error(); 
    echo "hello"; 
} 

использование If Else условий для этого, если первый запрос на выборку верно, то только запрос на обновление с работой

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