Il y a quelques choses qui ne vont pas ici.
Vous utilisez les mauvais identifiants pour vos colonnes dans (et étant entre guillemets):
('id', 'username', 'password', 'email')
supprimez-les
(id, username, password, email)
ou utilisez des backticks
(`id`, `username`, `password`, `email`)
mysql_error()
aurait dû vous renvoyer une erreur, mais ce n'est pas le cas à cause de :
- Vous mélangez les API MySQL avec
mysqli_
pour se connecter, puismysql_
dans votre requête.
Ces deux API différentes ne se mélangent pas.
Utilisez mysqli_
exclusivement et remplacez votre requête actuelle par :
if($query = mysqli_query($connect, "INSERT...
et changez mysql_error()
à mysqli_error($connect)
comme réécriture pour ce bloc :
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);
}
}
Juste pour tester l'erreur, apportez les modifications que j'ai décrites ci-dessus, tout en conservant les guillemets autour de vos colonnes tels que vous les avez actuellement. Vous verrez alors l'erreur que MySQL lancera. Vous pouvez ensuite faire comme je l'ai déjà décrit ci-dessus et supprimer les guillemets autour des noms de colonne, ou les remplacer par des backticks.
Le didacticiel que vous avez vu peut très bien utiliser des backticks, mais n'était probablement pas assez distinctif pour que vous disiez qu'il s'agissait bien de backticks et non de guillemets simples.
Cependant, votre code actuel est ouvert à injection SQL
. Utilisez mysqli
avec des relevés préparés
, ou PDO avec instructions préparées
, ils sont beaucoup plus sûrs .
J'ai remarqué que vous stockiez peut-être des mots de passe en texte brut. Si tel est le cas, cela est fortement déconseillé.
Je vous recommande d'utiliser CRYPT_BLOWFISH
ou password_hash()
de PHP 5.5
fonction. Pour PHP < 5.5, utilisez le password_hash() compatibility pack
.
Aussi, au lieu de faire :
$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!");
Vous devriez plutôt vérifier les erreurs, tout comme le manuel l'indique
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Donc dans votre cas :
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Modifier : et j'ai changé action="register.php"
à action=""
puisque vous utilisez tout le code dans la même page.
<!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);
}
}
?>