【问题标题】:Why is _POST Not Collecting Data From HTML Form?为什么 _POST 不从 HTML 表单中收集数据?
【发布时间】:2019-09-20 13:07:47
【问题描述】:

我正在尝试为我的网站制作联系表单,但无法获取 HTML 表单中的数据以发布到任何地方?

我做了一些研究并了解到,为了使表单能够“发布”,表单必须具有 type="submit" 和有效名称的输入或按​​钮标签,而表单必须具有方法属性,例如 method="POST"。

我还测试了 _POST 数组是否正在使用以下方法收集任何数据: print_r($_POST); 数组始终为空。下面我包含了一些制作表单的代码,当您单击提交时,表单数据会被发布并整齐地显示。 此代码不是我的,该代码已从 http://www.learningaboutelectronics.com/Articles/How-to-check-if-the-submit-button-is-clicked-in-PHP.php 测试并运行,我将其包含在此处以证明由于某种原因运行和测试的代码仍会出现错误。

我正在使用 Wampserver 通过 localhost 运行 PHP。

维护者/升级到 2.5 由 Herve Leclerc Otomatic 升级到 3 (wampserver@otomatic.net) Jojaba 主页的多种样式 Inno Setup 安装程序:http://www.jrsoftware.org/isinfo.php 论坛 Wampserver:http://forum.wampserver.com/index.php 使用的版本: Apache 2.4.37 端口 80- PHP 7.2.1 MySQL 5.7.24 端口 3306 MariaDB 10.3.12 端口 3307 用于 CLI(命令行界面)的 PHP 5.6.40

这是经过测试和工作的代码

<form action="" method="POST">
<label>Enter Your Name Please:</label>
<input type="text"name=" name_entered" value='<?php echo $name; ?>'/>
<br><br>
<input type="submit" name="submitbutton" value="Submit"/>
</form>

<?php

$name= $_POST['name_entered'];
$submitbutton= $_POST['submitbutton'];

if ($submitbutton){
if (!empty($name)) {
echo 'The name you entered is ' . $name;
}
else {
echo 'You did not enter a name. Please enter a name into this form     field.';
}
}
?>

和我的输出:

Enter Your Name Please: 
( ! ) Notice: Undefined variable: name in C:\wamp64\www\Practice\index.php       on line 3
Call Stack
#
Time 1
Memory 0.0001
Function 403584
Location {main}( )
...\index.php:0
'/>


The name you entered is 'example name'

我的问题是只有在我的系统上运行时才会发生此错误,如果是这种情况,可以采取哪些措施来解决此问题。这也是编码 POSTable 表单的正确方法吗?任何反馈都表示赞赏,谢谢。

【问题讨论】:

    标签: html forms php-5.6


    【解决方案1】:

    简单的表单示例

    下面的示例显示了一个简单的 HTML 表单,其中包含两个输入字段和一个提交按钮:

     <html>
    <body>
    
        <form action="welcome.php" method="post">
        Name: <input type="text" name="name"><br>
        E-mail: <input type="text" name="email"><br>
        <input type="submit">
        </form>
    
        </body>
        </html> 
    

    当用户填写上面的表单并点击提交按钮时,表单数据被发送到一个名为“welcome.php”的 PHP 文件中进行处理。表单数据使用 HTTP POST 方法发送。

    要显示提交的数据,您可以简单地回显所有变量。 “welcome.php”看起来像这样:

    <html>
    <body>
    
    Welcome <?php echo $_POST["name"]; ?><br>
    Your email address is: <?php echo $_POST["email"]; ?>
    
    </body>
    </html>
    

    使用 HTTP GET 方法也可以达到相同的结果:

     <html>
    <body>
    
    <form action="welcome_get.php" method="get">
    Name: <input type="text" name="name"><br>
    E-mail: <input type="text" name="email"><br>
    <input type="submit">
    </form>
    
    </body>
    </html> 
    

    “welcome_get.php”看起来像这样:

     <html>
    <body>
    
    Welcome <?php echo $_GET["name"]; ?><br>
    Your email address is: <?php echo $_GET["email"]; ?>
    
    </body>
    </html>
    

    GET 与 POST

    GET 和 POST 都创建一个数组(例如,array(key1 => value1, key2 => value2, key3 => value3, ...))。该数组包含键/值对,其中键是表单控件的名称,值是来自用户的输入数据。

    GET 和 POST 都被视为 $_GET 和 $_POST。这些是超全局变量,这意味着无论范围如何,它们始终是可访问的 - 您可以从任何函数、类或文件访问它们,而无需执行任何特殊操作。

    $_GET 是通过 URL 参数传递给当前脚本的变量数组。

    $_POST 是通过 HTTP POST 方法传递给当前脚本的变量数组。 何时使用 GET?

    使用 GET 方法从表单发送的信息对每个人都是可见的(所有变量名称和值都显示在 URL 中)。 GET 对发送的信息量也有限制。限制为大约 2000 个字符。但是,由于变量显示在 URL 中,因此可以为页面添加书签。这在某些情况下很有用。

    GET 可用于发送非敏感数据。

    注意:GET 绝对不能用于发送密码或其他敏感信息! 何时使用 POST?

    使用 POST 方法从表单发送的信息对其他人不可见(所有名称/值都嵌入在 HTTP 请求的正文中),并且对发送的信息量没有限制。

    此外,POST 支持高级功能,例如在将文件上传到服务器时支持多部分二进制输入。

    来源https://www.w3schools.com/php/php_forms.asp

    【讨论】:

      【解决方案2】:

      在输入之前尝试放置 $name 变量。提交后,它应该有一个值并在输入和返回字符串中显示。那就是如果我没有误解这个问题。

      还编辑了 action 属性,这会将其设置为专门发布到当前页面。

      Example: action="<?=$_SERVER['PHP_SELF'];?>"
      

      虽然这会使 W3 验证检查器失败。一些替代方法是将其设置为您正在使用的页面的名称或action="#" 等。

      <?php 
      
      $name= $_POST['name_entered'];
      $submitbutton= $_POST['submitbutton'];
      
      ?>
      
      <form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
      <label>Enter Your Name Please:</label>
      <input type="text"name=" name_entered" value='<?php echo $name; ?>'/>
      <br><br>
      <input type="submit" name="submitbutton" value="Submit"/>
      </form>
      <?php
      if ($submitbutton){
      if (!empty($name)) {
      echo 'The name you entered is ' . $name;
      }
      else {
      echo 'You did not enter a name. Please enter a name into this form     field.';
      }
      }
      ?>
      

      【讨论】:

        【解决方案3】:

        我找到了一个对我有用的修复程序。出于某种原因,HTML 标记按钮在我的情况下无法正常工作,我不得不使用提交类型的输入标记,并且输入标记必须具有分配的值。感谢大家对此的帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-21
          • 2023-04-08
          • 2021-06-02
          • 2012-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多