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


Is it because $_GET is global or the form submitting to itself or else?

我试图理解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']))部分。每次我提交表单时,"if"总是被评估为true,因此会出现警告框。是因为$_GET持有header("location:1.php?m=10");设置的上一个值,还是因为表单正在提交给自己?谷歌搜索并没有提供太多帮助。我需要更好地理解这一点。感谢

由于您没有指定操作,它将默认为当前页面的url,在本例中为"1.php?m=10"(如果您说的是这样的话)。即使表单是通过POST提交的,查询字符串仍然可以传递并且仍然可以访问。

为了防止它被设置,您所需要做的就是指定您的表单操作

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

2°)如果页面收到post-var"sbmit",而我收到了,你要求服务器用get变量(m=10)将页面重定向到同一页面(我想)

3°)您命令页面在收到'm'get变量中的内容时发送警报。

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

你是对的,表单是客户端的。当点击提交按钮时,发布数据将发送到服务器。现在在服务器端,服务器看到的第一件事是"if(isset($_POST['sbmit'])",它命令重定向,但在php中,而不是在javascript中,所以我们留在服务器端,加载一个新页面,该页面首先需要由服务器解译,因为它包含一个get变量。该Get变量由服务器检测到,并自动将"if(isset($_Get[am'])"设置为true。现在,它编写javascript标记,该标记将在警报启动时在客户端进行解释。