0

私はjquery-phpベースの5つ星評価システムを構築しました。

評価は、ヒット数とともにデータベースに挿入/保存されます。

星が繰り返しクリックされたときにデータベースに評価を挿入することにはいくつかの問題があります。つまり、星が何度もクリックされ続けると、評価は挿入されませんが、ヒットが挿入され、新しい結果の評価に影響します。

これはphpバックエンドの問題です。評価が挿入されたときにのみヒットを挿入しようとしましたが、機能しません。

PHP

    <?php 
    $post_rating = '5';
    $id = '1';
    $database = 'comment-database';
    $tablename = 'comment-table';
    require_once('rt-connect.php');

    $find_data = "SELECT hits, user_rating, rating_total FROM $tablename WHERE id='$id'";
    $query = mysqli_query($connection, $find_data) or trigger_error(mysqli_connect_error(), E_USER_ERROR);
    $row = mysqli_fetch_assoc($query);

    $current_hit = $row['hits'];
    $current_rating_total = $row['rating_total'];

    $new_hits = $current_hit+1;
    $new_rating_total = $current_rating_total + $post_rating;
    $new_rating = $new_rating_total / $new_hits;
    $new_round_rating = ceil($new_rating/0.5)*0.5;

    $update_rating = mysqli_query($connection, "UPDATE $tablename SET user_rating='$new_round_rating' WHERE id='$id'"); 
    if ($update_rating){
    $update_hits = mysqli_query($connection, "UPDATE $tablename SET hits='$new_hits' WHERE id='$id'");
    $update_rating_total = mysqli_query($connection, "UPDATE $tablename SET rating_total='$new_rating_total' WHERE id='$id'"); 
    }   

    $find_data2 = "SELECT hits, user_rating, raw_rating, rating_total FROM $tablename WHERE id='$id'";
    $query2 = mysqli_query($connection, $find_data2);
    $row2 = mysqli_fetch_assoc($query2);

    $current_hit2 = $row2['hits'];
    $current_rating2 = $row2['user_rating'];
    $current_raw_rating_total2 = $row2['raw_rating'];
    $current_rating_total2= $row2['rating_total'];

    echo $current_hit2.'<br />';
    echo $current_rating2.'<br />';
    echo $current_raw_rating_total2.'<br />';
    echo $current_rating_total2.'<br />';
    ?>

それを行うための可能な方法を見て、提案してください。

ありがとう。

4

1 に答える 1

0

すべてのパラメーター(ヒット、評価、rating_total)の同じ行(同じIDに対応する同じテーブルの)を更新しているので、単一の更新クエリでそれを実行してみませんか。そうすれば、トランザクションは完全にアトミックになり、一方のクエリが渡されてもう一方が失敗することを心配する必要はありません。

これは、単一の更新クエリである必要があります。

UPDATE $tablename SET user_rating='$new_round_rating', hits='$new_hits',rating_total='$new_rating_total'   WHERE id='$id'

それがあなたのために働くかどうか私たちに知らせてください。これは実際の問題をデバッグしませんが、少なくとも同じもののよりクリーンな実装になります。

于 2012-10-12T06:32:31.340 に答える