PrivateMufasa
PrivateMufasa

Reputation: 25

php not getting user info from database

The database information is correct and working, I've tested this several times. The database exists along with the table i am trying to pull data out of. I have dummy information in the database, here is my code to check if the user in the database 'network', table 'users':

<?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);
}
?>

Here is the code for the functions '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 function:

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

Here is my issue:

When I login with the dummy information - Username; Password (md5 hashed via phpmyadmin) if displays the error:

'Username does not exists. Have you registered?'

I have tried using a different database, a different user.. nothing works.. Help!

Upvotes: 1

Views: 231

Answers (3)

Mihai
Mihai

Reputation: 26784

Use back ticks for column and table names,not quotes.

"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 returns either a cell or false,so above the condition ===1 is never reached.

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;
}

Also you are connecting with mysql and using mysqli_real_escape_string in the sanitize function. Dont mix them.

Upvotes: 1

Justin E
Justin E

Reputation: 1250

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;}
}

Upvotes: 0

Lorenz
Lorenz

Reputation: 2259

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;
}

What was done:

  1. Replaced '' for column names with `

  2. Used == instead of ===

Upvotes: 0

Related Questions