Có một số điều sai ở đây.
Bạn đang sử dụng sai số nhận dạng > cho các cột của bạn trong (và được trích dẫn):
('id', 'username', 'password', 'email')
loại bỏ chúng
(id, username, password, email)
hoặc sử dụng dấu nền
(`id`, `username`, `password`, `email`)
mysql_error()
lẽ ra bạn phải gặp lỗi, nhưng không phải vì:
- Bạn đang trộn các API MySQL với
mysqli_
để kết nối vớimysql_
trong truy vấn của bạn.
Hai API khác nhau đó không trộn lẫn với nhau.
Sử dụng mysqli_
độc quyền và thay đổi truy vấn hiện tại của bạn thành:
if($query = mysqli_query($connect, "INSERT...
và thay đổi mysql_error()
tới mysqli_error($connect)
như một bản viết lại cho khối đó:
if(isset($_POST["submit"])){
if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysqli_error($connect);
}
}
Chỉ để kiểm tra lỗi, thực hiện các thay đổi như tôi đã nêu ở trên, trong khi vẫn giữ các dấu ngoặc kép xung quanh các cột của bạn theo cách bạn có hiện tại. Sau đó, bạn sẽ thấy lỗi mà MySQL sẽ ném ra. Sau đó, bạn có thể làm như tôi đã nêu ở trên và xóa dấu ngoặc kép xung quanh tên cột hoặc thay thế chúng bằng dấu gạch ngược.
Hướng dẫn mà bạn đã xem có thể sử dụng rất tốt các dấu ngoặc kép, nhưng có lẽ không đủ phân biệt để bạn nói rằng chúng thực sự là dấu ngoặc kép chứ không phải dấu ngoặc kép.
Tuy nhiên, mã hiện tại của bạn được mở cho SQL injection
. Sử dụng mysqli
với các tuyên bố được chuẩn bị sẵn
hoặc PDO với các báo cáo đã chuẩn bị sẵn
, chúng an toàn hơn nhiều .
Tôi nhận thấy rằng bạn có thể đang lưu trữ mật khẩu ở dạng văn bản thuần túy. Nếu đúng như vậy, rất không khuyến khích.
Tôi khuyên bạn nên sử dụng CRYPT_BLOWFISH
hoặc password_hash()
của PHP 5.5
hàm số. Đối với PHP <5.5, hãy sử dụng password_hash() compatibility pack
.
Ngoài ra, thay vì làm:
$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");
Thay vào đó, bạn nên kiểm tra lỗi, giống như trạng thái thủ công
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Vì vậy, trong trường hợp của bạn:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Chỉnh sửa: và tôi đã thay đổi action="register.php"
thành action=""
vì bạn đang sử dụng toàn bộ mã bên trong cùng một trang.
<!DOCTYPE HTML>
<html>
<head>
<title>Register</title>
</head>
<body>
<form action="" method="POST">
Username: <input type="text" name="username">
<br/>
Password: <input type="password" name="password">
<br/>
Confirm Password: <input type="password" name="confirmPassword">
<br/>
Email: <input type="text" name="email">
<br/>
<input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
</form>
</body>
</html>
<?php
require('connect.php');
$username = $_POST['username'];
$password = $_POST['password'];
$confirmPassword = $_POST['confirmPassword'];
$email = $_POST['email'];
if(isset($_POST["submit"])){
if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysqli_error($connect);
}
}
?>