Php登录错误 - 注意:未定义的索引:

时间:2012-01-16 10:36:44

标签: php mysqli

我查看了previos Undefined错误问题,看看我是否可以为我的问题找到帮助,但我似乎无法解决我的问题。 因此,当我尝试登录用户时,我收到一条错误,指出未定义的索引: 不确定为什么我在login.php页面上收到此消息

我有一个数据库和一个名为users的表,其中插入了数据

这是我用来连接数据库的东西

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注入。我只是希望能够登录并在以后担心其他内容。

3 个答案:

答案 0 :(得分:4)

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

我通常创建一组变量来保存我的帖子变量,这样我就可以先对数据进行验证和规范化

所以在你的查询语句之前

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

然后在查询中使用$ username和$ password。您可以将事先将前面的语句转换为传递变量名称的函数调用以进行检查。

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

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

显然,使用用户名' union select * from users --

进行sql注入的代码已经成熟

答案 1 :(得分:0)

您的代码中没有任何内容可以在URL中创建一个查询字符串,以便$_GET获取。如果没有任何东西,怎么能有索引?

根据您的说法,如果用户无法登录您的系统,则必须使用header('location:index.php?invalid=1');

答案 2 :(得分:-1)

对你来说可能不是同一个问题,但在转换为mysqli时遇到同样的错误,我的fetch语句与你的相同。

尝试改变。

$row = $result->fetch_assoc();

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