使用POST处理php的奇怪之处

时间:2013-07-22 01:06:25

标签: php 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>

prologin.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文件并单击“提交”按钮(登录)时,我收到一个&#34; Undefined&#34; Chrome或Firefox中的页面,当我查看来源&#34;我在上面看到带有空值的sql。那就是:

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

可能有什么不对? 为什么php没有收到REQUEST变量?因为这就是我认为发生的事情。 我该怎么做才能解决它?

3 个答案:

答案 0 :(得分:0)

当您在提交表单之前首次加载页面时会发生这种情况,在这种情况下$ _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
}

答案 1 :(得分:0)

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

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

一开始,看看处理页面时会发生什么..

答案 2 :(得分:0)

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

data-ajax="false" 

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