Тук има няколко нередни неща.
Използвате грешни идентификатори за вашите колони в (и като кавички):
('id', 'username', 'password', 'email')
премахнете ги
(id, username, password, email)
или използвайте обратни отметки
(`id`, `username`, `password`, `email`)
mysql_error()
трябваше да ви изведе грешка, но не поради:
- Смесвате MySQL API с
mysqli_
за да се свържете, след товаmysql_
във вашата заявка.
Тези два различни API не се смесват един с друг.
Използвайте mysqli_
изключително и променете настоящата си заявка на:
if($query = mysqli_query($connect, "INSERT...
и променете mysql_error()
към mysqli_error($connect)
като пренаписване за този блок:
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);
}
}
Само за тестване на грешката, направете промените, както очертах малко по-горе, като същевременно запазите кавичките около колоните си така, както ги имате сега. След това ще видите грешката, която MySQL ще изведе. След това можете да направите, както вече очертах по-горе, и да премахнете кавичките около имената на колоните или да ги замените с отметки.
Урокът, който видяхте, може да използва много добре обратни отметки, но вероятно не са били достатъчно различими, за да кажете, че те наистина са обратни тикчета, а не единични кавички.
Настоящият ви код обаче е отворен за SQL инжекция
. Използвайте mysqli
с изготвени констатациии
, или PDO с подготвени изявления
, те са много по-безопасни .
Забелязах, че може да съхранявате пароли в обикновен текст. Ако случаят е такъв, това е силно обезкуражено.
Препоръчвам ви да използвате CRYPT_BLOWFISH
или password_hash()
на PHP 5.5
функция. За PHP <5.5 използвайте password_hash() compatibility pack
.
Освен това, вместо да правите:
$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!");
Вместо това трябва да проверявате за грешки, точно както е посочено в ръководството
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Така че във вашия случай:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Редактиране: и промених action="register.php"
към action=""
тъй като използвате целия код в една и съща страница.
<!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);
}
}
?>