PHP PDO注册不起作用?
我知道这是一个非常“典型”的问题,应该很容易做到,但我不明白为什么它不起作用,一旦在表单中添加输入并点击“enter”,它就会重定向到register.php并从我的连接脚本中回显“connected successfully”。我的数据库里根本没有任何东西,任何我出错的指针都会很好 HTMLPHP PDO注册不起作用?,php,sql,pdo,Php,Sql,Pdo,我知道这是一个非常“典型”的问题,应该很容易做到,但我不明白为什么它不起作用,一旦在表单中添加输入并点击“enter”,它就会重定向到register.php并从我的连接脚本中回显“connected successfully”。我的数据库里根本没有任何东西,任何我出错的指针都会很好 HTML <form method "POST" id="regform" action="register.php"> <input type="text" username="
<form method "POST" id="regform" action="register.php">
<input type="text" username="username" placeholder="Please enter your
email"/>
<input type="text" password="password" placeholder="Please create a
password"/>
<input type="submit" value="enter"/>
</form>
Connect.php
<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "root";
$dbname = "fyp";
try{
$pdostmt = new PDO("mysql:host=$servername;dbname=$dbname",$dbusername,
$dbpassword);
$pdostmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connected succesfully";
}
catch(PDOException $e)
{
print "Error! Unable to connect: " . $e->getMessage() . "<br/>";
die();
}
?>
<?php
// Starting the session and connecting to the DB
session_start();
require_once'connect.php';
if(isset($_POST['register'])){
$username = !empty($_POST['username']) ? trim($_POST['username']) : null;
$pass = !empty($_POST['password']) ? trim($_POST['password']) : null;
$sql = "SELECT COUNT(username) AS num FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':username', $username);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row['num'] > 0){
die('That username already exists!');
}
$sql = "INSERT INTO users (username, password) VALUES (:username,
:password)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':username', $username);
$stmt->bindValue(':password', $passwordHash);
$result = $stmt->execute();
if($result){
echo 'Thank you for registering with our website.';
header("Location: index.php");
}
else {
echo '<b> There has been an error please contact support </b>';
}
}
?>
register.php
<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "root";
$dbname = "fyp";
try{
$pdostmt = new PDO("mysql:host=$servername;dbname=$dbname",$dbusername,
$dbpassword);
$pdostmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connected succesfully";
}
catch(PDOException $e)
{
print "Error! Unable to connect: " . $e->getMessage() . "<br/>";
die();
}
?>
<?php
// Starting the session and connecting to the DB
session_start();
require_once'connect.php';
if(isset($_POST['register'])){
$username = !empty($_POST['username']) ? trim($_POST['username']) : null;
$pass = !empty($_POST['password']) ? trim($_POST['password']) : null;
$sql = "SELECT COUNT(username) AS num FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':username', $username);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row['num'] > 0){
die('That username already exists!');
}
$sql = "INSERT INTO users (username, password) VALUES (:username,
:password)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':username', $username);
$stmt->bindValue(':password', $passwordHash);
$result = $stmt->execute();
if($result){
echo 'Thank you for registering with our website.';
header("Location: index.php");
}
else {
echo '<b> There has been an error please contact support </b>';
}
}
?>
我为此绞尽脑汁已有一段时间了,如果我愚蠢的话,任何帮助都将不胜感激。将HTML中的username=“username”
更改为name=“username”
和password=“password”
更改为name=“password”
您还需要检查是否设置了\u POST['enter']
,而不是$\u POST['register']
(感谢您的提醒)
正如Danielius指出的,在register.php中将
$pdo
更改为$pdosmt
。在查询中,您应该使用$pdosmt
而不是$pdo
,因为它是您的pdo对象,$pdo
是空的。您还没有为任何输入指定名称。确实需要进行更改,但这并不能克服这样一个事实,即正在检查的是$\u POST['register']
,如果$pdo
未切换为$pdosmt
,则代码将不起作用(反之亦然)?这是因为$pdosmt
是PDO对象,但在准备好的语句中使用了$PDO
。