PHP登录表单无法正常工作

时间:2014-09-10 16:29:53

标签: php mysql database authentication login

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

的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>

2 个答案:

答案 0 :(得分:0)

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

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

应该是

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

答案 1 :(得分:0)

我也会改变这一行

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等于你的。{1}}。要对此进行测试,请执行var_export( $q ),如果其为false则将其与if语句

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

我总是这样做(if中的内联赋值),就像我上面提到的那样,因为很明显你正在分配$q然后测试它。