2015-02-12 7 views
0

Я пытаюсь что-то сделать в JS и PHP.Получить количество строк результатов

Я вызываю файл PHP в Ajax, и я хочу, чтобы этот код возвращал количество строк результата. Поэтому я повторяю это:

$connexion = new PDO($source, $utilisateur); 
$requete = "SELECT * FROM scores WHERE pseudo = '".$_POST['login']."' AND Score >= 0"; 
$resultat = $connexion->query($requete); 

echo ($resultat->rowCount()); 

И когда я пытаюсь получить его в сделано в Ajax не работает, он возвращает фатальную ошибку: «вызов функции члена ROWCOUNT() на не-объект ».

$.ajax({ 
    url: "../php/levelState.php", 
    type: "POST" 
}).done(function(levelUnlocked) { 
    // Affichage de l'écran de sélection 
    $("#title, #game").hide(); 
    $("link").attr({rel:"stylesheet", href:"../css/select.css"}); 
    $("#select").fadeIn("slow"); 
    for (var i = 0; i < levelUnlocked; i++) { 
     $('#' + parseInt(levelUnlocked + 1)).removeClass('levelLock').addClass('level'); 
    } 
}); 

});

Спасибо за помощь!

+0

Ваш скрипт php запущен, исправьте это. Вы также должны, на мой взгляд, вернуть json в PHP-скрипт, чтобы он отправил что-то, с чем JS может легко работать. – Halfstop

ответ

0

Ваш запрос возвращает null. Когда вы делаете $resultat->rowCount(), ваше приложение вызывает фатальную ошибку. Вы должны проверить, нет ли вашего $resultat или нет.

В любом случае, текущий запрос равен: "SELECT * FROM scores WHERE pseudo = '' AND Score >= 0";. Вот почему вы получили эту ошибку. Кстати вы должны использовать подготовленное заявление.

Чтобы решить вашу проблему, вам следует указать, какие данные вы отправили в своей функции ajax (я добавил ключевое слово data).

$.ajax({ 
    url: "../php/levelState.php", 
    data: { login: $("#selector-login").val() } // You should add something like this 
    type: "POST" 
}).done(function(levelUnlocked) { 
    // Affichage de l'écran de sélection 
    $("#title, #game").hide(); 
    $("link").attr({rel:"stylesheet", href:"../css/select.css"}); 
    $("#select").fadeIn("slow"); 
    for (var i = 0; i < levelUnlocked; i++) { 
     $('#' + parseInt(levelUnlocked + 1)).removeClass('levelLock').addClass('level'); 
    } 
}); 
+0

Вы были правы, переменная $ resultat var была ложной, у меня есть ошибка. Мне понравился ваш пример, поэтому я передал данные, но на самом деле, если я понимаю, что мой запрос может найти результаты? У меня есть одно значение, соответствующее запросу ... – Karz

+0

Проблема решена! Не было никаких результатов, потому что я сделал ошибку в названии табличных форм ... – Karz

+0

Я рад, что это помогло. Вы можете рассмотреть ответ @gnarly о подготовленных заявлениях. – Debflav

0

Как указано в the PHP documentation

PDO :: запроса() возвращает объект PDOStatement, или FALSE, в случае неудачи.

Мое лучшее предположение заключается в том, что ваш запрос терпит неудачу, а значение $ resultat - FALSE, поэтому на нем нельзя запустить метод rowCount().

0

Чтобы исправить ваш PHP, я бы сделал что-то вроде этого.

header('Content-Type:application/json'); 
$connexion = new PDO($source, $utilisateur); 
$stmt = $connexion->prepare("SELECT COUNT(*) FROM scores WHERE pseudo = ? AND Score >= 0"); 
$stmt->execute(array($_POST['login'])); 
$res = $stmt->fetch(PDO::FETCH_NUM); 
echo json_encode(array_pop($res)); 
+0

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

+0

Попробуйте запустить скрипт PHP, не используя Ajax и отлаживая вызов базы данных. Есть что-то, что отключает ваш вызов db, может быть проблемой с подключением к базе данных или структурой таблицы. Без фактического сообщения об ошибке я не могу помочь. – Halfstop

Смежные вопросы