PHP登录表单工作不正常


PHP login form not working properly

我正在尝试创建简单的登录表单,每次单击提交按钮,它都会转到其他页面,即使我的登录信息不正确。这是我的代码,有人能帮我解决这个问题吗?谢谢

login.php

<?php
session_start();
if(isset($_SESSION['username'])) {
echo '<script type="text/javascript"> window.location="index2.php";</script>';
}
if(isset($_POST['submit'])) {
include('connection.php');
$user = mysql_real_escape_string($_POST['username']);
$pass = md5($_POST['password']);
if($user && $pass) {
$sql="SELECT * FROM korisnici WHERE username = '" . $user . "' and password = '" . $pass . "'";
if (!$q=mysql_query($sql))
{
echo "<p>Error</p>" . mysql_query();
die();
}
if (mysql_num_rows($q)==0)
{
echo '<script type="text/javascript">alert("Username i password incorrect!");     window.location="login.php";</script>';
} 
else {
$_SESSION['username'] = $_POST['username'];
echo "<script language='javascript'>alert('everything works')</script>";
}
} else {
echo "<script language='javascript'>alert('Fill out both fields!')</script>";
}
}
?>
<head>
<?php require("connection.php") ?>
</head>
<body>
<div id="wrapper">  
<form action="login.php" method="POST">
Username: <input type="text" name="username">
Password:&nbsp <input type="password" name="password">
<input type="submit" id="submit" value="LOGIN" name="submit" class="button" />
</form>
</div>
</body>
</html>

connection.php

<?php
$mysql_server = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_db = "comment";
if (!$db=mysql_connect($mysql_server, $mysql_user, $mysql_password)) {
die ("<p>Failed to connect</p>");
}
if (!mysql_select_db($mysql_db, $db))
{
die ("<p>Wrong database</p>");
} else {
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION='utf8_unicode_ci'");
}
?>

index2.php-仅用于测试它是否适用于

<p>Welcome</p>

正如您在问题中提到的,index2.php文件只包含一个示例HTML文本。您为该文件设置了action属性,是什么原因导致该表单中的所有POST值都将发送到此脚本,所以这就是为什么您在该文件上被重定向,即使数据不正确。

<form action="index2.php" method="POST">

应该是

<form action="" method="post">

我也会更改这行

if (!$db=mysql_connect($mysql_server, $mysql_user, $mysql_password)) {
    die ("<p>Failed to connect</p>");
}

if (false === ( $db = mysql_connect($mysql_server, $mysql_user, $mysql_password))) {
    die ("<p>Failed to connect</p>");
}

也更改这个

if (!$q=mysql_query($sql)){

}

if (false === ( $q = mysql_query($sql)) ){
  ...

我还没有真正测试过这一点,但您可能会"混淆"变量$q——您的查询结果,而!不在那里,可能会告诉php,不是$q等于您的。要测试这一点,请执行var_export( $q ),然后如果它为false,则将其与if语句分离

     $q=mysql_query($sql);
     if( $q ) ... etc.

我总是像上面所说的那样进行它们(if中的内联赋值),因为很明显,您正在分配$q,然后对其进行测试。