Ada beberapa hal yang salah di sini.
Anda menggunakan pengenal untuk kolom Anda di (dan menjadi tanda kutip):
('id', 'username', 'password', 'email')
hapus mereka
(id, username, password, email)
atau gunakan backtick
(`id`, `username`, `password`, `email`)
mysql_error()
seharusnya memberi Anda kesalahan, tetapi itu bukan karena:
- Anda menggabungkan API MySQL dengan
mysqli_
untuk terhubung, lalumysql_
dalam kueri Anda.
Kedua API yang berbeda tersebut tidak saling bercampur.
Gunakan mysqli_
secara eksklusif dan ubah kueri Anda saat ini menjadi:
if($query = mysqli_query($connect, "INSERT...
dan ubah mysql_error()
ke mysqli_error($connect)
sebagai penulisan ulang untuk blok itu:
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);
}
}
Hanya untuk menguji kesalahan, buat perubahan seperti yang saya uraikan di atas, sambil menjaga tanda kutip di sekitar kolom Anda seperti yang Anda miliki sekarang. Anda kemudian akan melihat kesalahan yang akan dilontarkan MySQL. Anda kemudian dapat melakukan seperti yang telah saya uraikan di atas dan menghapus tanda kutip di sekitar nama kolom, atau menggantinya dengan backticks.
Tutorial yang Anda lihat mungkin menggunakan backtick dengan sangat baik, tetapi mungkin tidak cukup dapat dibedakan sehingga Anda dapat mengatakan bahwa itu benar-benar backtick dan bukan tanda kutip tunggal.
Namun, kode Anda saat ini terbuka untuk injeksi SQL
. Gunakan mysqli
dengan pernyataan yang telah disiapkan
, atau PDO dengan pernyataan yang disiapkan
, mereka jauh lebih aman .
Saya perhatikan Anda mungkin menyimpan kata sandi dalam teks biasa. Jika ini masalahnya, sangat tidak disarankan.
Saya sarankan Anda menggunakan CRYPT_BLOWFISH
atau PHP 5.5 password_hash()
fungsi. Untuk PHP <5.5 gunakan password_hash() compatibility pack
.
Selain itu, alih-alih melakukan:
$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!");
Anda harus memeriksa kesalahan sebagai gantinya, seperti yang dinyatakan manual
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Jadi dalam kasus Anda:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Sunting: dan saya mengubah action="register.php"
ke action=""
karena Anda menggunakan seluruh kode di dalam halaman yang sama.
<!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);
}
}
?>