TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 11-21-2007, 09:57 AM   #1 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default SQL Query??

Hi, I'm reading a tutorial about creating a simple discussion board(on pixel2life.com), and I was kinda confused about this sql statement in his code:

php Code:
// SQL statement

        $sql = "SELECT `id` FROM `".SUFFIX."user` WHERE ((md5(`username`) = '".md5($username)."') && (`password` = '".md5($password)."')) LIMIT 1";

The suffix thingy is defined, if you want to have more than 1 forum on the same db.

But the thing that's confusing me is the
Code:
(md5(`username`) = '".md5($username)."')
The $username will be the $_POST['username'] value, that the user logs in with.

If he md5 that value, it will be something like 13057235ngw8tg34g.
Then he md5 the value of the username row in the db. And if it matches the value of the $_POST input, the value of the username row have to be... the actual username.

So what's the point in md5'ing it? Because he's still storing the username in the db without any hash...? :confused: :confused: :confused: :confused: :confused: :eek:
Tanax is offline  
Reply With Quote
Old 11-21-2007, 10:05 AM   #2 (permalink)
Moderateur
RegEx Guru PHP Guru Top Contributor Advanced Programmer 
 
Salathe's Avatar
 
Join Date: Apr 2007
Posts: 1,393
Thanks: 5
Salathe is on a distinguished road
Default

There is no apparent point, other than wasting CPU cycles on needless MD5ing.
Salathe is offline  
Reply With Quote
Old 11-21-2007, 10:21 AM   #3 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Okey!
Thanks.

One more question, would this be a better query?
php Code:
$sql = sprintf("    SELECT
                                    `"
.$this->db->col['user_id']."`
                                FROM
                                    `"
.$this->db->table['users']."`
                                WHERE
                                    ((`"
.$this->db->col['user_name']."` = '%s') && (`".$this->db->col['user_pass']."` = '%s'))
                                LIMIT 1"
,
                                   
                                $user_name,
                                md5($user_pass));
Tanax is offline  
Reply With Quote
Old 11-21-2007, 10:53 AM   #4 (permalink)
Super Moderator
Advanced Programmer 
 
bluesaga's Avatar
 
Join Date: Sep 2007
Posts: 165
Thanks: 0
bluesaga is on a distinguished road
Default

technically yes, as long as you are using mysql_escape_string on $user_name and $user_pass
__________________
Halo 3 Cheats
bluesaga is offline  
Reply With Quote
Old 11-21-2007, 11:22 AM   #5 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Yes ofcourse, but that's done outside of the query ;)
Thanks
Tanax is offline  
Reply With Quote
Old 11-21-2007, 12:52 PM   #6 (permalink)
Super Moderator
Advanced Programmer 
 
bluesaga's Avatar
 
Join Date: Sep 2007
Posts: 165
Thanks: 0
bluesaga is on a distinguished road
Default

Well personally, i do it in the sprintf when you are defining the variables. But its personal preference really, i guess :)
__________________
Halo 3 Cheats
bluesaga is offline  
Reply With Quote
Old 11-21-2007, 02:12 PM   #7 (permalink)
Moderateur
RegEx Guru PHP Guru Top Contributor Advanced Programmer 
 
Salathe's Avatar
 
Join Date: Apr 2007
Posts: 1,393
Thanks: 5
Salathe is on a distinguished road
Default

I don't know why you're using parentheses and the && comparison operator. Why not just go the normal route?

sql Code:
--- Compare
SELECT a FROM b WHERE ((c = 'c') && (d = 'd')) LIMIT 1
--- With
SELECT a FROM b WHERE c = 'c' AND d = 'd' LIMIT 1

Also, since you're using sprintf, why are you concatenating the table/column names into the formatting string?! Make proper use of the function, or don't use it at all, rather than mixing and matching.

(Use back ticks to wrap table and column names if you want/need to)
php Code:
$szSql = sprintf("SELECT %s FROM %s WHERE %s = '%s' AND %s = '%s' LIMIT 1",
                 $this->db->col['user_id'],
                 $this->db->table['users'],
                 $this->db->col['username']
                 $user_name,
                 $this->db->col['user_pass'],
                 md5($user_pass));
Salathe is offline  
Reply With Quote
Old 11-21-2007, 02:36 PM   #8 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Quote:
Originally Posted by Salathe View Post
I don't know why you're using parentheses and the && comparison operator. Why not just go the normal route?

sql Code:
--- Compare
SELECT a FROM b WHERE ((c = 'c') && (d = 'd')) LIMIT 1
--- With
SELECT a FROM b WHERE c = 'c' AND d = 'd' LIMIT 1

Also, since you're using sprintf, why are you concatenating the table/column names into the formatting string?! Make proper use of the function, or don't use it at all, rather than mixing and matching.

(Use back ticks to wrap table and column names if you want/need to)
php Code:
$szSql = sprintf("SELECT %s FROM %s WHERE %s = '%s' AND %s = '%s' LIMIT 1",
                 $this->db->col['user_id'],
                 $this->db->table['users'],
                 $this->db->col['username']
                 $user_name,
                 $this->db->col['user_pass'],
                 md5($user_pass));
Well, as I said, the SQL QUERY was from a tutorial that I was reading, I just copy pasted it, because I was confused about the md5 thing.

Anyways, I don't know why i do that :| I'll edit it ;)

THanks :)
Tanax is offline  
Reply With Quote
Old 11-21-2007, 06:34 PM   #9 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Okey, I got another problem regarding SQL queries.
I couldn't be bothered creating a new topic just for that when I already have this one..

Quote:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\DB Class 2\includes\classes\user.php on line 126
user.php
php Code:
public function user_is_logged_in() {
           
            $sql = sprintf("    SELECT
                                    `%s`
                                FROM
                                    `%s`
                                WHERE
                                    `%s` = '%s'
                                LIMIT 1"
,
                               
                                $this->db->col['user_id'],
                                $this->db->table['users'],
                                $this->db->col['user_session'],
                                session_id());
                               
            $query = $this->db->query($sql);
           
            if(!mysql_num_rows($query)) {
               
                return false;
               
            }
           
            return true;
           
        }
Tanax is offline  
Reply With Quote
Old 11-21-2007, 06:36 PM   #10 (permalink)
Moderateur
RegEx Guru PHP Guru Top Contributor Advanced Programmer 
 
Salathe's Avatar
 
Join Date: Apr 2007
Posts: 1,393
Thanks: 5
Salathe is on a distinguished road
Default

Echo out the finished $sql string and see if it is malformed.
Salathe is offline  
Reply With Quote
Old 11-21-2007, 06:37 PM   #11 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Okey! I'll try
Tanax is offline  
Reply With Quote
Old 11-21-2007, 06:45 PM   #12 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Returned this:
Code:
SELECT `user_id` FROM `users` WHERE `user_session` = '6dcf1236d6dddf1aed86625d22af0e78' LIMIT 1

The problem(I think) was that it didn't find anything. Because when I did a @mysql_num_rows the code in index.php was working...

php Code:
if(!$tanaxia['user']->user_is_logged_in()) {
echo 'Not logged in!';
}
else {
echo 'Logged in';
}

And it echoed not logged in.. so I guess it worked? :P
Tanax is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 02:40 AM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design