类似的PHP表单代码:如果$ _REQUEST为空,则第一次抛出错误,第二次没有

tom*_*evs 5 php forms

我是PHP的新手,所以这可能是一个简单的答案.希望我能正确地将其格式化为SO标准(对于网站来说仍然是新的).

我正在研究提交表单数据的两组非常相似的代码,并使用htmlspecialchars通过SitePoint在我的基本开始PHP书中停止XSS攻击.很简单,对.

使用代码集1时,一旦我更改了表单操作,就会收到未定义索引的错误

<form action="formpost.php" method="post">
Run Code Online (Sandbox Code Playgroud)

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Run Code Online (Sandbox Code Playgroud)

我搜索了SO,发现我需要检查是否$_REQUEST为空,以便没有未定义的索引并摆脱该错误.如果有人可以向我解释这一部分,我会非常感激.为了成为一个Index? 引人注目的问题,需要做些什么周边的事情,请不要取笑我,我知道我可能听起来很愚蠢 - >这是 Index因为$_REQUEST是a $_POST,$_GET而且$_COOKIE是数组中的数组和数据是indexed, 0,1,2,3,etc.?

我理解$_REQUEST可能是空的,因为没有$_REQUEST做过(我想?)但是,由于没有通过在表单中​​输入数据来激活脚本,为什么期望数据已经存在$_REQUEST

代码集1(错误[未定义索引]除非脚本检查是否$_REQUEST为空): 在此代码中,我只是允许最终用户通过表单字段或通过手动添加到URL的字符串发布他们的名称它打印.

<?php
if( !empty($_REQUEST) )
{
    $firstname = $_REQUEST['firstname'];
    $lastname = $_REQUEST['lastname'];
    echo 'Welcome to our web site, ' .
        htmlspecialchars($firstname, ENT_QUOTES, 'utf-8') . ' ' .
        htmlspecialchars($lastname, ENT_QUOTES, 'utf-8') . '!';
}
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Query String Link Example</title>
    </head>

    <body>
        <p>
            <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
              <div><label for="firstname">First name:  
                <input type="text" name="firstname" id="firstname"></label>  
              </div>  
              <div><label for="lastname">Last name:  
                <input type="text" name="lastname" id="lastname"></label></div>  
              <div><input type="submit" value="GO"></div>  
            </form>
        </p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

代码集2(不介意是否$_REQUEST检查): 在这段代码中,我正在做同样的事情,就好像它恰好是我的确切名称,让它打印出特殊的消息.

<?php
    $firstname = $_REQUEST['firstname'];
    $lastname = $_REQUEST['lastname'];
        if ($firstname == 'Tommy' && $lastname='Loza') 
        {
            echo 'Welcome to our web site web master!';
        }
        else
        {
            echo 'Welcome to our web site, ' .
                htmlspecialchars($firstname, ENT_QUOTES, 'utf-8') . ' ' .
                htmlspecialchars($lastname, ENT_QUOTES, 'utf-8') . '!';
        }
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Conditional Query String Link Example</title>
    </head>

    <body>
        <p>
            <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
              <div><label for="firstname">First name:  
                <input type="text" name="firstname" id="firstname"></label>  
              </div>  
              <div><label for="lastname">Last name:  
                <input type="text" name="lastname" id="lastname"></label></div>  
              <div><input type="submit" value="GO"></div>  
            </form>
        </p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

希望我没有问太多愚蠢的问题,这篇文章格式正确.非常感谢SO社区.

汤米

小智 4

基本上,除非 REQUEST 索引存在,否则您无法访问它。

如果不使用 if 语句,它将尝试访问索引,无论它是否存在。因此,如果 $_REQUEST['firstname'] 不存在,则不会默认为 null,而是会给出未定义索引错误,因为 $_REQUEST 是一个数组。

如果您尝试使用未定义的变量,它会显示“未定义变量”而不是“索引”。

['firstname'] <- 这是索引。如果不存在,就会出错。

检查它是否为空也不一定是唯一的事情。我还要检查名字和姓氏是否已设置,如下所示:

if(!empty($_REQUEST) && isset($_REQUEST['firstname']) && isset($_REQUEST['lastname'])){
    //Code here
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以单独检查它们是否能够根据缺少的任何一个错误抛出单个错误。

- 编辑

此外,您还可以执行以下操作:

if($_SERVER['REQUEST_METHOD'] == "POST"){
    //code
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,它设置为“GET”。