我尝试使用注册和登录/注销页面创建一个简单的表单。但它一直给我错误。请帮忙。
注意:未定义的索引:第4行的..path / to / index.php中的用户名
注意:第5行的..path / to / index.php中的未定义索引:密码
警告:无法修改标头信息 - 已经在第8行的..path / to / index.php中发送的输出(输出从..path / toindex.php:4开始)
的login.php
session_start();
$username = $_SESSION['username'];
$password = $_SESSION['password'];
if($username && $password)
{
header( 'Location: index.php' );
}
else
{
function index()
{
echo "<form action='' method='post'>"
."Username:<input type='text' name='username' size='30'>"
."Password:<input type='password' name='password' size='20'>"
."<input type='submit' value='Login' name='login'/>"
."</form>";
}
function login()
{
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
if ($username=="")
{
die("<br /> You Forgot to type in your Username!");
}
if ($password=="")
{
die("<br /> You Forgot to type in your Password!");
}
$con=mysqli_connect("localhost" ,"root" , "root" ,"user");
// check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query("SELECT * FROM users WHERE username='$username'");
$row = mysqli_fetch_array($result);
$user = $row['username'];
if($username != $user)
{
die("<br />Username is wrong!<br /> ");
}
$real_password = $row['password'];
if($password != $real_password)
{
die("<br />Your password is wrong!<br /> ");
}
$_SESSION['username']=$username;
$_SESSION['password']=$password;
header( 'Location: index.php' ) ;
}
if (isset($_REQUEST['login']))
{
login();
}
else
{
index();
}
}
?>
logout.php
<?php
session_start();
session_destroy();
header( 'Location: login.php' ) ;
?>
Register.php
<?php
session_start();
echo "<h2 style='padding-left: 10px'>Register A User :</h2>"
."<form action='' method='post'>"
."Username :<input type='text' name='user' size='30'>"
."Password :<input type='password' name='password' size='20'>"
."<input type='submit' value='Register' name='register' />";
if (isset($_REQUEST['register']))
{
$username = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
if ($username=="")
{
die("<br /> You Forgot to type in the Username for the user ! <br /> ");
}
if ($pass=="")
{
die("<br />You Forgot to type in the Password for the user !<br />");
}
$con=mysqli_connect("localhost" ,"root" , "root" ,"user");
// check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query("INSERT INTO users (username, password) VALUES ('$username', '$pass') ");
}
?>
的index.php
<?php
session_start();
$username = $_SESSION['username'];
$password = $_SESSION['password'];
if(!$username && !$password)
{
header( 'Location: login.php' ) ;
}
else
{
echo "<h3>Welcome to My Webpage</h3>";
}
?>
答案 0 :(得分:0)
这些通知是由以下原因引起的:
$username = $_SESSION['username'];
$password = $_SESSION['password'];
您不知道$ _SESSION ['username']或$ _SESSION ['password']值存在,因此您不应尝试访问。修复此问题,将修复“无法修改标题信息”警告。
有几种方法可以解决这个问题。
您可以使用@符号来抑制错误:
$username = @$_SESSION['username'];
$password = @$_SESSION['password'];
您可以通过ini_set关闭通知:
ini_set('error_reporting', E_ALL ^ E_NOTICE);
或将php.ini中的error_reporting设置为32759,由E_ALL ^ E_NOTICE返回。
您可以在初始化之前测试会话变量是否为空:
if( !empty($_SESSION['username']) ) {
$username = $_SESSION['username'];
}
if( !empty($_SESSION['password']) ) {
$password = $_SESSION['password'];
}
再次使用空函数确保在条件检查中设置了$ username和$ password:
if( !empty($username) && !empty($password) )
或在尝试使用它们之前定义$ username和$ password变量:
$username = null;
$password = null;
if( !empty($_SESSION['username']) ) {
$username = $_SESSION['username'];
}
if( !empty($_SESSION['password']) ) {
$password = $_SESSION['password'];
}
关于使用错误抑制,尽可能避免使用它。抑制错误,甚至是简单的通知,都会让您对代码实际执行的操作有所了解。一个简单的通知可能暗示一个更邪恶的逻辑错误,并且压制它有时会使你的生活变成一个活生生的地狱。由于流氓@符号,我已经失去了一口头发。