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


Php login error - Notice: Undefined index:

我查看了以前的未定义错误问题,看看是否可以为我的问题找到帮助,但我似乎无法解决我的问题。因此,当我尝试登录用户时,我会收到一个错误,上面写着"未定义索引":不知道为什么我在我的登录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注入。我只想能够登录,以后再担心其他事情。

如果post变量中没有username,则$_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注入

您的代码中没有任何内容可以在URL中生成查询字符串以供$_GET获取。你什么都没有怎么能有索引?

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

对您来说可能不是同一个问题,但我在转换到mysqli时遇到了同样的错误,我的fetch语句看起来和您的相同。

尝试改变。

$row = $result->fetch_assoc();

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