PHP变量没有声明?

时间:2015-08-07 10:54:50

标签: php mysqli

我找到了一个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]

3 个答案:

答案 0 :(得分:6)

您的屏幕截图的密码列为user_password,但您的查询中的列为user_pass

AND user_pass='$pass'
    ^^^^^^^^^

检查错误后会发出,未知列。

正如我在评论中提到的,将or die(mysqli_error($con))添加到mysqli_query()

enter image description here

修改

已经提到过,但我在这里包含了这个,如果其中一些注释在密码存储和准备好的语句方面被删除了。

由于您似乎是新手,因此最好开始学习使用正确的散列和安全查询。

以纯文本格式存储密码并不安全,无论如何都不能在线使用,或者任何人都应该侵入您自己的PC;非常沮丧。

我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack

另外,关于SQL注入,use mysqli with prepared statementsPDO with prepared statements,它们更安全

答案 1 :(得分:-1)

在页面顶部使用if(session_id() == "") {session_start();}

之前的任何内容

答案 2 :(得分:-1)

您需要在所有使用会话的PHP脚本中启动会话。在致电session_start();之前使用$_SESSION,然后将$_SESSION设置为所需的值。