[英]Very Simple PHP + MySql Login Form Not Working?
我当前正在构建一个非常非常基本的登录脚本,该脚本基本上连接到数据库,并检查用户在表单中输入的值是否匹配。 但是由于某种原因,单击提交按钮时,我的代码拒绝执行任何操作! 这是代码...
<?php
mysql_connect("localhost", "username", "password");
mysql_select_db("dbname");
?>
<body>
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
$num = mysql_num_rows($result);
if($num == 0){
echo "Bad login, go <a href='login.php'>back</a>.";
}else{
session_start();
$_SESSION['username'] = $username;
header("Location: admin.php");
}
}else{
?>
<form action='login.php' method='post'>
Username: <input type='text' name='username' /><br />
Password: <input type='password' name='password' /><br /><br />
<input type='submit' value='Login' />
</form>
<?php
}
?>
</body>
有任何想法吗?
您正在检查
if(isset($_POST['submit'])){
...但是不会设置$_POST['submit']
,因为您没有给任何表单控件一个name="submit"
属性。
将提交按钮更改为此:
<input type='submit' name='submit' value='Login' />
还请清理数据库输入 ,最好使用参数化查询。
简单一试
<input type='submit' name='submit' value='Login' />
代替
<input type='submit' value='Login' />
希望这可以帮助!
编辑:您尚未命名为提交
DaveRandom给出的答案对我来说似乎是最有效的。
但是,您的代码中有几个错误需要首先解决。
您不清理输入内容,这可能是致命的,尤其是在登录表单中。
采用
mysql_real_escape_string($_POST['username']));
mysql_real_escape_string($_POST['username']));
并采取其他措施避免SqlInjection。
您的表单是否重定向到正确的页面? 如果它依赖的页面名称是login.php,则它应该可以工作,但是您也可以使用
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
无论如何,我认为在自我页面中处理不是一个好习惯,因为您应该始终重定向到处理程序页面。
您是否将表单发布到同一页面?
如果是这样,请尝试删除action =“ login.php”。
成功登录后使用header(..)
将不起作用。 这是因为可能已经向浏览器发送了几个字符。 您需要确保不发送任何字符。 这种方式:
将if(isset($_POST['submit']))
更改为if(isset($_POST['username']))
。 这是因为您submit
输入没有“名称”字段。 测试具有的东西。
正如其他人指出的那样,您的脚本可以进行SQL注入。 使用以下任一方法进行修复
mysql_real_Escape_string($_POST['username']);
这是不对的,因为您已经准备好输出一些内容,因此您的会话将受到影响。
您的action =“ login.php”必须指向该文件,例如,您的示例脚本已保存在login.php中,就可以了。 如其他答案所述,您必须设置name="something"
才能通过$_POST['something']
访问它
<?php // some php scripting ?>
<!-- blank lines also counts as output -->
<body>
<?php session_start(); header("What ever"); ?>
</body>
还建议将session_start()
放在代码顶部。
所以尝试
<?php session_start(); ... ?>
登录页面(php-mysql)的实现如下所示:
<?php
if (!isset($_SESSION)) {
session_start();
}
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
if (isset($_POST['username'])) { //from form username textbox
$loginUsername=$_POST['username'];
$password=$_POST['password'];
$MM_fldUserAuthorization = "access_level"; // from db user access-level
$MM_redirectLoginSuccess = "login_success_page.php";
$MM_redirectLoginFailed = "login_failed_page.php";
$MM_redirecttoReferrer = false;
mysql_select_db($DB_NAME, $DB_LINK);
$Login_query=sprintf("SELECT username,password, access_level FROM tbl_user WHERE username=%s AND password=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
$Login = mysql_query($Login_query, $DB_LINK) or die(mysql_error());
$loginFoundUser = mysql_num_rows($Login);
if ($loginFoundUser) {
$loginStrGroup = mysql_result($Login,0,'access_level');
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.