Следният код просто декларира низова променлива, която съдържа MySQL заявка:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Не изпълнява заявката. За да направите това, трябва да използвате някои функции, но нека първо обясня нещо друго.
НИКОГА НЕ СЕ ДОВЕРЯВАЙТЕ НА ВЪВЕДЕНАТА ПОТРЕБИТЕЛ :Никога не трябва да добавяте потребителско въвеждане (като въвеждане на формуляр от $_GET
или $_POST
)директно към вашето запитване. Някой може внимателно да манипулира входа по такъв начин, че да причини големи щети на вашата база данни. Това се нарича SQL инжектиране. Можете да прочетете повече за него тук
За да защитите скрипта си от такава атака, вие трябва използвайте Подготвени отчети. Повече за подготвените отчети тук
Включете подготвени изрази към вашия код по следния начин:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Забележете как ?
се използват като контейнери за стойностите. След това трябва да подготвите израза с помощта на mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
След това започнете да обвързвате входните променливи към подготвения оператор:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
И накрая изпълнете подготвените отчети. (Тук се извършва действителното вмъкване)
$stmt->execute();
ЗАБЕЛЕЖКА Въпреки че не е част от въпроса, горещо ви съветвам никога да не съхранявате паролите в чист текст. Вместо това трябва да използвате password_hash
за съхраняване на хеш на паролата