使用POST处理php的奇怪之处


odd thing with php processing using POST

我有一个项目在测试服务器上运行,但在转移到另一个服务器上时停止了工作。我主要认为是PHP,但我来这里是想征求你的意见。所以我的主页是一个用于登录的HTML,它有一个带有POST的表单,它调用一个php脚本文件,如下所示:

<form method="POST" action="prologin.php">
    Name: <input type="text" name="nam"><br>
    Password: <input type="password" name="pas"><br>
    <input type="submit" value="Login" data-inline="true" data-icon="gear">
</form>

prolog.php文件如下所示:

<?php
session_start();
include 'mycon.php';
$nume1=mysql_real_escape_string( $_REQUEST['nam'] );
$pass1=mysql_real_escape_string( $_REQUEST['pas'] );
$s = "SELECT * FROM uzers WHERE uzname = '$nume1' and pass = md5('$pass1')";
var_dump($s);
... followed by other validations and stuff.

当我运行HTML文件并单击提交按钮(登录)时,我会在Chrome或Firefox中收到一个"未定义"页面,当我"查看源代码"时,我看到上面的sql为空值。即:

string(56) "SELECT * FROM uzers WHERE uzname = '' and pass = md5('')"

可能出了什么问题?为什么php没有接收到REQUEST变量?因为这就是我认为会发生的事情。我能做些什么来修复它?

在提交表单之前首次加载页面时会发生这种情况,在这种情况下,$_REQUEST或$_POST不存在,您可以通过检查变量来避免这种情况:

if(isset($_REQUEST['nam']) && isset($_REQUEST['pas'])){
  include 'mycon.php';
  $nume1=mysql_real_escape_string( $_REQUEST['nam'] );
  $pass1=mysql_real_escape_string( $_REQUEST['pas'] );
  $s = "SELECT * FROM uzers WHERE uzname = '$nume1' and pass = md5('$pass1')";
  //other staff
}

删除php,直到找到有问题的代码。我会用$_POST替换$_REQUEST的实例,并在加载页面时回显它们,以确保它们的传递正常。您的查询回显为空参数,这让我认为$_REQUEST是个问题。。

<?php
 echo $_POST['nam'];
 echo $_POST['pas'];

在开始时,并查看处理页面时会发生什么。。

显然我应该把它添加到FORM:中

data-ajax="false" 

为了防止jQuery mobile劫持我的提交行为。在我将其添加到表单中之后,POST工作正常。谢谢你的时间和想法,但它们并没有帮助我解决问题。但是,您可能会发现这些信息在将来很有用。