为什么 POST 和 GET 方法表单在 PHP 上不起作用



这是索引.php:

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

我称这种媒体为.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>

这就是问题所在,内容.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>";            
}

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

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

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

我的脚本中缺少某些内容吗?还是因为我使用 $_GET[module] 方法在同一页面上调用?

if ($_GET[module]=='home'){ </td></tr>";在我看来,你错过了echo "陈述。

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

您在elseif ($_GET[module]=='request')之前也缺少一个括号我可以推荐一个语法突出显示编辑器。变得很容易找到这些东西。

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

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 请求。

当我单击提交按钮时,它将在 url 地址栏上如下所示 [...]就像我使用 get 方法一样。

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

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

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

  • 输入标签应如下所示:<input type="value" name="value" />
  • 表单标签应如下所示:<form method="post" action="http://complete/link/page.php?media=sendmail"></form>

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

最新更新