PHP表单提交代码中的未定义索引错误

3

我一直得到一个未定义的索引到这个..当我关闭错误报告时,一切都很好,但我正在寻找一种“正确的方法”来解决这个问题

在我的register.php表单上,按钮看起来像这样

<input type="submit" name="submit" class="btn btn-kani btn-lg" value="Sign Up"/>

这个页面与另一个被称为login.php的页面链接在一起

login.php的代码

我已经尝试过了

if (isset($_POST['submit']=="Sign Up")) {
// etc.

我已经尝试过

if ($_POST['submit']=="Sign Up") { 
// etc.

由于会话的原因,注销操作与登录操作相同,不确定应该如何编码...按钮上显示的文本为:
<li class="inactive"><a href="logout.php?logout=1">Log Out</a></li>

并且在 login.php 文件内的代码

if($_GET["logout"]==1 AND $_SESSION['id']) {
    session_destroy();
    header("Location:../logout.php");       
}
2个回答

2

没有isset()会评估其内部内容并告诉您它是真还是假:

因此,这个表达式对您要做的事情没有实际意义:

if (isset($_POST['submit']=="Sign Up")) {

应该如下:

if(isset($_POST['submit'])) { // if index submit <input type="submit" name="submit" /> button was pressed
    // so if the button is pressed, then it will go inside this block
}

如果你想评估它的存在和价值,你可以这样做:
if(isset($_POST['submit']) && $_POST['submit'] == 'whatever value') {

}

关于会话,您可以按照以下方式进行检查:

if(isset($_GET['logout'], $_SESSION['id']) && $_GET['logout'] == 1) {
    // if both get logout and session id does exists and logout is equal to 1
    session_destroy();
    header('Location: ../logout.php');
}

如果你需要更多的补充信息,可以查看deceze的PHP's isset And empty权威指南。这是一篇很好的文章,通过测试案例来详细解释了如何使用它,与你类似。

@KimNAnthonyStole,你说的“不止一个”是什么意思?是指一个变量吗?那就在条件语句中添加更多变量。if(isset(expression) && another one && another one || another one) - Kevin
由于我不能再发布一些内容,也许你可以帮忙。如果这个表单有错误,它会保留信息,这样你就不必再次输入,问题是它又出现了未定义的索引。 <input type="text" name="name" class="form-control" value="<?php echo $_POST['name']; ?>" /> - Kim N Anthony Stole
如果我能回答,那么是的,我会检查它。 - Kevin
为了进行清理,我使用以下代码:<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> - Kim N Anthony Stole
1
@Ghost 谢谢你,Ghost。像你一样,给出代码可能存在的问题的全面细节和建议,而不仅仅是提供代码,对所有人都有好处。很多时候,你会走“额外的一英里”,这是一个很好的品质。干杯 - Funk Forty Niner
@KimNAnthonyStole 嗯,你可以(但不是很好)在 value="<?php echo isset($_POST['name']) ? $_POST['name'] : ''; ?>" /> 中设置一个三元运算符,这样在这种情况下,你总是要考虑到 $_POST['name'] 的存在才能将其输出。 - Kevin

1

if ($_POST['submit']=="Sign Up")没有先检查$_POST['submit']中是否有值,这可能导致"未定义的索引";

if (isset($_POST['submit']=="Sign Up"))根本就没有意义。尝试使用以下代码:

if (isset($_POST['submit']) && ($_POST['submit']==="Sign Up"))


你真厉害!关于涉及会话的注销未定义索引怎么办?我稍后会将会话更改为Cookie,但这只是一个开始。 - Kim N Anthony Stole
只需将相同的逻辑应用于其他操作即可。 if (isset(THING) && (THING == OTHER_THING)) - TML
如果 ((thing1) && (thing2) && (thing3) .... ),则执行以下操作,或者您可以嵌套它们:如果 (thing1) { 如果 (thing2) { ... }} - TML

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接