Jquery Mobile - отправка формы - Ошибка загрузки страницы - PullRequest
2 голосов
/ 18 ноября 2011

Я отправляю форму так:

<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 is:

<? 
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 Ответ

1 голос
/ 18 ноября 2011

Попробуйте использовать абсолютный URL-адрес для своего действия с формой (я не совсем понял, но базовый элемент выглядит немного странно с jQuery Mobile). Когда я получаю эту ошибку, я смотрю на Firebug, чтобы увидеть, где был сделан запрос, и обычно это будет проблема относительности с текущей страницей и расположением действия.

Например, если вы начинаете с корневого каталога ("/") и извлекаете страницу из каталога "/ gallery /" с относительным URL-адресом к другому файлу в каталоге "/ gallery /", то после того, как он загружен в 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')"

Вот документация PHP для mysql_real_escape_string: http://php.net/mysql_real_escape_string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...