我旁边有一个文本框UserName
和一个Check Availability
按钮.....我通过传递UserName
文本框值来检查可用性.....但它没有似乎工作......
这是我在做什么?
echo $UserName = $_GET['CheckUsername'];
$_SESSION['state'] = $State;
$queryres = "SELECT dUser_name FROM tbl_login WHERE dUser_name='$UserName'";
$result = mysql_query($queryres,$cn) or die("Selection Query Failed !!!");
if($result==true) // this condition doesn't seem to work
{
echo "User Name Available";
}
else
{
echo "Sorry user name taken";
}
答案 0 :(得分:15)
请确保您正在逃避MySQL的输入。直接从$_GET
,$_POST
或任何其他超级全球传递数据是不安全的。
// Escape any quote characters in the input
$UserName = mysql_real_escape_string($_GET['CheckUsername'], $cn);
$_SESSION['state'] = $State;
$queryres = "SELECT dUser_name FROM tbl_login WHERE dUser_name='$UserName' LIMIT 1";
$result = mysql_query($queryres, $cn) or die("Selection Query Failed !!!");
if (mysql_num_rows($result) > 0) {
echo 'User name exists in the table.';
} else {
echo 'User name does not exist in the table.';
}
答案 1 :(得分:4)
if ($result == false)
{
echo "not available";
}
else
{
echo "available";
}
你的原因不起作用是因为$ result的值不是真的,因为它包含一个数组。你可以通过反转语句来先检查错误。
你也可以用mysql_num_rows
来做if (mysql_num_rows($queryres) > 0)
{
echo "User name taken";
}
答案 2 :(得分:1)
返回值
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。
首先,你的if语句永远不会评估为false,因为你在mysql_query上有“或死”(当mysql_query返回false时会激活)。
但是你的if条件完全错了,因为你不想知道查询是否失败,但是是否返回了任何结果。为此你可能想要使用mysql_num_rows。
作为一个小提示,由于您只需要知道是否有1个匹配的用户名,请在查询结尾添加“LIMIT 1”。然后mysql会在第一次匹配时返回,而不是搜索整个表以获得更多结果。
作为替代方法,您可以使用COUNT()查询,并检查结果集中返回的数字。
答案 3 :(得分:1)
虽然这个问题已经有了足够的答案,但我会给你另一种选择。只需删除IF条件中的“== true”,它将自动测试是否存在值而不是布尔值比较。
if($result) // this condition will now work
{
echo "User Name Available";
}
else
{
echo "Sorry user name taken";
}
如果要保留代码的签名,可以使用此方法。
答案 4 :(得分:1)
执行查询后,只需要返回mysql_num_rows($ result),即可获取行数。
答案 5 :(得分:1)
$queryres = "SELECT dUser_name FROM tbl_login WHERE dUser_name='$UserName'";
$result = mysql_query($queryres,$cn) or die("Selection Query Failed !!!");
if (mysql_num_rows($result))
{
echo "Username available";
}
else
{
echo "Username not available";
}