#php #jquery
#php #jquery
Вопрос:
Логика кода:
1) Пользователь вводит имя пользователя и пароль, пользователь нажимает отправить.
2) Скрипт jQuery извлекает приведенный ниже php-скрипт.
3) jQuery определяет, какое php-значение возвращается.
4) если возвращено значение 1, jquery и php обработают то, что содержится в операторе if.
5) если возвращается значение 0, jquery и php обработают то, что указано в инструкции else.
Как мне успешно заставить приведенный ниже код работать вместе с приведенной выше логикой? Кажется, я не могу установить связь в своем уме.
class1.php
$email = mysql_real_escape_string(strip_tags($_POST["username"]));
$password = sha1($_POST["password"]);
$sql = "SELECT * FROM users WHERE username = '{$email}' AND password = '{$password}'";
$result = mysql_query($sql) or exit("ERROR: " . mysql_error() . "<br>IN QUERY: " . $sql);
if (mysql_num_rows($result) > 0) {
return 1;
$row = mysql_fetch_array($result);
$_SESSION["userid"] = $row['user_pid'];
} else {
return 0;
$userid_generator = uniqid(rand(), false);
mysql_query("INSERT INTO users (user_pid, email, password, datetime_registered, is_leader) VALUES ('$userid_generator', '{$email}', '{$password}', NOW(), 'no')");
$id = mysql_insert_id();
$leaders = mysql_query("SELECT * FROM users WHERE is_leader LIKE '%yes%'");
while($rows = mysql_fetch_array($leaders)) {
if ($rows['is_leader'] == 'yes') {
$leader_id = $rows['user_pid'];
mysql_query("INSERT IGNORE INTO friends (node1id, node2id, friends_since, friend_type)
VALUES('$leader_id', '$userid_generator', NOW(), 'full')");
echo "new user created and logged in";
}
$_SESSION["userid"] = $userid_generator;
}
}
?>
index.html:
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
.loading {
float:right;
background:url(img/ajax-loader.gif) no-repeat 1px;
height:28px;
width:28px;
display:none;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
$('#submit').click(function () {
var username = $('input[username=username]');
var password = $('input[password=password]');
var data = 'name=' name.val() 'amp;email=' email.val() 'amp;website='
website.val() 'amp;comment=' encodeURIComponent(comment.val());
$('.text').attr('disabled','true');
$('.loading').show();
$.ajax({
url: "processing/class1.php",
type: "POST",
//pass the data
data: data,
//Do not cache the page
cache: false,
//success
success: function (html) {
//if process.php returned 1/true (send mail success)
if (html==1) {
alert('success');
//if process.php returned 0/false (send mail failed)
} else { alert('failure');
}
});
return false;
});
});
</script>
<input type="text" id="username" name="username" />
<input type="password" id="password" name="password" />
<input type="submit" id="submit" />
<div class="loading"></div>
<div id="display"></div>
Ответ №1:
Ajax фактически является «слепым клиентом». Итак, подумайте о том, что бы вы увидели, если бы вручную просматривали php-скрипт, и интерпретировали это как то, что анализировал бы ваш обратный вызов ajax.
Сказав это, искомое вами значение «0/1» зависит от одного (из многих) эхо-сигналов, выполняемых в вашем скрипте (в первую очередь, следующего):
echo "new user created and logged in";
если вы хотите, чтобы обратный вызов ajax распознавал 0/1, для этого потребуется только эхо «1» (не словоблудие), где в качестве ошибок просто возвращалось бы «0» (например, ваше or exit("ERROR...
).
Редактировать
Кроме того, если смотреть дальше, ваш var data = 'name='
компонент (при условии, что вы хотите, чтобы он соответствовал PHP $_POST["username"]
), вероятно, следует переименовать в var data ='username='
(свойство data вызова ajax — это то, что «заполняет $_POST
переменные вашего PHP, поэтому имена необходимо выровнять).
Комментарии:
1. Итак, по сути, мне нужно удалить все PHP-методы, которые возвращают логические значения 0-1?
2. И хорошая уловка проблемы с именем пользователя / паролем… кроме метода val(), нужно ли мне включать какие-либо методы Javascript / jQuery для лучшей защиты моей передачи данных? Например, сериализацию?