Не могу найти ошибку в коде, помогите

190
28 марта 2018, 02:34

Что должно быть: 1. Js отправляет на php сервер информацию из переменной $login 2. Php подключает базу данных и получает значение пароля для этого логина из таблицы accounts 3. Если значение не найдено - php сервер отправляет true, если найден - false 4. Срабатывает определенный код в js, в зависимости от ответа сервера Помогите найти ошибку

Js:

                            $.post('check.php', {'login':login},
                                function(data) {
                                    if(data == "true"){
                                        var div = document.querySelector("#login");
                                        div.className = "true";
                                        div.innerHTML = "Логин свободен!";
                                        alogin = null;
                                        alogin = true;
                                    }else if(data == "false"){
                                        var div = document.querySelector("#login");
                                        div.className = "false";
                                        div.innerHTML = "Логин занят!";
                                        alogin = null;
                                        alogin = false;
                                    }
                            });

Check.php

<?php
$login = $_POST['login'];
include ("db.php");
$result = mysql_query("SELECT password FROM accounts WHERE login='$login'",$db);
if(empty($result)){
    echo("true");
}else{
    echo("false");
}
?>
Answer 1

Во-первых надо экранировать переменные в "" то есть login='{$login}', во-вторых этот код - потенциальная mysql injection, в-третьих mysql_query is deprecated since PHP 5.5, поэтому используйтн mysqli_query (http://php.net/manual/en/mysqli.query.php), в четвертых используйте явное сравнение результата:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$result = $mysqli->query("SELECT * FROM FROM accounts WHERE login='{$login}'");
if($result !== FALSE) {
   echo 1;
   die;
}
echo 2;

Но конечно правильнее всего было бы использовать PDO:

/* Connect to a MySQL database using driver invocation */ $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass';
try {
    $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage(); } 
$sth = $dbh->prepare('SELECT *
    FROM accounts
    WHERE login = ?');
$sth->execute(array($login));
$accounts = $sth->fetchAll();
if(!empty($accounts)) {
    echo 1;    
    die; 
}
echo 0;
READ ALSO
Как реализовать рандом с условием?

Как реализовать рандом с условием?

Есть рандом который видает цифры 0 или 1Нужно между 0 и 1 добавлять блок Angle_Left, а между 1 и 0 Angle_Top как сделать?

158
C# небольшая программа для отправки запросов и хранения данных

C# небольшая программа для отправки запросов и хранения данных

В общем суть заключается в создании небольшого приложения, которое подключается к сайту посредством кук и отправляет запросыПо мимо этого...

178
Некорректное отображение формы Windows Forms C#

Некорректное отображение формы Windows Forms C#

Проблема такая: после изменения размера формы и добавления пары элементов при запуске программы форма отображается меньше, чем нужноСвойство...

190
При создании нескольких классов не могу использовать переменные

При создании нескольких классов не могу использовать переменные

При создании нескольких классов не могу использовать переменные

168