php
  • sql
  • 2012-06-08 5 views 1 likes 
    1

    Я хочу проверить, есть ли имя пользователя и пароль в моей базе данных или нет, но у моего кода есть проблемы, и я не смог его найти.проверить имя пользователя и пароль

    $result=mysql_query("SELECT C_ID FROM customer WHERE C_NNAME ='".$_POST['username']."' AND C_PASS = '".$_POST['pass']."'"); 
    
    if($result=='FALSE'){ 
        $word .= select_key('keyword', 'K_ID', 'password'); 
    } 
    else 
    { 
        $word.= select_key('keyword', 'K_ID', 'Please Complete Feilds');  
    } 
    
    +1

    Пожалуйста, отформатируйте свой вопрос, чтобы сделать его доступным для чтения, а также, пожалуйста, укажите, что должно произойти и что на самом деле происходит? –

    +5

    [Таблицы Бобби] ​​(http://bobby-tables.com/) снова едет; [не использовать mysql_query] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

    +0

    Прекратите использовать mysql_ * и начните использовать PDO или mysqli (вы очень уязвимы для SQL-инъекции (как упоминает Квентин). Также вы не имеете в виду $ _POST ['username'] вместо $ post ['username']? – Bono

    ответ

    2

    Другие, чем ваши проблемы инъекции SQL, вы используете суперглобальном массив $_POST неправильно (как вы назвали его $post).

    Попробуйте использовать правильное имя переменной суперглобала - и инъекции Google для SQL.

    +0

    Вы не знаете этого наверняка, хотя, вероятно, это случай, судя по этому вопросу, существует _is_ a что такая переменная существует и содержит те же данные, что и '$ _POST' – blockhead

    +0

    @blockhead. Вы абсолютно правы. Я делаю это предположение на основе остальной части его кода. – Repox

    1
    $name = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['pass']); 
    $result = mysql_query("SELECT C_ID FROM customer WHERE C_NNAME ='$name' AND C_PASS = '$password'"); 
    
    if(mysql_num_rows($result) > 0) { 
        // There's a match 
    } else { 
        // There's no match 
    } 
    

    Также, пожалуйста, не используйте функции mysql_, используя mysqli_ или сохраняя процедуры. Код не защищен от SQL-инъекции, не рекомендуется использовать его на общедоступном веб-сайте.

    +0

    Использование' mysqli' функций над функциями 'mysql' не гуара ntee против атак SQL Injection, поскольку вы все равно можете писать небезопасный SQL с помощью mysqli. Использование подготовленных операторов в API 'mysqli' является одним из средств защиты. – user7116

    +0

    Я ничего не говорил о функциях mysqli_, которые лучше предотвращали внедрение sql. Я сказал, что вышеуказанный код небезопасен. Подготовленные заявления - это способ пойти, чтобы помочь предотвратить SQL-инъекцию. –

    0

    Вам нужно использовать mysql_num_rows, чтобы узнать, были ли какие-либо результаты.

    Смежные вопросы