-2

PHP ページ:

<?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 ページにロードして、配列を ID が割り当てられた個別の div に分割できるようにしようとしています。これが私が試したものです

<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>

どこが間違っていますか??

4

1 に答える 1

1

あなたがコメントに投稿したものから、あなたが持っているのはオブジェクトの配列です..あなたの関数が示すようにhtmlではありません。やりたいことに応じて、そのオブジェクトのプロパティにアクセスするための答えは次のいずれかになります。

showVotes[0].votes

または

showVotes[0]['votes']

例えば:

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

またはなど。

2 回目の試行:

まず、現在の「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();
}

データベースへの接続..これが私がそれを行うことを学んだ方法ですが、理由は説明されていませんが、この方法でエラーをチェックしないように警告されました(そして反対票を投じられました)。

データベースの相互作用:

$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 は値をエスケープするので、インジェクション攻撃について心配する必要はありません。

于 2013-03-05T02:54:15.800 に答える