【问题标题】:Why POST and GET method Form Not Working on PHP?为什么 POST 和 GET 方法表单在 PHP 上不起作用?
【发布时间】:2012-05-10 19:04:24
【问题描述】:

这是 index.php:

 header('Location:media.php?module=home'); 

我把这个叫做 media.php:

    <html>  
    <head>      
    <title>Test media</title>   
    </head>     
    <body>
    <table width="960"  border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
    <td colspan="2"><img src="images/cms/header.png" width="780" height="77"></td>
    </tr>
    <tr>
     <td width="200" valign="top" bgcolor="#1e2528">
     <?php include "menu.php"; ?>
     <p align="center">&nbsp;</p>
      </td>
      <td width="760" valign="top" bgcolor="#FFFFFF">
      <p>
      <?php include "content.php"; ?>
       <br>
      </p>    
      </td>
      </tr>
   </table>     
</body> 
</html>

这就是问题所在,content.php:

   <table width="100%" cellspacing=5>
    <?php
    include_once 'include/config.php';
    include_once 'admin/include/date_lib.php';
    include_once 'class/class_lib.php';
    include_once 'class/paging.php';
    $action = new DB();
    $action->db_connect();



 if ($_GET[module]=='home'){
     </td></tr>";
      echo "<tr><td align=center>Headline News<br><br></td></tr>";
    elseif ($_GET[module]=='request'){
      echo "<tr><td class=judul_head>&#187; Hubungi Kami</td></tr>";

      echo "<tr><td class=isi>Silahkan hubungi kami secara online:</td></tr>";  

      echo "<form action='?module=sendemail' method='post'>  
            <tr><td class=isi>Name   : <input type=text name=name size=35></td></tr>
            <tr><td class=isi>E-mail : <input type=text name=email size=35></td></tr>
            <tr><td class=isi>Subject: <input type=text name=subject size=50></td></tr>
            <tr><td class=isi>Message  : <br><textarea name=message rows=13 cols=70>

</textarea></td></tr>
            <tr><td><input type=submit value=Send></td></tr>
            </form>";

        echo "<tr><td class=back><br>
            [ <a href=javascript:history.go(-1)>Back</a> ]</td></tr>";            
    }




  elseif ($_GET[module]=='sendemail'){
      mysql_query("INSERT INTO email(name,
                                       email,
                                       subject,
                                       message,
                                       date) 
                            VALUES('$_GET[name]',
                                   '$_GET[email]',
                                   '$_GET[subject]',
                                   '$_GET[message]',
                                   '$today_date')");



 echo "<tr><td class=header_head>&#187; Status Email</td></tr>
        <tr><td class=isi>Email has been sent</td></tr>
        <tr><td class=back><br>
        [ <a href=index.php>Back</a> ]</td></tr>";            
}

我有一个使用 post 方法的电子邮件表单。但是当我点击提交按钮时 url地址栏上会是这样的

http://staging/media.php?name=Test+name&email=Test+email&subject=test+subject&,message=Test+message

就像我使用 get 方法一样。但是如果在查询中将$_POST 更改为$_GET。它不起作用。

我的脚本有什么遗漏吗?还是因为我使用$_GET[module]方法在同一页面调用?

【问题讨论】:

  • 请将答案标记为正确。

标签: php html forms post get


【解决方案1】:

GET 和 POST 是两个不同的东西,不应该被认为是可以互换的。

http://php.net/manual/en/reserved.variables.get.php

http://www.php.net/manual/en/reserved.variables.post.php

在 PHP 脚本中使用 $_GET 变量允许您解析和“获取” URL 参数(通常是查询字符串或带有 mod_rewrite 的文件夹参数),而 $_POST 变量允许您收集传输的数据。

此外,如果您正在向 API 或您自己的脚本提交 HTTP 请求,那么它应该是 POST 请求……因为您正在提交数据。如果您尝试访问 API 或您自己的脚本,并且只检索(而不是创建/更新/删除)数据,您应该使用 GET 请求。

【讨论】:

    【解决方案2】:

    if ($_GET[module]=='home'){ </td></tr>"; 在我看来,您缺少 echo " 声明。

    【讨论】:

      【解决方案3】:

      由于您已选择将表单方法设置为“post”,因此您从 mysql_query 中的表单获取的值需要是 $_POST 而不是 $_GET。希望对您有所帮助!

      【讨论】:

      • 感谢您的所有 cmets。是的,我是网络编程的新手。经过长时间搜索我的脚本。我发现我在电子邮件表单之前也有表单标签。我忘了给 更早的形式。 @NADH 感谢您的提示。基础是关键。
      【解决方案4】:

      elseif ($_GET[module]=='request') 之前还缺少一个括号 我可以推荐一个语法高亮编辑器。很容易找到这些东西。

      将 HTML 输出和脚本混合在一起也不好。

      【讨论】:

        【解决方案5】:

        当我点击提交按钮时,在 url 地址栏上会变成这样 [...] 就像我使用 get 方法时一样。

        那么你的表格不正确。它是页面上唯一的表单(使用浏览器中的查看源代码)并且它没有嵌套在另一个表单中吗?

        还要记住其他答案中的所有提示。虽然它们可能不会立即解决您的问题,但当您的代码更具可读性时,就会更容易找到它。

        【讨论】:

          【解决方案6】:

          您将表单的方法设置为POST,然后在下面的代码中您尝试使用仅包含module=sendmail$_GET (GET method) 访问数据 要访问提交表单中的数据,您需要使用$_POST(即POST method)。 代码也没有正确编写:

          • 输入标签应该是这样的:&lt;input type="value" name="value" /&gt;
          • 表单标签应该是这样的:&lt;form method="post" action="http://complete/link/page.php?media=sendmail"&gt;&lt;/form&gt;

          最好为 action 属性指定完整的 URL。

          【讨论】:

            猜你喜欢
            • 2019-07-18
            • 2023-01-01
            • 1970-01-01
            • 2021-02-06
            • 1970-01-01
            • 1970-01-01
            • 2023-02-22
            • 1970-01-01
            • 2013-06-07
            相关资源
            最近更新 更多