是因为$ _GET是全局的还是提交给自己的表单还是其他?

时间:2015-03-31 16:27:45

标签: php forms

我试图理解PHP表单处理中的一个简单的事情。我是新手,我有一个示例代码:

<form name="frm" method="post" action="">
   Item Name:<input type="text" name="itmName" id="itmName"/><br/><br/>
   <input type="submit" name="sbmit" value="Add Record"/>
</form>

<?php
 if(isset($_GET['m']))
 {
   echo '<script type="text/javascript">alert("'.$_GET['m'].'");</script>';  
 }
 if(isset($_POST['sbmit']))
 {
  header("location:1.php?m=10");
 }
?>

无论我发送给服务器的数据是什么,我都关注代码的if(isset($_GET['m']))部分。每次我提交表格时,如果&#39;总是被评估为true,因此出现警告框。这是因为$ _GET持有由header("location:1.php?m=10");设置的先前值,还是因为表单正在提交给自己或者其他?谷歌搜索没有提供很多帮助。我需要更好地了解这一点。谢谢

3 个答案:

答案 0 :(得分:0)

由于你没有指定一个动作,它将默认为当前页面url,在这种情况下“1.php?m = 10”(如果这就像你说的那样)。即使表单是通过POST提交的,查询字符串仍然会被传递并仍可访问。

为了防止它被设置,您需要做的只是具体的表单操作

答案 1 :(得分:0)

1°)当您提交表单时,post方法会将“itmName”和“sbmit”发送到同一页面(因为您没有在“action =”中写入任何内容)。

2°)如果页面收到了post var'sbmit',我确实要求服务器将页面重定向到同一页面(我猜),并带有一个get变量(m = 10)

3°)您订购的页面如果收到“m”获取变量中的某些内容,则会发送提醒。

因此,只需一次拍摄,你的服务器就可以完成3个步骤。这就是每次发送警报的原因。

答案 2 :(得分:0)

你是对的,表单是客户端。 当提交按钮被cliked时,post数据被发送到服务器。现在在服务器端,服务器看到的第一件事是&#34; if(isset($ _ POST [&#39; sbmit&#39;]))#34;它命令重定向,但在php中不是javascript,所以我们留在服务器端,首先需要由服务器解释新页面的负载,因为它包含一个get变量。 此Get变量由服务器检测到并自动转动&#34; if(isset($ _ GET [&#39; m&#39;]))#34;真的。现在它编写了javascript标记,该标记将在启动警报时被解释为客户端。