Всем привет, пытаюсь проверить логин на занятость, вот код: PHP: if(isset($_POST['register'])){ $sel = "SELECT * FROM users WHERE login = '$login'"; $res = mysql_query($sel); $num = mysql_num_rows($res); if($num == 0) { $login = $_POST['e_login']; $name = $_POST['e_name']; $email = $_POST['email']; $password = $_POST['e_password']; $r_password = $_POST['e_r_password']; if($password == $r_password){ $password = md5($password); $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error()); header("location:/index.php"); } else{ die ('Такой логин уже используется'); } } else { die('Пароли не своподают'); } }
так? PHP: $res = $dbh->query("SELECT email FROM users WHERE login= {$login}"); $l_records = $res->fetch(PDO::FETCH_ASSOC); if ($l_records) echo "login занят!";
как мне этот PDO пихнуть к себе в код: PHP: if(isset($_POST['register'])){ $sel = "SELECT * FROM users WHERE login = '$login'"; $res = mysql_query($sel); $num = mysql_num_rows($res); if($num == 0) { $login = $_POST['e_login']; $name = $_POST['e_name']; $email = $_POST['email']; $password = $_POST['e_password']; $r_password = $_POST['e_r_password']; if($password == $r_password){ $password = md5($password); $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error()); header("location:/index.php"); } else{ die ('Такой логин уже используется'); } } else { die('Пароли не своподают'); } }
Подкюченние PHP: $host = '127.0.0.1'; $db = 'test'; $user = 'root'; $pass = ''; $charset = 'utf8'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); И заменяешь у себя где запрос к БД ( $sel="SELECT * FROM users WHERE login = '$login'"; ) на PHP: $query = $pdo->prepare("SELECT * FROM users WHERE login = :login LIMIT 1"); $query->bindParam(':login', $login, PDO::PARAM_STR, 12); $query->execute(); $results = $query->fetch();
Так должно выглядеть? PHP: if(isset($_POST['register'])){ $query = $pdo->prepare("SELECT * FROM users WHERE login = :login LIMIT 1"); $query->bindParam(':login', $login, PDO::PARAM_STR, 12); $query->execute(); $results = $query->fetch(); $login = $_POST['e_login']; $name = $_POST['e_name']; $email = $_POST['email']; $password = $_POST['e_password']; $r_password = $_POST['e_r_password']; if($password == $r_password){ $password = md5($password); $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error()); header("location:/index.php"); } else{ die ('Такой логин уже используется'); } } else { die('Пароли не своподают'); } }
Так не должно выглядеть, должно быть так как написано тут: mysqli_query() PDO::query() https://php.ru/manual/function.mysql-query.html
Проверку сделай после $results=$query->fetch(); PHP: if(! $result) { $login = $_POST['e_login']; $name = $_POST['e_name']; $email = $_POST['email']; $password = $_POST['e_password']; $r_password = $_POST['e_r_password']; if($password == $r_password){ $password = md5($password); $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error()); header("location:/index.php"); } else { die("Password doesn't match") } } else { die('Login is using') } Только этот тоже замени на pdo PHP: $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error());
Вот весь код, имеются ошибки? PHP: <?php $host = '127.0.0.1'; $db = 'скрыто'; $user = 'скрыто'; $pass = 'скрыто'; $charset = 'utf8'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); if(isset($_POST['register'])){ $query = $pdo->prepare("SELECT * FROM users WHERE login = :login LIMIT 1"); $query->bindParam(':login', $login, PDO::PARAM_STR, 12); $query->execute(); $results = $query->fetch(); if(! $result) { $login = $_POST['e_login']; $name = $_POST['e_name']; $email = $_POST['email']; $password = $_POST['e_password']; $r_password = $_POST['e_r_password']; if($password == $r_password){ $password = md5($password); $query = $link->prepare("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')"); header("location:/index.php"); } } else { die('Login is using') } } else { die('Пароли не своподают'); } ?>
Имеются. Нет обязательной проверки, что пришли нужные данные. Отправив POST запрос с параметром register, можно получить уйму ошибок. Для себя, чтобы понять, скачайте готовый модуль регистрации и входа на сайт и посмотрите логику скрипта.
я уже одному ответил по схожему посту: https://php.ru/forum/threads/oshibka-v-podkljuchenij-bd.70530/#post-568503 --- Добавлено --- а по делу, юзай функции: https://php.net/manual/ru/function.filter-input-array.php https://php.net/manual/ru/function.password-hash.php https://php.net/manual/ru/function.password-verify.php после функции header, всегда юзай https://php.net/manual/ru/function.exit.php это логическое де****, фильтры в помощь. Место данной строки, пропиши PHP: if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) или аналог ( в чем крутость куй знает ): PHP: if ( filter_input ( INPUT_SERVER, 'REQUEST_METHOD' ) === 'POST' ) про уязвимость запроса при впихивании туда данных думаю бессмысленно балаболить. --- Добавлено --- теперь про говно... обратим внимание на переменную $login PHP: <?php /* ... */ $query -> bindParam (':login', $login, PDO::PARAM_STR, 12 ); $query -> execute(); $results = $query -> fetch(); if ( !$result ) { $login = $_POST['e_login']; /* ... */ Это же гениально просто ! Как значение в логин попадет если уже требуем чтобы запрос ИСТИНУ нам выдал ? А мы еще fetch юзаем не верно! Ммм... а разве у тебя не должно было вовсе ошибку выдасть call undefined fun fetch ? лови https://php.net/manual/ru/mysqli-stmt.fetch.php --- Добавлено --- Давай преть тем как юзать какую - либо функцию, будем читать по ней документацию, что и как с ней работать ?