2012-11-12 96 views
0

我正在从我的数据库中选择数据,并且仍在说我在游戏中。当我不是,为我检查。PHP和MySQL从数据库中选择

任何线索如何解决这个问题?

 $moneda = (CMS == 'uber' ? $users->GetUserVar(USER_ID, moneda) : $myrow[moneda]); 
     $isonline = mysql_query("SELECT `online` FROM `users` WHERE `username` = ".$_POST['Naam'].""); 
     $error = array(); 
     if($isonline == 1) 
       $error[] = "De ander moet uit het hotel gaan voordat je belpixels kunt overschrijven."; 
+3

您的代码对于SQL注入非常有用。请先解决这个问题。见[这里](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php) –

+0

'$ isonline'从你的查询中获得结果集 - 只会如果SQL查询失败,则为false。你需要首先获得查询的输出,像mysql_fetch_array。 – andrewsi

+0

那么最好的方法是如何保护它,我没有得到“看到这里”页面的线索。 –

回答

1
$isonline = mysql_query("SELECT `online` FROM `users` WHERE `username` =".$_POST['Naam'].""); 

$ isonline是不是你的answer..dude它包含结果对象,而不是结果。

$row=mysql_fetch_assoc($isonline); 
if($row['online']==1){} 

和使用的mysql_query是长期弃用,改用PDO

$isonline = mysql_query("SELECT online FROM ..

SQL你从来没有把周围的列名报价...摆脱那些的并且在用户名值附近得到一个:

$isonline = mysql_query("SELECT online FROM users WHERE username ='".$_POST['Naam']."'"); 
+0

这不是为我工作让我告诉你整个代码,也许你可以做些什么? –

+0

'' –

+0

摆脱''在线 – geekman

0

mysql_query永远不会返回单个用户记录;它会返回一个PHP资源,即使您知道SQL查询只会返回一条记录。

换句话说:$ isonline不是该变量的正确名称。取名类似$ online_query_results,然后调用

$user_record = mysql_fetch_array($online_query_results); 

这将返回第一个(在这种情况下,只),结果行。然后,代替测试$ isonline,测试

$user_record['online'] 
+0

这也不起作用。如果用户在游戏中,它应该返回一个错误,当在线数据库设置为1时,该错误仍然不会发生。 –

+0

您可以在此代码中放入日志记录语句,以查看您的db_query语句实际返回的内容或从mysql_fetch_array?例如:'printr($ user_record)'? (切勿在活动网站上使用printr对数据库记录结果;输出将包含数据库用户名和密码)。 如果建议的更改不起作用,最可能的原因是因为数据库查询正在返回零对象或空对象。 – chapka

+0

请发布您现在使用的实际查询字符串。如果你使用这个查询字符串它工作吗? - > 'SELECT online FROM {users} WHERE username = {$ _POST ['Naam']}' – chapka