PHP MySQL 信息更新不起作用

标签 php mysql

Image for Database Columns from Workbench here

预先感谢所有不辞辛苦在这里查看并回答我的问题的人。 我正在一个网站上工作,我需要为我的注册访问者制作一个仪表板,以便他们可以查看和编辑他们的个人资料信息。但是,我的代码遇到了一些问题。 当用户提交对其个人资料的更改时,服务器会更新存储在 MySQL 表中的信息,并通知用户该信息已更新。 从外表上看,工作似乎进展顺利。当我上传个人资料图片或设置新名称或设置新电子邮件地址时,它会显示“已成功更新”。但是当我检查“实际”数据库条目(使用 Workbench)时,我发现绝对没有任何更新。

附注我已经检查了我的源代码 http://phpcodechecker.com 上的错误。我的 MySQL 连接工作正常(因为我也在其他 php 文件中使用了相同的代码段)。

P.P.S(如果有必要)我正在使用 Windows 10 64 位和 PHP 7 以及 IIS 10 Server 和 MySQL Workbench for Windows 版本 6.2.4(64 位)

源代码: edit_profile.php

<?php
    ob_start();
    session_start();

    require('./functions.php');

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $name = $_POST["name"];
        $email = $_POST["email"];
        $user_id = $_SESSION["user_id"];
        $profile_picture = $_POST["profile_picture"];

        echo 'Changing Contents of your profile..';
        if ($name != $_SESSION["name"]) {
            if (setUserName($user_id, $name)) {
                echo 'Successfully changed User Name.<br/>';
            } else {
                echo 'Unsuccessful';
            }
        }
        if ($email != $_SESSION["email"] && $email != "") {
            if (setEmail($user_id, $email)) {
                echo 'Successfully changed Email.<br/>';
            } else {
                echo 'Unsuccessful';
            }
        }
        if ($profile_picture != getProfilePicture_base64_encoded($user_id) && $profile_picture != "") {
            if (setProfilePicture_base64_encoded($user_id, $profile_picture)) {
                echo 'Successfully changed Profile Picture.<br/>';
            } else {
                echo 'Unsuccessful';
            }
        }
    } else {
        ?>
        <!DOCTYPE html>
        <html>
            <head>
                <title>StoryDorado | Edit Profile</title>
                <meta name="theme-color" content="">
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <meta name="robots" content="nocache,noarchive,nofollow,nosnippet">
                <meta name="Description" content="">
                <meta name="keywords" content="">
            </head>
            <body>
                <form action="edit_profile.php" method="post"  enctype="multipart/form-data">
                    Set New Profile Picture (Max. 15 MB): <input name="profile_picture" id="profile_picture" accept="image/JPEG" type="file"><br/>
                    Set User Name: <input type="text" name="name" id="name"><br/>
                    Set New E-mail:<input type="text" name="email" id="email"><br/>
                    <input type="submit" value="submit" name="submit" />
                </form>
                <br/>
                <div id="Current_Info" style="display:block;">
                    <pre>
                            Your Current Information:
                            1.Profile Picture:
                        <?php
                        $profile_picture = getProfilePicture_base64_encoded($_SESSION["user_id"]);
                        if ($profile_picture === NULL) {
                            echo '<img src="default.jpg" />';
                        } else {
                            echo '<img src="data:image/jpeg;base64,' . $profile_picture . '" />';
                        }
                        ?><br/>
                            2. User Name:
                        <?php echo $_SESSION["name"]; ?><br/>
                            3. E-Mail:
                        <?php
                        if ($_SESSION["email"] != "") {
                            echo $_SESSION["email"];
                        } else {
                            echo 'Not         Provided';
                        }
                        ?>
                    </pre>
                </div>
            </body>
        </html>
        <?php
    }
?>

与functions.php位于同一文件夹

<?php

    function encrypt_password($password) {
        $cost = 10;
        $salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
        $salt = sprintf("$2a$%02d$", $cost) . $salt;
        $hash = crypt($password, $salt);
        return $hash;
    }

    function check_user($user_id, $password) {
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "SELECT * FROM users";
        $list = $conn->query($query);
        $result = false;
        while ($row = $list->fetch_assoc()) {
            if ($user_id == $row["user_id"] && $row["subscription_code"] != 0 && hash_equals($row["subscription_code"], crypt($password, $row["subscription_code"]))) {
                $result = true;
            }
        }
        $conn->close();
        return $result;
    }

    function getProfilePicture_base64_encoded($user_id) {
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "SELECT * FROM users WHERE user_id='" . $user_id . "'";
        $list = $conn->query($query);
        $image = null;
        while ($row = $list->fetch_assoc()) {
            $image = $row["profile_picture"];
        }
        $conn->close();
        return $image;
    }

    function setProfilePicture_base64_encoded($user_id, $picture) {
        $picture = base64_encode($picture);
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "UPDATE users SET profile_picture='" . $picture . "' WHERE user_id='" . $user_id . "';";
        $result = false;
        if ($conn->query($query) === TRUE) {
            $result = true;
        }
        $conn->close();
        return $result;
    }

    function setUserName($user_id, $name) {
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "UPDATE users SET name='" . $name . "' WHERE user_id='" . $user_id . "';";
        $result = false;
        if ($conn->query($query) === TRUE) {
            $result = true;
        }
        $conn->close();
        return $result;
    }

    function setPassword($user_id, $password) { //WARNING: Be Cautious About When You Let A User Change His Password
        $password = encrypt_password($password);
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "UPDATE users SET subscription_code='" . $password . "' WHERE user_id='" . $user_id . "';";
        $result = false;
        if ($conn->query($query) === TRUE) {
            $result = true;
        }
        $conn->close();
        return $result;
    }

    function setEmail($user_id, $email) {
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "UPDATE users SET email='" . $email . "' WHERE user_id='" . $user_id . "';";
        $result = false;
        if ($conn->query($query) === TRUE) {
            $result = true;
        }
        $conn->close();
        return $result;
    }

    function UnRegister($user_id) { //WARNING: Be Cautious About This. Changes are not reversible. Provide proper sure-checking to end users.
        $conn = new mysqli("localhost", "root", "", "login_system") or die("Connection Failed:" . $conn->connect_error);
        $query = "DELETE FROM users WHERE user_id='" . $user_id . "';";
        $result = false;
        if ($conn->query($query) === TRUE) {
            $result = true;
        }
        $conn->close();
        return $result;
    }

    function validate($data) {
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
?>

这可能是什么原因造成的?又该如何解决呢?

编辑:

我在 MySQL Workbench 中运行了与上述函数中使用的相同查询。有一个错误!它说 : 执行:

UPDATE `login_system`.`users` SET `name`='Rojaxius' WHERE `user_id`='facebook000000000';

ERROR 1175: 1175: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
SQL Statement:
UPDATE `login_system`.`users` SET `name`='Mr Who' WHERE `user_id`='facebook000000000'
Operation failed: There was an error while applying the SQL script to the database.

这意味着什么?

最佳答案

感谢大家花时间回答我的问题。如果没有咨询你,我不可能找到答案。但你的见解揭示了很多,我终于找到了为什么这些陈述不起作用。这只是因为我的数据库中的 user_id 列未设置为 UNIQUE。因此,在安全模式下,WHERE 子句对程序没有任何意义,因为它无法确定是否存在 2 个相同的 user_id 条目。因此出现了问题。现在已经修复了。我决定分享这个答案,以防其他人陷入这个困惑并浪费 12 个小时:) 谢谢大家。

<Happy Coding/>

关于PHP MySQL 信息更新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42109024/

相关文章:

php - 没有给出时如何在 Laravel 5.1 中使 Request 默认

mysql - 使用函数 FOUND_ROWS() 时出现连接给出错误结果的问题

mysql - Sqlalchemy & Pylons : Adding new tables to a previously defined database?

php - PHP 的 MySQL 语法错误

php - TwitterOAuth 商店 token 供离线使用

javascript - PHP 函数不适用于 Ajax

php - 如何在递归正则表达式中进行反向引用匹配?

mysql - SQL - 查找出现次数最多的对象

php - 使用 PHP 和 MySQL self 发布的动态单选按钮

php - 创建一个 3 列的 wordpress 标题