【问题标题】:Row won't update in database行不会在数据库中更新
【发布时间】:2013-11-29 13:10:50
【问题描述】:

我正在制作社区网站。

我目前正在选择更改您的密码。

但是,当我尝试使用它时,它不起作用..

这是为什么?我该如何解决?

我的代码:

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

【问题讨论】:

  • 如果您实际上依赖于您网站上的_COOKIE['name'],请注意,任何人都可以随时更改其 cookie。
  • 是的,但我在设置页面上有密码验证。而且,cookie 有什么危害?
  • 但是您也将密码保存在 cookie 中?那么每个有数据包检查器的人都可以看到明文密码?
  • 不,密码是 md5'd
  • 你有include_once('includes/connection.php'); include_once('includes/user.php');在 HTML 主文件中?

标签: php mysql pdo


【解决方案1】:

你得到什么错误?或者它永远不会进入 if($num==1)?

也许检索用户 ID 并使用它来更改密码很聪明。想象一下两个用户拥有相同的用户名,这将更改他们的密码。

我还将包括一个密码确认字段,以确保他们输入两次新密码(作为预防措施)。

有用的网站:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

【讨论】:

  • 嗯,在注册过程中,我确保没有两个同名的用户,并且我没有收到任何错误,因为它只是回到同一个页面,没有做任何事情.
  • $_SESSION['logged_in'] 设置了吗?
  • 我会在每个逻辑中打印/回显某些内容,以查看它在哪里遇到了麻烦(因此还包括 else's 以指示错误的转弯)。
  • 好的,我通过会话检查添加了一个 else,它没有设置。编辑:我添加了 session_start();现在会话在 settings.php 中设置现在它可以工作了:D
  • 甜蜜!我总是使用循环内的打印来检查代码是否到达某些地方。
【解决方案2】:

为什么不尝试使用 try catch 来查看错误并将 if($result==1) 替换为 if($result)

$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();
    }

【讨论】:

  • 将 if($result==1) 替换为 if($result)
【解决方案3】:

你有一个漂亮的代码,但我只看到了这个:

改变

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

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

Settings.php 是否大写?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2017-05-06
    • 2014-01-26
    相关资源
    最近更新 更多