JQuery / PHP Ajax система входа в систему - PullRequest
0 голосов
/ 08 сентября 2011

Я настраиваю страницу типа блога для своего бизнеса.Совершенно новый для MySQL и PHP.Настройте эту систему входа в систему.По какой-то причине не знаю, почему логин падает.Предположим, что вы проверили ошибки, а затем вернули «good» через php, если адрес электронной почты и пароль верны.Если php вернет хороший результат, то следует перенаправить на страницу блога.

Если вы уже несколько месяцев пытаетесь решить эту проблему, пожалуйста, обратитесь за помощью.Спасибо.Вот код php, который идет вместе с jquery.

Ссылка на тестовый сайт находится здесь. test.toddprod.com / login Очень признателен за помощь.Спасибо

<?php
#fake mysql connection first
DEFINE ('DB_USER','usernamegoeshere');
DEFINE ('DB_PASSWORD','passwordhere');
DEFINE ('DB_HOST','hostnamehere');
DEFINE ('DB_NAME','andtheotherthinghere');

$dbc = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) or die ('Could not connect to MySQL');

$db = mysql_select_db(DB_NAME, $dbc) or die('Could not select database.'.mysql_error());


$e = $_POST['email'];
$pass = $_POST['pass'];
$q = 'SELECT user_id from toddprod where email="'.$e.'" and pass= SHA1("'.$pass.'")';
$r = mysql_query($db, $q);
if( mysql_num_rows($r)==1 ){
    setcookie ( 'user_id', $r);
    setcookie ( 'email', '$e');
    setcookie ( 'logged-in', 'true');
    echo 'good';
    }
else if (mysql_num_rows($r)==0) {
    echo 'Your '.$e.' with password '.$pass;
};
mysql_close ($db);
?>

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Умм, здесь есть несколько вещей, которые я вижу неправильно ...

Прежде всего, ваш запрос должен быть обработан ...

$email = mysql_real_escape_string ($_POST['email']); // escape the email
$pass = SHA1(mysql_real_escape_string ($_POST['pass'])); // escape and encrypt the pass

// now you can put it into the query safely
$query = "SELECT user_id from toddprod where email = '$email' and pass = '$pass' ";

Далее вы выполняете запрос неправильнофункция mysql_query принимает два аргумента: запрос и соединение с базой данных.Вы передаете неправильные аргументы, вы передаете запрос и результат функции mysql_select_db, которая является просто логическим значением.Таким образом, вы должны $dbc не $db в этом запросе, и даже тогда вы передаете аргументы в неправильном порядке.Запрос идет первым, чем соединение.Так что должно быть ...

$result = mysql_query($query, $dbc);

Затем вы пытаетесь установить возвращаемое значение из функции mysql_query в качестве файла cookie, но это значение является ресурсом, а не идентификатором пользователя, который вам нужен.Вы должны фактически прочитать значение из ресурса следующим образом.

$row = mysql_fetch_array($result);
$userid = $row["user_id"];
setcookie('user_id', $userid);

Продолжение ... когда вы устанавливаете cookie-файл электронной почты, у вас есть переменная в одинарных кавычках, поэтому cookie-файл будет фактически содержать$e, а не реальный адрес электронной почты, потому что одинарные кавычки хранят строки litterly (без разбора переменных).Поэтому вы должны либо использовать двойные кавычки, либо вообще не использовать кавычки.Так что подойдет любое из следующего:

setcookie('email', "$e");
setcookie('email', $e);

И последнее, но не менее важное: у вас не должно быть точки с запятой в конце вашего оператора if, и вам снова нужно пропустить соединение, а нерезультат выбора базы данных в функцию mysql_close, поэтому он должен быть

mysql_close($dbc);

Там, надеюсь, это вас куда-то пробует, опробуйте эти изменения, и если проблема не исчезнет, ​​я был бы рад помочь вамдалее.

Вот ссылки, которые вам помогут:

http://www.php.net/manual/en/function.mysql-query.php

http://www.php.net/manual/en/function.mysql-fetch-array.php

http://www.php.net/manual/en/function.mysql-real-escape-string.php

Редактировать:

Здесь я исправил код в соответствии с найденными проблемами.Попробуйте, я не смог протестировать, так что там и там могут быть небольшие синтаксические ошибки, но это должно дать вам кое-что для сравнения.Также в будущем я бы предложил, чтобы вы называли свои переменные семантически / правильно, чтобы другим было легче их воспринимать, и это также не даст вам запутаться, как если бы вы передавали $ db вместо $ dbc в некоторые из ваших функций.

<?php
    // keep the function names in lowercase, no reason, just looks better to me
define('DB_USER', 'usernamegoeshere');
define('DB_PASSWORD', 'passwordhere');
define('DB_HOST', 'hostnamehere');
define('DB_NAME', 'andtheotherthinghere');

    // connect to the mysql server
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ('Could not connect to MySQL');
    // select the database, you don't need to store the result, it just returns true or false
mysql_select_db(DB_NAME, $conn) or die('Could not select database.' .mysql_error());

    // escape the input
$email = mysql_real_escape_string($_POST['email']);
$pass = sha1(mysql_real_escape_string($_POST['pass']));

    // create the query
$query = "SELECT user_id FROM toddprod WHERE email = '$email' AND pass = '$pass'";

    // execute the query
$result = mysql_query($query, $conn);
$usercount = mysql_num_rows($result);

if($usercount == 1){
    // read the results and get the user_id
    $row = mysql_fetch_array($result);
    $userid = $row['user_id'];

    // set the cookies
    setcookie('user_id', $userid);
    setcookie('email', $email);
    setcookie('logged-in', 'true');

    // echo success message
    echo 'good';
}elseif($usercount == 0) {
    echo "You're $email with password $pass";
}
mysql_close($conn);
?>
0 голосов
/ 08 сентября 2011

Перво-наперво, вы ДОЛЖНЫ очистить ввод данных пользователем с помощью mysql_real_escape_string () :

$e = mysql_real_escape_string ($_POST['email']);
$pass = mysql_real_escape_string ($_POST['pass']);

Читайте немного о SQL-инъекции , вы будете очень рады, что сделали.

Что касается основной проблемы, не могли бы вы предоставить немного больше контекста? Как вы проверяете, вошел ли пользователь в систему?

...