2013-11-29 4 views
0

Я делаю сайт сообщества.Строка не обновляется в базе данных

В настоящее время я вношу изменения в свой пароль.

Но, когда я пытаюсь использовать его, он не будет работать ..

Почему это? Как это исправить?

Мой код:

settings.php (Где я изменяю пропуск)

PHP:

<?php 
error_reporting(E_ALL); 
include_once('includes/connection.php'); 
include_once('includes/user.php'); 
if(isset($_SESSION['logged_in'])){ 
    if(isset($_POST['oldpass']) and isset($_POST['newpass'])){ 
     $name = $_COOKIE['name']; 
     $oldpass = md5($_POST['oldpass']); 
     $newpass = md5($_POST['newpass']); 

     $query = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?"); 

      $query->bindValue(1, $name); 
      $query->bindValue(2, $oldpass); 

      $query->execute(); 

      $num = $query->rowCount(); 

      if($num==1){ 
       $query = $pdo->prepare("UPDATE users SET password=? WHERE username=?"); 

       $query->bindValue(1, $newpass); 
       $query->bindValue(2, $name); 

       $result = $query->execute(); 
       if($result==1){ 
        header('Location: logout.php'); 
       }else{ 
        echo "Something went wrong."; 
       } 
      } 
    } 
} 
?> 

HTML:

<html> 
    <head> 
     <title>MackNet</title> 
     <link rel="stylesheet" type="text/css" href="assets/style.css"> 
    </head> 
    <body> 
     <div id="main"> 
     <?php 
      $name = $_COOKIE['name']; 
      $pass = $_COOKIE['pass']; 
      $user = new User(); 
      $row = $user->fetch_all($name, $pass); 
     ?> 
      <div id="toolbar"> 
       <?php 
        echo " <a href='main.php'>Home</a> "; 
        echo " <a href='logout.php'>Logout</a> "; 
        echo " <a href='settings.php'>Settings</a> "; 
        if($row['group'] == 2){ 
         echo " <a href='users.php'>Manage Users</a> "; 
        } 
       ?> 
       <hr> 
      </div> 
      <form action="settings.php" method="POST"> 
       <input type="password" name="oldpass" placeholder="Old Password"> 
       <input type="password" name="newpass" placeholder="New Password"> 
       <input type="submit" value="Change password"> 
      </form> 
     </div> 
    </body> 
</html> 

Если вам нужен код, скажите мне.

Благодаря // Mackan90095

+0

Если вы на самом деле полагаетесь на '_COOKIE ['name']' на своем сайте, обратите внимание, что ANYONE может изменить свои файлы cookie в ЛЮБОЙ точке. – h2ooooooo

+0

Да, но у меня есть проверка пароля на странице настроек. И, как печенье навредит? – Mackan90095

+0

Однако вы также сохраняете пароль в файле cookie? Тогда все с инспектором пакетов могут видеть пароль в открытом виде? – h2ooooooo

ответ

0

Какую ошибку вы получаете? Или он никогда не попадает внутрь if ($ num == 1)?

Возможно, его умный способ получить идентификатор пользователя и использовать его для изменения пароля. Представьте себе, что у двух пользователей одинаковое имя пользователя, что изменит оба их пароля.

Я также хотел бы указать поле для подтверждения пароля, чтобы убедиться, что они дважды вводят новый пароль (в качестве меры предосторожности).

Полезный сайт: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

+0

Ну, в процессе регистрации я удостоверяюсь, что нет двух пользователей с тем же именем, и я не получаю никаких ошибок, поскольку он просто возвращается на ту же страницу, не делая ничего. – Mackan90095

+0

И установлено $ _SESSION ['logged_in']? – luckylwk

+0

Когда пользователь входит в систему, он имеет значение true. – Mackan90095

0

Почему бы вам не попробовать использовать попытке поймать, чтобы увидеть ошибку и заменить, если ($ результат == 1) с, если ($ результат)

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
try{ 
    $query = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?"); 

     $query->bindValue(1, $name); 
     $query->bindValue(2, $oldpass); 

     $query->execute(); 

     $num = $query->rowCount(); 

     if($num==1){ 
      $query = $pdo->prepare("UPDATE users SET password=? WHERE username=?"); 

      $query->bindValue(1, $newpass); 
      $query->bindValue(2, $name); 

      $result = $query->execute(); 
      if($result) 
       header('Location: logout.php'); 
     } 
    } 
catch (PDOException $e) { 
     echo "DataBase Error: ".$e->getMessage(); 
    } 
catch (Exception $e) { 
     echo "General Error: ".$e->getMessage(); 
    } 
+0

Нет ошибок, ничего. Просто возвращается на ту же страницу. – Mackan90095

+0

замените if ($ result == 1) с if ($ result) –

+0

Это тоже не сработало, я думаю, что он даже не дойдет до исполнения ... – Mackan90095

0

У вас есть прекрасная код, но я видел только это:

изменение

<form action="settings.php" method="POST"> 

к

<form action="Settings.php" method="POST"> 

Настройки.php капитализированы?

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