Jquery Mobile - 表单提交 - 错误加载页面

时间:2011-11-18 19:35:19

标签: php jquery-mobile

我提交的表格如下:

<form action="userlogin.html" method="get" name="log_form" onsubmit="return form_val();">

这一切都很好,如果登录数据正确如下,它就会产生cookie:

if ($email){ // 111
    require '/php/lib/dbconnect.inc';
    $email=strtolower($email);
    $password=strtolower($password);
    $result = mysql_query("SELECT name from users where (username = '$email' AND password = '$password')",$db); 
    if(!$result) { echo mysql_error(); exit; } // debug
    $item = mysql_fetch_row($result);
    $result_userid = mysql_query("SELECT user_id from users where (username = '$username' AND password = '$password')",$db); 
    if(!$result_userid) { echo mysql_error(); exit; } // debug
    $item_userid = mysql_fetch_row($result_userid);
    if ('0'==$item[0]){ // 33
    $error .= "You typed the wrong email address or password, please check the information entered.<br><br><br>";
    } // close 33
    else { // 44
    require '/php/lib/setup.inc';
    $user = Encrypt_data ($item_userid[0]);
    setcookie("user_cook", "$user", 0);
    header("Location: /en/");
    } // close 44
    } // close 111

但是我总是得到“错误加载页面”,无论数据输入是否正确,因此有些东西不对,但是什么?

此外,我已经尝试将我的标题包含文件添加到此,因此在评估数据是否正确之前传递jQuery Mobile标记确实有效但当然我不能使用header("Location: /en/");

所以我想澄清一下,这一切都运行正常并且表单正在传递数据,但似乎jQuery在查看其他数据之前需要一些东西...以下是有效的:

if ($email){ // 111
    include '/home/twovo77/1NTJ3EJZ/php/nav/mobile_header.inc';
    // require '/home/twovo77/1NTJ3EJZ/php/lib/dbconnect.inc';
    $email=strtolower($email);
    $password=strtolower($password);

但是传递到标题

并不好

mobile_header.inc是:

<? 
require '/php/lib/setup.inc';
require '/php/lib/dbconnect.inc'; ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 

<head>
<meta charset="utf-8">
<meta name="viewport" content='width=device-width, initial-scale=1.0, maximum-        scale=1.0, min-width=321px'>
<link rel="stylesheet" href="mobile.css" />

<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0rc2/jquery.mobile-.0rc2.min.js">
</script>

</head> 

<body> 

<div data-role="page" id="foo" data-title="<? echo $page_title; ?>">

<a href="index.html"><div data-role="header" data-theme="c" style="height:50px; padding:3px;"><img src="/images/logo2.png"></div></a><!-- /header -->

<? echo $header_image; ?>

<div data-role="content"><div class="inner">

那里有一些标签必须通过,否则你会得到错误加载页面

或者更重要的是,当我执行我的登录代码然后回到它时,我可以绕过这个...如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

尝试使用绝对URL进行表单操作(我还没有完全弄明白,但基本元素似乎对jQuery Mobile有点古怪)。当我收到该错误时,我会查看Firebug以查看请求的位置,通常这将是当前页面和操作位置的相对性问题。

例如,如果从根目录(“/”)开始并从“/ gallery /”目录中获取一个页面,该页面具有指向“/ gallery /”目录中另一个文件的相对URL,那么一旦它被拉入DOM(在“/”级别)任何相对URL都不匹配。

另一方面,在查询可能导致注入攻击的数据库之前,您似乎没有转义数据:

更改:

"SELECT name from users where (username = '$email' AND password = '$password')"

"SELECT user_id from users where (username = '$username' AND password = '$password')"

要:

"SELECT name from users where (username = '" . mysql_real_escape_string($email) . "' AND password = '" . mysql_real_escape_string($password) . "')"

"SELECT user_id from users where (username = '" . mysql_real_escape_string($username) . "' AND password = '" . mysql_real_escape_string($password) . "')"

否则,有人可以输入如下用户名:

$username = "' OR 'x'='x";

这使您的查询看起来像这样(并解析为true):

"SELECT name from users where (username = '' OR 'x'='x' AND password = '$password')"

以下是mysql_real_escape_stringhttp://php.net/mysql_real_escape_string

的PHP文档
相关问题