在注册页面中插入用户名时,它在 phpmyadmin 数据库中变为零 (0)

Posted

技术标签:

【中文标题】在注册页面中插入用户名时,它在 phpmyadmin 数据库中变为零 (0)【英文标题】:When Inserting a username in register page it turns into zero (0) in phpmyadmin database 【发布时间】:2019-02-13 05:01:07 【问题描述】:

我在我的 android 登录/注册应用程序中使用 000webhost,当输入数据时,除了用户名之外,所有列都填充到数据库中,它变成零并且没有错误

username turns into zero

Structure

注册.php

<?php

    $name = $_POST["name"];
    $age = $_POST["age"];
    $username = $_POST["username"];
    $password = $_POST["password"];

    $statement = mysqli_prepare($con, "INSERT INTO user (name, username, age, password) VALUES (?, ?, ?, ?)");
    mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, $password);
    mysqli_stmt_execute($statement);

    $response = array();
    $response["success"] = true;  

    echo json_encode($response);
?>

登录.php

    $username = $_POST["username"];
    $password = $_POST["password"];

    $statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ? AND password = ?");
    mysqli_stmt_bind_param($statement, "ss", $username, $password);
    mysqli_stmt_execute($statement);

    mysqli_stmt_store_result($statement);
    mysqli_stmt_bind_result($statement, $userID, $name, $age, $username, $password);

    $response = array();
    $response["success"] = false;  

    while(mysqli_stmt_fetch($statement))
        $response["success"] = true;  
        $response["name"] = $name;
        $response["age"] = $age;
        $response["username"] = $username;
        $response["password"] = $password;
    

    echo json_encode($response);
?>

【问题讨论】:

为了您自己的安全,我会立即从示例 PHP 代码中删除数据库凭据。接下来,将执行语句的返回值分配给一个变量,并且仅在实际成功时才返回“Success”。如果没有,写一个日志文件或给自己发一封电子邮件之类的...... 请记住,很少有人会阅读这堵代码墙。您应该努力提供与您的具体问题相关的minimal reproducible example。 这里有太多代码了。请精简此内容并专注于与问题相关的细节,而不是一概而论。 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。 警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代的development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。至少遵循recommended security best practices 并且永远不要将密码存储为纯文本 或像 SHA1 或 MD5 这样的弱散列。 【参考方案1】:

在您调用绑定参数时,您将用户名定义为整数 (i)...

mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, $password);

这应该是一个 s 以将其保留为字符串,并且年龄可能是整数。

mysqli_stmt_bind_param($statement, "ssis", $name, $username, $age, $password);

【讨论】:

非常感谢,这对我很有用...谢谢

以上是关于在注册页面中插入用户名时,它在 phpmyadmin 数据库中变为零 (0)的主要内容,如果未能解决你的问题,请参考以下文章

我做了一个ASP用户注册页面,本地测试不正常,插入记录后显示错误500,输入的网页无法预览

微信页面注册时重复请求的问题

使用反应从页面导入数据

将用户记录插入MYSQL表

AJAX:校验用户名是否被注册

如何在 PHP 中验证表单,然后重定向到外部页面