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