0

我对 SQL 和 PHP 还很陌生。

我正在尝试编写一个简单的登录脚本。我在 HTML 文档中有一个表单,我已经证明将正确的数据发布到所需的 2 个变量中,但是我的脚本在执行 SQL 时失败了......

我还在 mysqlWorkbench 中测试了 SQL,得到了我想要的结果???

请帮忙。

这是我的脚本:

<?PHP

$odbc = mysql_connect('localhost', 'root', '') or die ("could not connect to database");
mysql_select_db('examresults', $odbc)  or die("Could not find database");

// username and password sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 

$sql='SELECT * FROM tuser where username = '.$username.' and password = '.$password.'';

$result = mysql_query($sql, $odbc) or die ("Error in SQL");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

 //If result matched username and password, table row must only equal 1 row
if($count==1)
{   
    header("location:exammenu.php");
}
else 
{
    echo 'username and password do not match';
}
?>
4

4 回答 4

2

查询应如下所示:

 $sql='SELECT * FROM tuser where username = "'.$username.'" and password = "'.$password.'"';
于 2012-11-16T11:48:33.010 回答
2

如果你真的需要使用mysql至少清理你的输入。还要注意 $sql 变量中的引号。这应该有效(尽管未经测试):

<?PHP

$odbc = mysql_connect('localhost', 'root', '') or die ("could not connect to database");
mysql_select_db('examresults', $odbc)  or die("Could not find database");

// username and password sent from form 
$username=mysql_real_escape_string($_POST['username'], $odbc); 
$password=mysql_real_escape_string($_POST['password'], $odbc); 

$sql=sprintf('SELECT * FROM tuser where username = "%s" and password = "%s"', $username, $password);

$result = mysql_query($sql, $odbc) or die ("Error in SQL");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

 //If result matched username and password, table row must only equal 1 row
if($count==1)
{   
    header("location:exammenu.php");
}
else 
{
    echo 'username and password do not match';
}

我建议使用sprintf格式化您的 sql 语句,以便更容易发现此类错误。

于 2012-11-16T11:56:08.813 回答
2

注意mysql_*函数已弃用,您不应再使用它们。您的代码也容易受到 SQL 注入的攻击。

使用mysql_error而不是仅仅打印出“SQL 中的错误”会给我们(和您)一个更详细的 sql 错误消息。但很可能它失败了,因为您忘记" "在查询中放置字符串。

$sql='SELECT * FROM tuser where username = "'.$username.'" and password = "'.$password.'"';
于 2012-11-16T12:01:04.817 回答
1

你可以试试这段代码。我认为它会正常工作。

<?PHP

$odbc = mysql_connect('localhost', 'root', '') or die ("could not connect to database");
mysql_select_db('examresults', $odbc)  or die("Could not find database");

// username and password sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 

$sql="SELECT * FROM tuser where username = '".$username."' and password = '".$password."'";

$result = mysql_query($sql, $odbc) or die ("Error in SQL");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

 //If result matched username and password, table row must only equal 1 row
if($count==1)
{   
    header("location:exammenu.php");
}
else 
{
    echo 'username and password do not match';
}
?>
于 2012-11-16T12:30:29.543 回答