为什么_POST无法从HTML表单收集数据?

时间:2019-05-02 03:10:04

标签: html5 forms php-5.6

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

我进行了一些研究,了解到为了使表单能够“ POST”,表单必须具有输入或按钮标签,其类型必须为type =“ submit”,并且必须具有有效的名称,而表单必须具有method属性,例如method =“ POST”。

我还测试了_POST数组是否正在使用以下方法收集任何数据: print_r($_POST);数组始终为空。在下面,我包含了一些构成表格的代码,当您单击“提交”时,表格数据就会被发布并整齐地显示。 该代码不是我的,该代码已经过测试并且可以在http://www.learningaboutelectronics.com/Articles/How-to-check-if-the-submit-button-is-clicked-in-PHP.php上运行,我在此处添加了该代码是为了证明由于某些原因,经过测试的代码仍然会给我带来错误。 / strong>

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

维护者/ Herve Leclerc升级到2.5 通过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 PHP 5.6.40(用于CLI)(命令行界面)

这是经过测试的有效代码

<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表单的正确方法吗?感谢您提供任何反馈意见。

3 个答案:

答案 0 :(得分:0)

简单表单示例

下面的示例显示具有两个输入字段和一个提交按钮的简单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

答案 1 :(得分:0)

在将$ 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.';
}
}
?>

答案 2 :(得分:0)

我找到了一个对我有用的修复程序。由于某些原因,HTML标记按钮在我的情况下无法正常工作,我必须使用类型为Submit的输入标记,并且该输入标记必须具有分配的值。谢谢您对每个人的帮助。