2012-01-16 144 views
0

我看过previos未定义的错误问题,以查看是否可以找到对我的问题的帮助,但似乎无法解决问题。 所以,当我尝试登录用户,我得到一个错误,指出未定义指数: 不知道为什么即时得到这个消息,我的login.php页面上Php登录错误 - 注意:未定义的索引:

我有一个数据库和表称为用户数据插入

这是我用来连接到数据库

conn.php

<?php 
    session_start(); 
    $dbhost = "127.0.0.1"; // my database 
    $dbname = "fxdme"; 
    $dbuser = "root"; 
    $dbpass = ""; 

    $mysqli = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("MySQL Error: " .  mysqli_error("Cant Connect")); 

    ?> 

登录脚本

的login.php

<?php include 'template/header.php';?> 

<form action="login.php" method="POST"> 
    User Name: <input type="text" name="username" /> 
    Password: <input type="password" name="password"/> 
    <input class="submit" name="submit" type="submit" value="Log In"/> 
</form>  


<?php 

$result=$mysqli->query('SELECT * FROM users WHERE username = "' . 
$_POST['username'] . '" AND password = "' . $_POST['password'] . '"'); 

//set session user 
$row = $result->fetch_assoc(); 
$_SESSION['user_id'] = $row['id']; 

if ($_SESSION['user_id']) {  
    echo "You are logged in, $session_username. <a href='logout.php'>Log out</a>"; } 
else { 
    echo " cant log in"; 
} 
?> 

//索引页

我的索引页 的index.php

//in the template header is where Im calling my conn file 
<?php include 'template/header.php'; ?> 

<?php 
if (isset($_GET['invalid'])) {   
    echo "<tr><td colspan='2' align='right'>Invalid login.</td></tr>";  
} 
?> 

林试图获得固定的错误,所以我不担心SQL注入在这一刻。我只是想能够登录,并在以后担心其他的东西。

+1

你检查,如果你有在查询数据库之前页面上的帖子?例如:(if(isset($ _ POST [“login”]))) – amd 2012-01-16 10:41:31

+0

什么索引是undefined? – 2012-01-16 10:43:13

+0

发布引发的确切错误的副本。 – JRSofty 2012-01-16 10:43:27

回答

4

如果用户名不在post变量中,您会发现$_POST["username"]将返回无效索引。

我通常会创建一组变量来保存我的帖子变量,这样我可以在你的查询语句之前先做

所以数据的验证和标准化

$username=(isset($_POST) && isset($_POST["username"]) ? $_POST["username"] : ""; 
$password=(isset($_POST) && isset($_POST["password"]) ? $_POST["password"] : ""; 

然后使用$ username和$密码在您的查询中。你可以将前面的语句变成一个传入变量名的函数调用来检查。

function getPostVar($name) { 
    return (isset($_POST) && isset($_POST[$name]) ? $_POST[$name] : ""; 
} 

$username=getPostVar("username"); 
$password=getPostVar("password"); 

显然你的代码是成熟的SQL注入与在' union select * from users --

+0

...它看起来像OP正在存储未经过哈希的密码。 +1 – 2012-01-16 11:09:43

+2

在附注中,检查是否设置$ _POST数组并非必要。它会一直被设置,除非有人没有设置($ _ POST)。在这种情况下,检查isset($ _ POST ['key'])将返回false而不发出警告。 – iBiryukov 2012-01-16 12:21:12

+0

如果isset(array(key))会发出警告,并不是100%确定,并且只是放置完整的安全版本,否则有人会使用此功能用于其他阵列。 – 2012-01-16 13:34:13

0

用户名没有在你的代码进行查询字符串URL通过$_GET获取任何东西。如果你没有任何东西,你怎么能有一个索引?

对于你所说的,如果用户无法登录到系统,则必须使用header('location:index.php?invalid=1');

+0

虽然这是一个错误,因为使用isset它不会是特定的错误报告 – 2012-01-16 11:05:08

-1

可能不是同一个问题,但我转换为mysqli时出现同样的错误,而且我的读取语句看起来与您的相同。

尝试更改。

$row = $result->fetch_assoc(); 

$row = $result->fetch_array(MYSQLI_ASSOC));