Jest tu kilka rzeczy nie tak.
Używasz niewłaściwych identyfikatorów dla Twoich kolumn w (i będących cudzysłowami):
('id', 'username', 'password', 'email')
usuń je
(id, username, password, email)
lub użyj backticków
(`id`, `username`, `password`, `email`)
mysql_error()
powinien był rzucić Ci błąd, ale nie z powodu:
- Mieszasz interfejsy API MySQL z
mysqli_
do połączenia, a następniemysql_
w zapytaniu.
Te dwa różne interfejsy API nie mieszają się ze sobą.
Użyj mysqli_
wyłącznie i zmień obecne zapytanie na:
if($query = mysqli_query($connect, "INSERT...
i zmień mysql_error()
do mysqli_error($connect)
jako przeróbkę tego bloku:
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);
}
}
Wystarczy przetestować błąd, wprowadź zmiany, jak opisałem powyżej, zachowując cytaty wokół swoich kolumn tak, jak masz je teraz. Zobaczysz wtedy błąd, który zgłosi MySQL. Następnie możesz zrobić to, co już opisałem powyżej i usunąć cudzysłowy wokół nazw kolumn lub zastąpić je backtickami.
W samouczku, który widziałeś, mogły być używane znaki wsteczne, ale prawdopodobnie nie były wystarczająco rozpoznawalne, abyś mógł stwierdzić, że rzeczywiście były to znaki wsteczne, a nie pojedyncze cudzysłowy.
Jednak Twój obecny kod jest otwarty na wstrzyknięcie SQL
. Użyj mysqli
z przygotowanymi zestawieniami
lub PDO z przygotowanymi oświadczeniami
, są znacznie bezpieczniejsze .
Zauważyłem, że możesz przechowywać hasła w postaci zwykłego tekstu. Jeśli tak jest, jest to wysoce odradzane.
Zalecam użycie CRYPT_BLOWFISH
lub PHP 5.5 password_hash()
funkcjonować. Dla PHP <5.5 użyj password_hash() compatibility pack
.
Ponadto zamiast robić:
$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!");
Zamiast tego powinieneś sprawdzać błędy, tak jak stwierdza instrukcja
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
Więc w twoim przypadku:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
Edytuj: i zmieniłem action="register.php"
do action=""
ponieważ używasz całego kodu na tej samej stronie.
<!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);
}
}
?>