我是php新手,我正在按照教程制作登录面板。它在演示网站上运行良好,但是当我下载代码并在我的机器上运行时,会弹出5个通知。它们看起来都像:“注意:未定义的索引:在第24行的C:\ xampp \ htdocs \ myfolder \ demo.php中提交”。
从其他编程经验来看,我认为这些意味着我在使用它们之前没有定义变量。但是,这些变量似乎存在于系统中(据我所知,阅读其他问题> - <)。
我在下面添加了我的代码并在右侧标记了未定义的索引。任何人都可以帮我解释代码有什么问题,我该如何解决?非常感谢!
<?php
session_name('Login');
session_start();
if($_POST['submit']=='Login') //undefined submit
{
$err = array();
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT id,user FROM writers WHERE user='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));
if($row['user'])
{
$_SESSION['user']=$row['user'];
$_SESSION['id'] = $row['id'];
// Store some data in the session
}
else $err[]='Wrong username and/or password!';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
// Save the error messages in the session
header("Location: demo.php");
exit;
}
$script = '';
if($_SESSION['msg'])
{
// The script below shows the sliding panel on page load
...
}
?>
<head>
......
</head>
<body>
<!-- Panel -->
<div id="toppanel">
<div id="panel">
<div class="content clearfix">
<?php
if(!$_SESSION['id']): //undefined id
?>
<div class="left">
<form class="clearfix" action="" method="post">
<h1>Writer Login</h1>
<?php
if($_SESSION['msg']['login-err']) //undefined login-err
{
echo '<div class="err">'.$_SESSION['msg']['login-err'].'</div>';
unset($_SESSION['msg']['login-err']);
}
?>
//Login form
</form>
</div>
<?php
endif;
?>
</div>
</div> <!-- /login -->
<!-- The tab on top -->
<div class="tab">
<ul class="login">
<li class="left"> </li>
<li>Hello <?php echo $_SESSION['user'] ? $_SESSION['user'] : 'Guest';?>!</li> //undefined user
<li class="sep">|</li>
<li id="toggle">
<a id="open" class="open" href="#"><?php echo $_SESSION['id']?'Open Panel':'Log In';?></a> //undefined id
<a id="close" style="display: none;" class="close" href="#">Close Panel</a>
</li>
<li class="right"> </li>
</ul>
</div> <!-- / top -->
</div> <!--panel -->
对不起长码!我真的不确定哪些与问题相关,也不敢删除更多。感谢您的耐心等待!
答案 0 :(得分:0)
您需要在之前检查该变量是否存在。您可以使用isset()
:
if(isset($_POST['submit']) && $_POST['submit']=='Login')
如果您只是检查表单是否已提交,则可以通过POST
检查该页面是否已被请求:
if('POST' === $_SERVER['REQUEST_METHOD'])
答案 1 :(得分:-1)
您也可以将@
放在可以为null的数组引用前面,例如:
if(@$_POST['submit']=='Login')
这会压制警告