2013-03-05 3 views
-2

PHP PAGE:JSON Encode Отказ

<?php 

include "linkpassword.inc"; 

function showVotes() 
{ 
$showresult = mysql_query("SELECT * from mms") or die("Invalid query: " . mysql_error()); 
$row = mysql_fetch_assoc($showresult); 
} 

function addVote() 
{ 
$sql= "UPDATE mms SET votes = votes+1 WHERE color = '".$_POST['color']."'"; 
$result= mysql_query($sql) or die(mysql_error()); 
return $result; 
} 


addVote(); 
showVotes(); 

?> 

Я пытаюсь получить выход массива для загрузки на страницу JavaScript, где я могу разбить массив на отдельные дивы, которые имеют идентификаторы, назначенные им. Вот что я пробовал

<script> 
$(document).ready(function() { 
    $('.answer').click(function (e) { 
     var color = $(this).attr("data-color"); 
     $.ajax({ 
      type: 'POST', 
      url: 'mm.php', 
      data: { color: color}, 
      dataType: 'json', 
      cache: false, 
      success: function(showVotes) { 
       $('#rvotes').html(showVotes[0]); 
      }, 
      error: function (jqXHR) { 
      } 
     }) 
    }) 
}); 
</script> 

Куда я иду не так ??

+3

Вы никогда не инициализировали $ results, только $ response – kennypu

+2

Также у вас, похоже, есть тот же самый запрос там дважды без причины. – lmortenson

+4

Это помогло бы, если бы вы объяснили, что * не так. Например. что вы ожидали, и что произошло на самом деле? На данный момент мы должны угадать. – Hamish

ответ

1

От того, что вы разместили в комментариях, у вас есть массив объектов .. не html, как указывает ваша функция. В зависимости от того, что вы хотите сделать, то ответ будет либо из следующих действий, чтобы получить доступ к свойствам этого объекта:

showVotes[0].votes 

Или

showVotes[0]['votes'] 

Например:

$('#rvotes').html(showVotes[0].votes); 

Или т.д.

Вторая попытка:

Во-первых, изменить текущую функцию «showVotes» к этому:

function showVotes() 
{ 
$showresult = mysql_query("SELECT * from mms") or die("Invalid query: " . mysql_error()); 
while ($row = mysql_fetch_assoc($showresult)) { 
    $response[] = $row; 
} 
return json_encode($response); 
} 

Во-вторых, удалить «подключенный успешно» текст на странице, а также любой другой текст, сгенерированный чем-то другим (он же, другая функция, которая возвращает указатель результата). Возможно, я ошибаюсь, но мне кажется, что генерация этого другого текста приводит к тому, что возвращаемый json интерпретируется как искаженный.

Краткое объяснение PDO:

try { 
    $dbh = new PDO("mysql:host=localhost;dbname=dbname", "user", "password"); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (\PDOException $e) { 
    echo "Error! Could not connect to database: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

Подключение к базе данных .. Это, как я научился делать это, хотя я предупреждал (и downvoted), чтобы не проверять на наличие ошибок таким образом, хотя это никогда не объяснялось почему.

Взаимодействие с базой данных:

$stmt = $dbh->prepare("UPDATE mms SET votes = votes+1 WHERE color = :color"); 
$stmt->bindParam(":color",$_POST['color']); 
$stmt->execute(); 

Результат использования:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $response[] = $row; 
} 

И так далее, и так далее. PDO избегает значений для вас, поэтому вам не нужно беспокоиться об инъекциях.

+1

@RobertMailloux:/извините, я не мог больше помочь. – Daedalus

+0

должен работать ... [скрипка] (http://jsfiddle.net/RVSNB/) – James

+1

@RobertMailloux Я не уверен, что понимаю вас; пожалуйста, уточните? – Daedalus