1

我有一个项目可以在测试服务器上运行,但在移到另一个服务器上时停止工作。主要是我认为它是 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 文件并单击提交按钮(登录)时,我在 Chrome 或 Firefox 中收到一个“未定义”页面,当我“查看源代码”时,我看到上面的 sql 带有空值。那是:

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

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

4

3 回答 3

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
}
于 2013-07-22T01:12:25.190 回答
0

显然我应该把这个添加到表格中:

data-ajax="false" 

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

于 2013-07-23T19:45:22.610 回答
0

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

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

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

于 2013-07-22T01:24:51.830 回答