我试着用php和mysql创建一个注册/登录系统,但是偶然发现pdo语句有问题。由于我不熟悉pdo语句,所以无法使代码的“fetch”部分正常工作,因此我非常感谢您的帮助。另外,我非常感谢您解释“占位符”变量如何在pdo语句中工作,以及我们如何使用pdo语句中的“fetch”方法检查数据库中是否已经有用户名。
mysql数据库相当简单。它分别包括自动递增的“id”(主键)字段、“firstname”字段、“lastname”字段、“email”字段、“username”字段和“password”字段。
下面是代码的html部分:
<form class="signUp" action="signup.inc.php" method="POST">
<input type="text" name="first" placeholder="First name" class="firstname" required>
<input type="text" name="last" placeholder="Last name" class="lastname" required>
<input type="text" name="email" placeholder="E-mail" class="email" required>
<input type="text" name="username" placeholder="Username" class="username" required>
<input type="password" name="password" placeholder="Password" class="password" required>
<input type="submit" class="submit" name="submit" value="Sign up">
</form>
下面是使用pdo语句进行php验证的糟糕尝试(显然它不起作用):
<?php
if (isset($_POST['submit'])){
include_once 'init.php';
$first = $_POST['first'];
$last = $_POST['last']
$email = $_POST['email']
$username = $_POST['username']
$password = $_POST['password']
if (empty($first) || empty($last) || empty($email) || empty($username) || empty($password)){
header("Location: signup.php?signup=empty");
exit();
} else{
if (!preg_match("/^[a-zA-Z]*$/", $first) || !preg_match("/^[a-zA-Z]*$/", $last)){
header("Location: signup.php?signup=invalid");
exit();
} else{
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
header("Location: signup.php?signup=invalidEmail");
exit();
} else{
$query = $db->prepare("SELECT * FROM users WHERE username = :username");
$query->execute(['username' => $username]);
$results = $query->fetch();
if ($query->rowCount()>0){
header("Location: signup.php?signup=usernameTaken");
exit();
} else{
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
$query = $db->prepare("INSERT INTO users (firstname, lastname, email, username, password) VALUES ('$first', '$last', '$email', '$username', '$hashedPassword'))";
$query->execute();
header("Location: signup.php?signup=success");
exit();
}
}
}
}
} else{
header("Location: signup.php");
exit();
}
谢谢您!
1条答案
按热度按时间bq9c1y661#
您没有绑定参数。这是占位符进入对话的地方。占位符
?
用于绑定参数。不能使用php变量准备语句,而只能使用占位符。请看一下相应代码段的重写:除非你想自己学习验证的步骤,因为你渴望学习自己,否则你可能会想看看像gump这样的库进行验证。