gettingherdone Posted January 14, 2013 Share Posted January 14, 2013 I am trying to take user input and check to see if it is already in a database. The function isUnique($userName, $link) takes the arguments of the given username and a link to the database, and returns true if the username is already in the column userid in the table login. Problem is the function always returns true. Here is the entire program ommiting parts that I believe cannot possible effect the situation here. <?php /*This function checks to see if the username is already in use INPUT: the userName to check for and a link to the database OUTPUT: true if there are no other users registered with userName */ function isUnique($userName, $link) { $result = !!mysqli_fetch_row(mysqli_query($link, 'SELECT `userid` FROM `login` WHERE `userid` = \''.$userName.'\'')); return $result; } echo '<html><head><title>testing</title><body>'; $uName = $_POST['us']; $pass = $_POST['pa']; //database work $link = mysqli_connect("localhost:3306", "root", ""); if(!$link) die('Could not connect to MySQL: '.mysql_error()); $db_selected = mysqli_select_db($link, 'Accounts'); if(!$db_selected) die('Can\'t use Accounts: '.mysql_error()); echo '<br />Using Accounts database<br />'; if(isUnique($uName, $link)) { echo 'username is unique!<br />'; } else { echo 'username is not unique!<br />'; } mysqli_close($link); echo '</body></html>'; ?> "username is not unique!" is always displayed. I also tried this code and it outputs: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, arra Select returned 0 rows $query = mysqli_query($link, 'SELECT `userid` FROM `login` WHERE `userid` = \''.$userName.'\''); if(!$query) { printf("Error: %s\n", mysqli_error($link)); } //else // echo '<br />Query: '.$query.'<br />'; $result = mysqli_fetch_row($query); printf("Select returned %d rows.\n", mysqli_num_rows($result)); I'm using the latest version of WAMP. Thanks in advance. Quote Link to comment Share on other sites More sharing options...
Jessica Posted January 14, 2013 Share Posted January 14, 2013 (edited) You need to check for errors after you query. See my signature. Why do you have !! in your function there? Edit: I see your second set of code. What does the query look like when you echo it? Echo the query string, not the result object. Edited January 14, 2013 by Jessica Quote Link to comment Share on other sites More sharing options...
Barand Posted January 14, 2013 Share Posted January 14, 2013 !! - ridiculous. $result will be false if the query fails due to an error. A query returning no rows is not an error, it just means there were no records matching the criteria Quote Link to comment Share on other sites More sharing options...
Jessica Posted January 14, 2013 Share Posted January 14, 2013 Maybe it's the fever, I can't follow the logic. Quote Link to comment Share on other sites More sharing options...
gettingherdone Posted January 14, 2013 Author Share Posted January 14, 2013 You need to check for errors after you query. See my signature. Why do you have !! in your function there? Edit: I see your second set of code. What does the query look like when you echo it? Echo the query string, not the result object. echo 'Query string: '.'SELECT `userid` FROM `login` WHERE `userid` = \''.$userName.'\''; gives Query string: SELECT `userid` FROM `login` WHERE `userid` = 'NewName' Quote Link to comment Share on other sites More sharing options...
gettingherdone Posted January 14, 2013 Author Share Posted January 14, 2013 !! - ridiculous. $result will be false if the query fails due to an error. A query returning no rows is not an error, it just means there were no records matching the criteria If no rows match I want the function to return true. Quote Link to comment Share on other sites More sharing options...
Jessica Posted January 14, 2013 Share Posted January 14, 2013 So why did you put two of them?? Quote Link to comment Share on other sites More sharing options...
gettingherdone Posted January 14, 2013 Author Share Posted January 14, 2013 So why did you put two of them?? The !! is there because someone told me it will cast to a boolean. I'm not sure if this works but I'm open to any ideas. Quote Link to comment Share on other sites More sharing options...
Jessica Posted January 14, 2013 Share Posted January 14, 2013 Look in the manual. !! Is for or in a comparison. ! Is not. Quote Link to comment Share on other sites More sharing options...
Barand Posted January 14, 2013 Share Posted January 14, 2013 function isUnique($userName, $link) { $result = mysqli_query($link, 'SELECT `userid` FROM `login` WHERE `userid` = \''.$userName.'\'')); return mysqli_num_rows($result) == 0; } Quote Link to comment Share on other sites More sharing options...
gettingherdone Posted January 14, 2013 Author Share Posted January 14, 2013 Aha! Thanks! It works! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.