Poniższy kod po prostu deklaruje zmienną łańcuchową, która zawiera zapytanie MySQL:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Nie wykonuje zapytania. Aby to zrobić, musisz użyć kilku funkcji, ale najpierw wyjaśnię coś innego.
NIGDY NIE UFAJ WPROWADZANIU UŻYTKOWNIKA :Nigdy nie należy dołączać danych wejściowych użytkownika (takich jak dane wejściowe formularza z $_GET
lub $_POST
) bezpośrednio na Twoje zapytanie. Ktoś może ostrożnie manipulować danymi wejściowymi w taki sposób, aby spowodować duże szkody w Twojej bazie danych. Nazywa się to wstrzykiwaniem SQL. Więcej na ten temat możesz przeczytać tutaj
Aby chronić swój skrypt przed takim atakiem, musisz użyj przygotowanych oświadczeń. Więcej o przygotowanych wyciągach tutaj
Dołącz przygotowane oświadczenia do swojego kodu w następujący sposób:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Zauważ, jak ?
są używane jako symbole zastępcze dla wartości. Następnie powinieneś przygotować oświadczenie za pomocą mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Następnie rozpocznij wiązanie zmiennych wejściowych z przygotowaną instrukcją:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
I na koniec wykonaj przygotowane instrukcje. (Tutaj ma miejsce faktyczne wstawianie)
$stmt->execute();
UWAGA Chociaż nie jest to część pytania, zdecydowanie radzę, aby nigdy nie przechowywać haseł w postaci zwykłego tekstu. Zamiast tego powinieneś użyć password_hash
przechowywać skrót hasła