2013-12-06 2 views
1

Данные базы данных верны и работают, я тестировал это несколько раз. База данных существует вместе с таблицей, в которой я пытаюсь извлечь данные из. У меня есть фиктивная информация в базе данных, вот мой код, чтобы проверить, если пользователь в «сетях» баз данных, таблица «пользователи»:php не получает информацию о пользователе из базы данных

<?php 
require 'core/init.php'; 

if (empty($_POST) === false){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if (empty($username) === true || empty($password) === true) { 
     $errors[] = 'You need to enter a username and password.'; 
    } else if (user_exists($username) === false) { 
     $errors[] = 'Username does not exists. Have you registered?'; 
    } else if (user_active($username) === false) { 
     $errors[] = 'Your account is not activated. Please check your email!'; 
    } else { 

    } 

    print_r($errors); 
} 
?> 

Вот код «user_exists ($ Username)» из этой функции

<?php 


function user_exists($username) { 
    $username = sanitize($username); 
    return (mysql_result(mysql_query("SELECT COUNT('user_id') FROM 'users' WHERE 'username' = '".$username."'"), 0) === 1) ? true : false; 
} 

function user_active($username) { 
    $username = sanitize($username); 
    return (mysql_result(mysql_query("SELECT COUNT('user_id') FROM 'users' WHERE 'username' = '".$username."' AND 'active' = 1"), 0) === 1) ? true : false; 
} 
?> 

Sanitize функция:

<?php 
function sanitize($data) { 
    return mysqli_real_escape_string($data); 
} 
?> 

Вот мой вопрос:

Когда я войти в ш с фиктивной информацией - имя пользователя; Пароль (md5 хэшируются через PHPMyAdmin), если дисплеи ошибка:

'Username does not exists. Have you registered?'

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

+0

Заменить одинарные кавычки из имени столбца и имени таблицы с тиком обратной связи '. Также взгляните на эту ссылку: http://dev.mysql.com/doc/refman/5.5/ru/reserved-words.html – vee

+0

@vinodadhikary не изменил ситуацию. – PrivateMufasa

+0

Объедините два ответа ниже :) Edit: Кто-то удалил второй. – Lorenz

ответ

1

Использовать обратные тики для имен столбцов и таблиц, а не кавычек.

"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '".$username."'") 

return (mysql_result(mysql_query("SELECT COUNT('user_id') 
FROM 'users' WHERE 'username' = '".$username."'"), 0) === 1) ? true : false; 
} 

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

Docs

Returns the contents of one cell from a MySQL result set on success, or FALSE on failure.

return (mysql_result(mysql_query("SELECT COUNT('user_id') 
FROM 'users' WHERE 'username' = '".$username."'"), 0) == false) ? false: true; 
} 

Также вы подключаетесь с mysql и использованием mysqli_real_escape_string в функции sanitize. Не смешивайте их.

+0

Это не помогло. Я все еще получаю, что пользователь не существует. – PrivateMufasa

+0

Эта практика кодирования способствует внедрению sql. –

+0

@ JustinE это не живой проект, это учебный проект. – PrivateMufasa

0
function user_exists($username) { 
    $username = sanitize($username); 
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '".$username."'"), 0) == 1) ? true : false; 
} 

function user_active($username) { 
    $username = sanitize($username); 
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '".$username."' AND `active` = 1"), 0) == 1) ? true : false; 
} 

Что было сделано:

  1. Заменено '' для имен столбцов с `

  2. Б == вместо ===

+0

Nope. Не работает. – PrivateMufasa

0

PDO:

function user_exists($username) { 
    $db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => falsse, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
    $stmt = $db->query("SELECT `user_id` FROM `users` WHERE `username` = '".$username."'")); 
    $row_count = $stmt->rowCount(); 
    if($row_count==="1"){return true;}else{return false;} 
} 
+0

Это неправильно! Если вы подсчитаете строки с выражением MySQL COUNT(), она вернет одну строку с количеством строк. Ваш код всегда будет возвращать true. Вам нужно получить первую строку, а затем проверить первый столбец. – Lorenz

+0

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

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