использование jquery для обработки php-скрипта на основе возвращаемых значений

#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 для лучшей защиты моей передачи данных? Например, сериализацию?