我找到了一个mysqli和php登录页面的教程,以便添加到一个网站,我一步一步地跟着那个教程,花了至少7个小时试图找出它为什么不起作用,无休止地搜索谷歌但没有。
代码似乎工作但似乎两个变量不会声明并且它正在跳过它们,我将输入一个电子邮件和密码,点击登录,然后生病得到通知'电子邮件或密码不正确'数据库设置正确并链接它似乎是一行代码,我无法弄明白。
任何输入都是受欢迎的,即使它是基本的东西,我只是学习这些东西,因此我正在关注的教程,只是想知道什么是错的,为什么。
感谢。
Html代码
<!DOCTYPE html><?php session_start();?>
<html>
<head>
<title>Sign In</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/style.css"/>
</head>
<body>
<div id="container">
<header>
<a href="index.html"><img src="images/Header.jpg" alt="logo" /></a>
</header>
<header>
<a href="login.html"><img src="images/login.jpg" alt="login" /></a>
<a href="https://www.facebook.com/ArcticMonkeys"><img src="images/Facebook.jpg" alt="FB" /></a>
<a href="https://twitter.com/arcticmonkeys"><img src="images/Twitter.jpg" alt="Twitter" /></a>
</header>
<div class="menu">
<div align="center">
<ul class="list">
<li class="item"><a href="index.html">Home</a>
<li class="item"><a href="gallery.html">Gallery</a>
<li class="item"><a href="videos.html">Videos</a>
<li class="item"><a href="discography.html">Discography</a>
<li class="item"><a href="register.html">Register</a>
<li class="item"><a href="#">About</a>
<ul class="list">
<li><a href="alex.html">Alex Turner</a></li>
<li class="list">
<a href="matt.html">Matt Helders</a>
<ul class="list">
<a href="jamie.html">Jamie Cook</a>
<ul class="list">
<a href="nick.html">Nick O'Malley</a>
<ul class="list">
<a href="andy.html">Andy Nicholson</a>
<ul class="list">
</ul>
</li>
</div>
</div>
<div align="center"><BR><BR><BR><BR>
<body id="body-color">
<div id="Sign-In">
</head>
<form action="login.php" method="post">
<table width="500" align="center">
<tr align="center">
<td colspan="3"><h2>User Login</h2></td>
</tr>
<tr>
<td align="right"><b>Email</b></td>
<td><input type="text" name="email" required="required"/></td>
</tr>
<tr>
<td align="right"><b>Password:</b></td>
<td><input type="password" name="pass" required="required"></td>
</tr>
<tr align="center">
<td colspan="3">
<input type="submit" name="login" value="Login"/>
</td>
</tr>
</table>
</form>
<br><br>
<br><br>
<H3>If you do not have an account please register <a href="register.html">HERE</a><br>otherwise access is restricted to member pages<h3>
</div>
</body>
</html>
这是php代码
<!DOCTYPE html><?php session_start();?>
//Forgot this line when first posting //
<?php
// establishing the MySQLi connection
$con = mysqli_connect("localhost","root","","info");
if (mysqli_connect_errno())
{
echo "MySQLi Connection was not established: " . mysqli_connect_error();
}
// checking the user
if(isset($_POST['login'])){
$email = mysqli_real_escape_string($con,$_POST['email']);
$pass = mysqli_real_escape_string($con,$_POST['pass']);
$sel_user = ("select * from users where user_email='$email' AND user_pass='$pass'");
//This is where i think my problem is, $email and $pass are highlighted grey
instead of how normally declared variables would look. //
$run_user = mysqli_query($con, $sel_user);
$check_user = mysqli_num_rows($run_user);
if($check_user>0){
$_SESSION['user_email']=$email;
echo "<script>window.open('home.php','_self')</script>";
}
else {
echo "<script>alert('Email or password is not correct, try again!')</script>";
}
}
?>
以下是截图链接,可能会更清晰[http://imgur.com/bX6HSmD,qFvyTGK,xEEiBi6,yAEvqAR,OdgRYFZ,U48OWkh]
答案 0 :(得分:6)
您的屏幕截图的密码列为user_password
,但您的查询中的列为user_pass
。
AND user_pass='$pass'
^^^^^^^^^
检查错误后会发出,未知列。
正如我在评论中提到的,将or die(mysqli_error($con))
添加到mysqli_query()
。
修改强>
已经提到过,但我在这里包含了这个,如果其中一些注释在密码存储和准备好的语句方面被删除了。
由于您似乎是新手,因此最好开始学习使用正确的散列和安全查询。
以纯文本格式存储密码并不安全,无论如何都不能在线使用,或者任何人都应该侵入您自己的PC;非常沮丧。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
另外,关于SQL注入,use mysqli
with prepared statements或PDO with prepared statements,,它们更安全。
答案 1 :(得分:-1)
在页面顶部使用if(session_id() == "")
{session_start();}
,
答案 2 :(得分:-1)
您需要在所有使用会话的PHP脚本中启动会话。在致电session_start();
之前使用$_SESSION
,然后将$_SESSION
设置为所需的值。