在注册页面中插入用户名时,它在 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->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)的主要内容,如果未能解决你的问题,请参考以下文章