2011-01-08 47 views
1

我有一个形式,例如:没有被点击 - PHP

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

</form> 

在用户/ 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)返回:阵列([动作] =>回复)

的print_r($ _ POST)返回一个空数组

+2

尝试增加:`的print_r($ _ POST);`和`的print_r($ _ GET)`之前,你的` switch`语句并将输出添加到您的问题。 – 2011-01-08 18:55:30

+0

您有两个名为`action`的请求参数;一个用于`POST`,一个用于`GET`。只需重命名其中一个。 – 2011-01-08 19:09:54

回答

2

您正在检查$_GET您的switch声明,但您的表单设置为post。将其更改为method="get"或使用$_POST代替。

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

请考虑使用隐藏的表单字段。

请记住,应该使用GET请求来检索,并且应该使用POST请求来创建。就你而言,看起来POST更合适(回复)。

1

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

您应该删除从表单操作参数,并将其转换为一个隐藏字段的形式中。我不确定你在做请求时可以同时获得一个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"; 
     }