我最近开始恢复我对Web开发的“爱好”并返回PHP。即使我仍觉得我(之前不存在的)技能有点生疏,我已经成功地取得了很大进步。我已经看了很长一段时间这段代码,无法弄清楚为什么这不起作用。这段代码以前有用,所以我很确定我必须删除一些东西,或者我没有注意到一些重要的东西。
无论哪种方式,这都是我目前的PHP代码 结果是,当我登录时,我保持在同一页面上,它似乎没有任何反应。除了页面只是刷新:
function login($db){
if(!isset($_SESSION['user']) || !isset($_SESSION['user']['username'])){
echo "
<form method='post' class='logform'>
<input type='text' class='textlog' placeholder='Username' name='formLoginUser' id='formLoginUser' onkeypress='validateboth(event)' REQUIRED><br><br>
<input type='password' class='textlog' placeholder='Password' id='formLoginPassword' name='formLoginPassword' REQUIRED><br><br>
<div class='logcheck'>
<input type='submit' class='login_bot transparent' value='Login' name='formLoginSubmit' style='float:left;'>
<a class='login_bot transparent' href='index.php?page=createuser' style='float:left; margin-left:5px;'>Create account</a>
<a class='login_bot transparent' href='index.php?page=forgotpassword' style='float:left; margin-left:5px;'>Forgotten password</a>
</div>
</form>
";
if(isset($_POST['formLoginSubmit'])){
if(empty($_POST['formLoginUser'])){
$_SESSION['msg']['warning'][] = "Fill in!!";
if(empty($_POST['formLoginPassword'])){
$_SESSION['msg']['warning'][] = "Password missing!!";
}
if(empty($_SESSION['msg']['warning'])){
$username = $db->real_escape_string($_POST['formLoginUser']);
$password = encrypt(md5($_POST['formLoginPassword']));
$sql = "select * from users
where
username = '{$username}'
and
password = '{$password}'
";
$sqlQuery = $db->query($sql) or die($db->error);
$intQuery = $sqlQuery->num_rows;
if($intQuery == true){
$sqlFetch = $sqlQuery->fetch_object();
$_SESSION['user']['username'] = $sqlFetch->username;
$_SESSION['user']['id'] = $sqlFetch->user_id;
$_SESSION['user']['level'] = $sqlFetch->user_level;
header('location: index.php?page=home');
$_SESSION['msg']['warning'][] = "logged in";
}
}else{
header('location: index.php?page=home');
$_SESSION['msg']['warning'][] = "wrong details";
}
}
}
}
}
我知道这不是数据库的问题,我可以成功注册一个帐户并将其显示在数据库中。
编辑:是的,我正在重定向到同一页面 - 在该页面上我正在调用一个函数来显示一条消息,具体取决于登录是否成功。关键是,我根本没有登录。
调用登录的功能是:
<div id="login-content">
<?php login($db); ?>
</div>
答案 0 :(得分:0)
使用if($intQuery == true)
更改if($intQuery >0)
,因为num_rows返回整数,因为函数的名称定义了它。
你的查询也容易受到sql注入的攻击,而real_escape_string也不是逃避注入的安全方法。有一篇很好的文章here用于防止sql注入。
提示:您可以使用?><?php
跳出PHP代码并在其间键入所需的html,以防止有线错误并拥有清晰的代码。