2012-05-01 28 views
1

这是在index.php:为什么POST和GET方法表单无法在PHP上工作?

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

我称这种忽略原始

<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]方法在同一页上调用?

+0

请标记答案为正确。 –

回答

0

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

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

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

使用PHP脚本中的$ _ GET变量,允许您解析和“搞定”的URL PARAMATERS(通常在查询字符串或mod_rewrite的文件夹参数),而$ _ POST变量允许你收集转移的数据。此外,如果您要向API或您自己的脚本提交HTTP请求,则应该是POST请求...因为您要提交数据。如果您尝试访问API或您自己的脚本,并且仅检索(不创建/更新/删除)数据,则应使用GET请求。

2

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

2

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

+0

感谢您的所有意见。是的,我是一个新的网络编程。经过漫长的搜索我的脚本。我发现我在电子邮件表单前也有表单标签。我忘了给以前的形式。 @NADH感谢您的提示。基本是关键。 –

2

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

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

0

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

然后您的表单不正确。它是页面上的唯一形式(使用浏览器中的查看源代码)并且它不是以另一种形式嵌套吗?

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

0

您设置窗体的方法是POST,然后在下面的代码您试图访问其只包含module=sendmail 要从你需要使用$_POST提交的表单访问数据使用$_GETGET method)数据(即POST method)。 同样的代码不正确写入:

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

这是为action指定完整的网址,一个很好的做法属性。

相关问题