【问题标题】:PHP mysqli is setting variable to 0 when inserting into a tablePHP mysqli在插入表时将变量设置为0
【发布时间】:2014-02-24 18:14:20
【问题描述】:

我正在为我的网站开发一个登录系统,但是当我将所有信息(用户、密码、电子邮件)插入到 sigm-up 函数的数据库中时,它会将所有变量设置为 0。我知道传递变量不是问题,因为我已经回显了用户名和密码,它们就是它们的本意。我的注册页面代码如下:

<?php

include '../includes/conn.php';
include 'salt.php';

if($_POST['signup']){

    $user = $_POST['user'];
    $pass = $_POST['pass'];
    $cpass = $_POST['cpass'];
    $email = $_POST['email'];

        if($pass == $cpass){
            $hpass = create_hash($pass);

            $query = $conn->prepare("INSERT INTO Users (Name, Password, Email) VALUES (?, ?, ?)");
        $query->bind_param('sss', $user, $hpass, $email);
        $query->execute();

            if($query){
                $msg = 'Account created successfully, please check your email to verify it.';
            }else{
                $msg = 'There was an error creating your account: ' . $conn->error . ', please try again later';
            }

            //echo $user . ' ' . $pass . ' ' . $hpass . ' ' . $email;

        }else{
            $msg = 'Passwords do not match.';
        }
}

?>

<html>

    <head>

        <title>DiscFire Softworks - Login test</title>

        <link rel="stylesheet" type="text/css" href="../includes/ie-styles.css">

        <style type="text/css">

            @import url('../includes/styles.css');

        </style>

    </head>

    <body>

        <div class="body">

            <img src="../images/header.jpg" />

            <div class="navbar">

                <?php

                    $query = $conn->prepare("SELECT Name FROM pages ORDER BY ID asc");
                    $query->execute();
                    $query->bind_result($name);

                    while($query->fetch())
                    {
                        echo '<a href="/?page=' . $name . '">' . $name . '</a>';
                    }

                ?>

            </div>

            <?php
                echo '<p>' . $msg . '</p>';
            ?>

            <form method="POST" action="index.php" id="sign-up">

                <input type="hidden" name="signup" value="1"/>
                <label for="user">Username: </label>
                <input type="text" style="width: 30%; margin-left: 59px;" name="user"></textarea>
                <br />
                <label for="pass">Password: </label>
                <input type="password" style="width: 30%; margin-left: 60px;" name="pass"></textarea>
                <br />
                <label for="cpass">Confirm Password: </label>
                <input type="password" style="width: 30%; margin-left: 1px;" name="cpass"></textarea>
                <br />
                <label for="user">Email: </label>
                <input type="text" style="width: 30%; margin-left: 90px;" name="email"></textarea>
                <input type="submit" />
            </form>

        </div>

    </body>

</html>

这是@Prix 要求的 SQL 结构:

http://prntscr.com/2vsmjv

提前致谢!

【问题讨论】:

  • 您似乎有严重的 SQL 注入漏洞。另外,为什么要先检查现有用户并告诉最终用户帐户已经存在?从安全的角度来看,这通常是不受欢迎的,实际上浪费了对数据库的额外查询调用。只需插入插图,如果由于独特的限制而失败,只需告诉用户无法创建帐户。您能否在查询执行前显示查询的转储?
  • 你为什么使用textarea而不是input字段?你知道他们可以使用 enter 和其他几个字符,如果没有正确清理可能会破坏你的登录系统?此外,您应该使Name 成为一个唯一字段,这样您就不必浪费查询来了解它是否打开。您已经在使用 MySQLi 似乎为什么不使用准备好的语句,这样您就可以安全地防止注入?如果你要重复同样的错误,那么从 mysql_* 库迁移到 MySQLi 是没有意义的。
  • 看起来您的表声明非常荒谬。
  • @prix: 切换到输入字段究竟如何防止注入问题?一旦表单提交,您是否意识到 textarea 和 input 基本相同?它们都只是数据流中的key=value
  • @programmingturtle 请查看使用此库进行数据库连接/交互。 doctrine-project.org/projects/dbal.html

标签: php mysqli


【解决方案1】:

似乎我将行设置为整数...哎呀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2019-03-17
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多