Ci sono alcune cose che non vanno qui.
Stai utilizzando gli identificatori per le tue colonne in (e virgolette):
('id', 'username', 'password', 'email')
rimuoverli
(id, username, password, email)
o usa i backtick
(`id`, `username`, `password`, `email`)
mysql_error()
avrebbe dovuto generarti un errore, ma non è stato a causa di:
- Stai combinando API MySQL con
mysqli_
con cui connettersi, quindimysql_
nella tua richiesta.
Queste due diverse API non si mescolano tra loro.
Usa mysqli_
esclusivamente e cambia la tua richiesta attuale in:
if($query = mysqli_query($connect, "INSERT...
e cambia mysql_error()
a mysqli_error($connect)
come riscrittura per quel blocco:
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);
}
}
Solo per verificare l'errore, apporta le modifiche come ho delineato appena sopra, mantenendo le virgolette attorno alle colonne come le hai ora. Vedrai quindi l'errore che MySQL genererà. Puoi quindi fare come ho già descritto sopra e rimuovere le virgolette attorno ai nomi delle colonne o sostituirle con i backtick.
Il tutorial che hai visto potrebbe utilizzare molto bene i backtick, ma probabilmente non erano abbastanza distinguibili da consentirti di dire che erano effettivamente backtick e non virgolette singole.
Tuttavia, il tuo codice attuale è aperto a SQL injection
. Usa mysqli
con dichiarazioni preparate
o DOP con dichiarazioni preparate
, sono molto più sicuri .
Ho notato che potresti memorizzare le password in testo normale. Se questo è il caso, è altamente sconsigliato.
Ti consiglio di utilizzare CRYPT_BLOWFISH
o password_hash()
di PHP 5.5
funzione. Per PHP <5.5 usa il password_hash() compatibility pack
.
Inoltre, invece di fare:
$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!");
Dovresti invece controllare gli errori, proprio come afferma il manuale
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Quindi nel tuo caso:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Modifica: e ho cambiato action="register.php"
a action=""
poiché stai utilizzando l'intero codice all'interno della stessa pagina.
<!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);
}
}
?>