我提交的表格如下:
<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">
那里有一些标签必须通过,否则你会得到错误加载页面
或者更重要的是,当我执行我的登录代码然后回到它时,我可以绕过这个...如果是这样,怎么样?
答案 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_string
:http://php.net/mysql_real_escape_string