【问题标题】:Form doesn't submit data to php表单不向php提交数据
【发布时间】:2014-06-20 19:36:42
【问题描述】:

我根据这个在我的mac上设置了一个本地服务器目录:https://discussions.apple.com/docs/DOC-3083

我试着做一个简单的测试,如下:http://php.about.com/od/learnphp/ss/php_forms.htm 并且 process.php 既不会显示姓名也不会显示年龄,它们只是无效的:

Your name is 
You are years old
In 25 years you will be 25 years old

我的设置可能有什么问题?

附: 1.我和http://localhost/process.php?Name=Bill&Age=35有同样的输出 2. 这是我设置表单示例的操作:

[14:46:00]~/Sites/Tests$ cat > form2.html
<html>   
<head>
 <title>Test Page</title>
</head>   
<body>   
    <h2>Data Collection</h2><p>
    <form action="process.php" method="post">  
        <table>
            <tr>
                <td>Name:</td>
                <td><input type="text" name="Name"/></td>
            </tr>   
            <tr>
                <td>Age:</td>
                <td><input type="text" name="Age"/></td>
            </tr>   
            <tr>
                <td colspan="2" align="center">
                <input type="submit"/>
                </td>
            </tr>
        </table>
    </form>
</body>
</html>[14:52:32]~/Sites/Tests$ cat > process.php
<?php   
    print "Your name is ". $Name;   
    print "<br />";   
    print "You are ". $Age . " years old";   
    print "<br />";   $old = 25 + $Age;
    print "In 25 years you will be " . $old . " years old"; 

【问题讨论】:

  • 你在使用模板引擎吗?
  • @RoyalBg,我只是做了这两篇文章中提到的事情。模板引擎一无所有。如何检查?
  • 那篇文章中没有提到{$REQUEST_URI}{$LOGIN_USERNAME}。你从哪里得到这些信息的?
  • @klm123 超级全局变量不会神奇地变成变量(除非 register_globals 为 ON,但幸运的是它不是)。所以你需要告诉你的脚本从哪个超全局数组中获取值,即$_GET['Age']。检查 php 手册中的superglobals
  • 你是应该在这里获得支持的人,你是花时间与 OP 一起解决这个问题的人,所以你应该是获得荣誉的人。 @RoyalBg 我没有看到另一个人花时间而是在场边。所以放一个。

标签: php html forms macos


【解决方案1】:

很久以前,这是大多数 PHP 用户认为 PHP 工作的常见方式。

来自请求的参数被自动注册为同名变量。

http://www.php.net/manual/en/security.globals.php

从文章中可以看出,这似乎是一个错误的决定,团队决定弃用并最近删除了此功能。

所以,请求变量不会自动变成同名变量。您应该指定您期望输入的来源。例如 POST、GET 或 COOKIE。

虽然 @talkol 可能是正确的,您可以将 $_REQUEST 用于 POST 和 GET,但很少有充分的理由这样做。

在大多数情况下,您需要期望它们来自您希望用户传递的请求方法。在您的情况下,在其指定的 POST 形式中,因此您只希望它们作为 POST 变量。

为了访问它们,您需要使用 $_POST 超全局数组。例如。 $_POST['Name']

您可以在 PHP 官方文档中找到有关超全局变量的所有信息:http://www.php.net/manual/en/language.variables.superglobals.php

【讨论】:

  • 我实际上更喜欢使用 $_REQUEST 而不是 $_POST,因为在调试代码时,您经常使用 GET,就像 OP 对 http://localhost/process.php?Name=Bill&amp;Age=35 所做的那样。这样它仍然有效:)
  • @talkol 当然可以:)但我的看法不同。仅仅因为你稍后会调试而使用某种方法不是很好的理由:) 如果你需要调试,你可以在你的调试 sn-p 中使用 $_REQUEST 进行调试,如果你坚持的话。但是脚本的另一部分(生产部分),不应该绑定到调试方法
【解决方案2】:

在 process.php 中,将 $Name 替换为 $_REQUEST['Name'] 并将 $Age 替换为 $_REQUEST['Age']

当您的 PHP 脚本运行时,变量 $Name 和 $Age 没有定义。你需要初始化它们。

传递给 PHP 脚本的参数可以通过 $_REQUEST 超级全局数组访问。该数组包含使用参数名称作为键的每个参数的值。将参数传递给脚本的常用方法是通过 POST 或 GET。 $_REQUEST 超级全局对这两种方法都有效(与$_GET$_POST 不同,它们是类似的超级全局数组,但它们只对其中一种有效)。

如果你想保留你的原始代码,你也可以使用类似的东西来初始化你的变量

$Name = $_REQUEST['Name'];

请务必将此行放在使用 $Name 之前。

【讨论】:

  • 我会 +1,因为你和 Royal Bg 都帮助 OP 解决了这个问题。
  • 我也做了 +1。哇,我们在这个话题上写了这么多,其他人不会有任何借口问同样的问题哈哈 :)
猜你喜欢
  • 2015-12-30
  • 2017-02-23
  • 2018-04-20
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多