【问题标题】:Nothing was clicked - php没有点击任何东西 - php
【发布时间】:2011-01-09 03:09:17
【问题描述】:

我有这样的表格:

<form method="post" action="user/?action=reply">
    <!--blah -->
    <input type="submit" name="action" value="Reply">

</form>

在 user/index.php 文件中我有:

switch ($_GET['action'])
{

    case 'reply':
        if (isset($_POST['action']) && $_POST['action'] == 'Reply' )
        {
            require_once USER_ROOT . 'thread_reply.php';
        }
        else
        {
            echo "Nothing was clicked";
        }
...

输出没有被点击。

error_reporting(E_ALL);不返回任何东西。

编辑:

print_r($_GET) 返回:Array ([action] => reply)

print_r($_POST) 返回一个空数组

【问题讨论】:

  • 尝试在您的 switch 语句之前添加:print_r($_POST);print_r($_GET),并将输出添加到您的问题中。
  • 你有两个名为action的请求参数;一张给POST,一张给GET。只需重命名其中一个。

标签: php forms


【解决方案1】:

您在switch 语句中检查$_GET,但您的表单设置为post。将其更改为 method="get" 或改用 $_POST

由于 HTTP 服务器只能发送一种类型的请求(GET 或 POST),因此您的表单将发送 POST 请求。我记得根据浏览器和您的 PHP 配置,使用 POST 请求时可能会忽略 GET 变量。

考虑使用隐藏的表单域。

请记住,应该使用 GET 请求来检索,而应该使用 POST 请求来创建。在您的情况下,似乎 POST 更合适(回复)。

【讨论】:

  • 表单数据是通过邮寄方式发送的...我使用gets进行操作
  • 但是您的提交按钮也被命名为action,并且其值为Reply。你不能改用它并废弃 GET 部分吗?
【解决方案2】:

我不知道你为什么使用两个值但是.. :)

您应该从表单操作中删除参数并将其转换为表单内的隐藏字段。我不太确定在发出请求时你是否可以同时拥有一个 get 一个 post 参数。

像这样:

<form method="post" action="user">
    <!--blah -->
    <input type="hidden" name="target_action" value="reply" />
    <input type="submit" name="action" value="Reply" />
</form>

并像这样更改 php 文件:

switch ($_POST['target_action'])
{

    case 'reply':
        if (isset($_POST['action']) && $_POST['action'] == 'Reply' )
        {
            require_once USER_ROOT . 'thread_reply.php';
        }
        else
        {
            echo "Nothing was clicked";
        }

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多