Я не могу вернуть данные MySQL - PullRequest
1 голос
/ 15 февраля 2011

вот мой код JS:

$.ajax({
            url: 'login.php',
            type: 'POST',
            data: {
            loginName:  $("#loginName").val(),
            loginPass:  $("#loginPass").val()
            },
            dataType: 'json', 
            success: function(data){
                if(data.success){
                    $("#Message").fadeIn(function(){
                        $(this).html(data.message);
                    });
                }
                else
                {
                    $("#Message").fadeIn(function(){
                        $(this).html(data.message);
                    });
                }
            }
        });

и вот PHP:

<?php
$data = array();
$data['success'] = true;
$data['message'] = "Here is the message";
echo json_encode($data);
?>

Если у меня есть это, все будет в порядке, но если я отредактирую файл php так:

<?
    include "db.php";
    $data = array();
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        if($_POST['loginName'] == "" && $_POST['loginPass'] == "")
        {
            @$v = mysql_query("SELECT * FROM users WHERE name LIKE '$registerName'");
            @$p = mysql_num_rows($v);
            if ($p == 0){
                @$v = mysql_query("INSERT INTO users VALUES('','$registerName','$registerPass')");
                $data['message'] = "Byly jste úspěšně zaregistrováni.";
                $data['success'] = true;
            }
            else
            {
                $data['message'] = "Tento uživatel je tu již zaregistrován.";
                $data['success'] = false;
            }

        echo json_encode($data);
    }
?>

Ajax ничего не делает ... он просто отправляет данные, но ничего не предупреждает ... :( и я контролирую это MySQL события и его работы, если я использую только PHP ...

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

Во-первых, я хотел бы поприветствовать маленьких Столов Бобби

Теперь перейдем к делу, внимательно рассмотрим следующую строку кода:

if($_POST['loginName'] == "" && $_POST['loginPass'] == "")

Далее в повестке дня, ваше подавление ошибок неверно, вы должны контролировать свои ошибки, используя error_reporting в вашем файле конфигурации, и использовать обработчик ошибок для регистрации ошибок для вашего приложения.

Вы также должны заметить, что если вы отвечаете только одним результатом, если соблюдены определенные условия, я бы посоветовал вам отвечать независимо от того, какие данные или метод отправки, предоставить сообщение об ошибке для каждой возможности, так как на стадии разработки намного проще.

Вот как бы я написал код:

include "db.php"; //error_reporting(0);
$data = array();
$user_info = array_map("mysql_real_escape_string",$_POST);

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(!empty($user_info['loginName']) && !empty($user_info['loginPass']))
    {
        $v = mysql_query(sprintf("SELECT * FROM users WHERE name LIKE '%s'",$user_info['loginName']));

        if(mysql_num_rows($v) > 0)
        {
            //Update Here
            //Output Success here/ json_encode
            exit;
        }
    }
}
//Output Error here/ json_encode
1 голос
/ 15 февраля 2011

Почему вы подавляете ошибки?Это даже не делается правильно:

@$v = mysql_query("SELECT * FROM users WHERE name LIKE '$registerName'");

Во-первых, нет смысла подавлять ошибки в назначении - назначение всегда будет успешным.Помещение @ на другую сторону также было бы бесполезным.У вас не было бы абсолютно никаких признаков, если бы запрос обрушился на вас.Вы не проверяете, провалился ли он вообще.Код должен быть:

$result = mysql_query(...);
if ($result === FALSE) {
    die(mysql_error());
}

Проверяли ли вы, правильно ли проходят ваши данные POST?В настоящее время, если ни одно из этих полей POST не установлено, тогда ваш блок ответа ajax полностью обойден, и скрипт ничего не выдаст.

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