php - 无法通过php将值插入mysql
问题描述
我是 PHP/SQL 的新手并尝试了一个教程。我创建了一个具有读写权限的用户的数据库。还有一个名为“employees”的表,其中包含以下列:用户名、密码、电子邮件、令牌
这是我的代码:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Account erstellen</title>
</head>
<body>
<?php
if(isset($_POST["submit"])){
require("mysql.php");
$stmt = $mysql->prepare("SELECT * FROM employees WHERE USERNAME = :user"); //Username überprüfen
$stmt->bindParam(":user", $_POST["username"]);
$stmt->execute();
$count = $stmt->rowCount();
if($count == 0){
//Username ist frei
$stmt = $mysql->prepare("SELECT * FROM employees WHERE EMAIL = :email"); //Username überprüfen
$stmt->bindParam(":email", $_POST["email"]);
$stmt->execute();
$count = $stmt->rowCount();
if($count == 0){
if($_POST["pw"] == $_POST["pw2"]){
//User anlegen
$stmt = $mysql->prepare("INSERT INTO employees (USERNAME, PASSWORD, EMAIL, TOKEN) VALUES (:user, :pw, :email, null)");
$stmt->bindParam(":user", $_POST["username"]);
$hash = password_hash($_POST["pw"], PASSWORD_BCRYPT);
$stmt->bindParam(":pw", $hash);
$stmt->bindParam(":email", $_POST["email"]);
$stmt->execute();
echo "Account created successfully";
} else {
echo "Passwords doesn't match";
}
} else {
echo "E-Mail is already used";
}
} else {
echo "Username not available";
}
}
?>
<h1>Account erstellen</h1>
<form action="register.php" method="post">
<input type="text" name="username" placeholder="Username" required><br>
<input type="text" name="email" placeholder="Email" required><br>
<input type="password" name="pw" placeholder="Passwort" required><br>
<input type="password" name="pw2" placeholder="Passwort wiederholen" required><br>
<button type="submit" name="submit">Erstellen</button>
</form>
<br>
<a href="index.php">Do you have already a account?</a>
</body>
</html>
在我的表单中输入用户名、邮件和 2x 密码并单击“创建”后,我收到消息“帐户创建成功”,但这些值不在我的数据库中。
我尝试用 F12(Firefox) 调试它,参数被传递.......
解决方案
https://www.php.net/manual/en/pdostatement.rowcount
在某些情况下,RowCount 不会返回选择查询的计数。您可以使用if ($stmt->fetchColumn() !== false)
.
此外,$stmt->execute 没有错误处理(除非您打开了异常:)$mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
,因此即使该语句失败,它也会显示“帐户创建成功”。试试if ($stmt->execute()) { good } else { bad }
这也是个不错的地方->rowCount()
推荐阅读
- javascript - 我在创建图像背景幻灯片或轮播时需要帮助
- angular - 如何在 app.component 以外的角度制作模板页面
- node.js - 在 React Url 中传递参数以获取相关数据
- owasp - 如何使用 ZAP 将请求重定向到另一台主机?
- logging - jboss EAP 7 中独立 ha 配置的双日志输出
- scala - Amazon EMR 上的 Spark on Yarn 资源管理:如何利用所有可用内核执行 Spark 作业
- sql - 在 sqlite3 中计算满足特定条件且不重复的单个元素
- python - NLP:将 CountVectorizer 应用于包含特征列表的列
- javascript - 图片不会出现
- css - 如何让我的 css 在 django 中正确呈现?