Это не дает конкретного ответа на ваш вопрос «почему это не работает», но решает гораздо более серьезную проблему: вся ваша система - зияющая дыра в безопасности .Извините, но это правда.
$insert = "INSERT INTO users (username, password)
VALUES ('".$_POST['username']."', '".$_POST['pass']."')";
$add_member = mysql_query($insert);
Похоже, вы вставляете пароль в базу данных в виде простого незашифрованного текста.Это очень плохая идея .Если ваша база данных каким-то образом скомпрометирована, то все пароли ваших пользователей находятся здесь и могут быть легко украдены.Большинство пользователей используют один и тот же пароль на многих сайтах, поэтому не только ваш собственный сайт подвергается риску, но также могут быть и учетные данные вашего пользователя на других сайтах.
Кроме того, ваш код широко открыт для SQL-инъекции .Вы ничего не делаете для очистки входных данных при проверке имен пользователей.Для злоумышленника было бы несложно вставить некоторый код в поле имени пользователя вместо имени пользователя и получить все записи вашей базы данных.Если мы установим имя пользователя как ' or '1'='1
, то ваш запрос станет следующим:
SELECT username FROM users WHERE username = '' or '1'='1'
Это вернет все имена пользователей, и уязвимость может быть использована в дальнейшем для выявления всех ваших незашифрованных паролей!Не очень безопасный способ обработки данных ваших клиентов, и опасный, потому что все ваши данные могут быть украдены, а затем стерты, без входа в систему.
Дело в том, что многие разработчики - даже те, кто имеетсамообучающийся опыт, не говоря уже о человеке, который раньше почти не использовал PHP - неправильно хранит пароли .И для безопасности вашего приложения, и для ваших пользователей было бы намного безопаснее, если бы вы занялись написанием собственной системы аутентификации и использовали что-то, что хорошо зарекомендовало себя и работает.В PHP-библиотеках для аутентификации пользователей есть сообщение о переполнении стека (не слушайте парня, который говорит, что нужно бросить свой собственный - его собственный пример изобилует уязвимостями, подтверждая мою точку зрения).