Tady je pár věcí špatně.
Používáte nesprávné identifikátory pro vaše sloupce v (a jsou to uvozovky):
('id', 'username', 'password', 'email')
odstranit je
(id, username, password, email)
nebo použijte backticks
(`id`, `username`, `password`, `email`)
mysql_error()
měl vám vyvolat chybu, ale nestalo se tak kvůli:
- Mícháte rozhraní MySQL API s
mysqli_
pro připojení a potémysql_
ve vašem dotazu.
Tato dvě různá rozhraní API se vzájemně nemísí.
Použijte mysqli_
exkluzivně a změňte svůj současný dotaz na:
if($query = mysqli_query($connect, "INSERT...
a změňte mysql_error()
na mysqli_error($connect)
jako přepis pro tento blok:
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);
}
}
Jen pro otestování chyby proveďte změny, jak jsem nastínil výše, přičemž uvozovky kolem sloupců ponechte tak, jak je máte nyní. Poté uvidíte chybu, kterou MySQL vyvolá. Potom můžete udělat, jak jsem již nastínil výše, a odstranit uvozovky kolem názvů sloupců nebo je nahradit zpětnými zaškrtnutími.
Výukový program, který jste viděli, může velmi dobře používat zpětné čárky, ale pravděpodobně nebyly dostatečně rozlišitelné, abyste mohli říci, že se skutečně jedná o zpětné čárky a nikoli jednoduché uvozovky.
Váš současný kód je však otevřen pro vložení SQL
. Použijte mysqli
s připravenými výpisy
, nebo CHOP s připravenými výpisy
, jsou mnohem bezpečnější .
Všiml jsem si, že možná ukládáte hesla v prostém textu. Pokud je tomu tak, důrazně se nedoporučuje.
Doporučuji použít CRYPT_BLOWFISH
nebo PHP 5.5 password_hash()
funkce. Pro PHP <5.5 použijte password_hash() compatibility pack
.
Místo toho také:
$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!");
Místo toho byste měli hledat chyby, jak uvádí příručka
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Takže ve vašem případě:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Upravit: a změnil jsem action="register.php"
na action=""
protože používáte celý kód na stejné stránce.
<!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);
}
}
?>