0

ユーザーによる承認または削除が保留されている Web サイト上のすべてのユーザー レビューを取得するために mysql クエリを実行しています。

私は基本的なファイル構造を持っています:

mysql の結果を取得する Reviews.php と関数ファイル approval_review.php。

新しいレビューはmysqlクエリでうまくいきますが、レビューを承認または削除しようとしても何も起こらず、エラーも何も発生しません。

承認をクリックすると、テーブル ptb_reviews.approved が '0' から '1' に更新され、削除をクリックすると、レビューが '0' から '1' に更新されます。

(この目的のために承認コードのみを含めました。承認が削除に設定されている場合、どちらも実質的に同じになるためです)

私は review_id を使用して、承認または削除するレビューとセッションを認識して、ユーザーのみが承認または削除できるようにしています。

誰かが見て、それを機能させる方法がわかるかどうかを確認できますか?

Reviews.php:

<?php
            $pending_set = get_pending_reviews();
            while ($reviews = mysql_fetch_array($pending_set)) {


    ?>

            <div class="prof-content-pend-reviews" id="reviews">
                 <div class="pend-review-content">
                 <?php echo "{$reviews['content']}"; ?>
                 </div>
                 <div class="message_pic">
                 <?php echo "<a href=\"profile.php?id={$reviews['from_user_id']}\"><img width=\"50px\" height=\"50px\" src=\"data/photos/{$reviews['from_user_id']}/_default.jpg\" /></a>";?>

                 </div>

                 <div class="forum-text">
                 <?php echo "Posted by {$reviews['display_name']}"; ?> <?php echo "".$age." days ago"; ?>
              </div>

              <a href="includes/approve_review.php?review=<?php echo $reviews['review_id']; ?>"><div class="approve"></div></a>
               <a href="includes/delete_review.php"><div class="delete"></div></a>


                 </div>

                 <? }  ?>

承認_レビュー.php:

 function approve_review($review_id, $user) {
                            global $connection;
                global $_SESSION;
                            $query = "UPDATE ptb_reviews
                                        SET approved='1'
                                        WHERE id=$review_id";
                mysql_query($query, $connection);


                    }


        <?php
        require_once("session.php"); 
        require_once("functions.php");
        require('_config/connection.php');
        approve_review ($_GET['review_id'], $_SESSION['user_id']);
        header('Location: http://localhost/ptb1/reviews.php');
        ?>
4

3 に答える 3

1

関数「approve_review」には 2 つのパラメーターが必要であることに気付きました。しかし、2 番目のパラメーターでは何も行われません。

ともかく、

まず第一に、セキュリティのために:

$review_id = (int) $_GET['review_id']; 
    // Just this, is a great security enhancement. Forces the variable to be int (like all id's are). 
    // You can also check if its a numeric by doing
if (is_numeric($review_id)){
    // continue with the update query
} else {
    // something fishy is going on..
}

SQLインジェクションを防ぐために、PDO、準備済みステートメントを確認することをお勧めします。

クエリは次のようになります。

$query = "UPDATE ptb_reviews SET approved = 1 WHERE id = '$review_id' LIMIT 1";
// Using a LIMIT 1 is also a good practice. It limits the updates to 1 only in case of a hack.

クエリをデバッグするには、クエリをエコーし​​て、適切な SQL 形式かどうかを確認する必要があります。

echo $query;
die();
// See what is really sent to MySQL

以下も使用する必要があります。

if (!mysql_query($query, $connection)){
    die(mysql_error());
}

クエリが正常に実行されるかどうか、およびエラーがあるかどうかを確認するには (レビュー済み = 1 に設定されていない理由)

于 2012-12-25T00:25:15.317 に答える
1

エラーなどはありません。

これはおそらく、エラーをチェックしていないためです。

データベース API 関数を呼び出すたびに、戻り値を確認する必要があります。ほとんどの関数falseは、エラーが発生した場合に戻ります。その後、別の関数を呼び出して、エラーの種類やエラー メッセージなどを確認する必要があります。

例:

$result = mysql_query($query, $connection);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
于 2012-12-25T00:20:54.350 に答える
0

エラーをインラインで表示することもできます。

mysql_query($query, $connection) or die(mysql_error());

これにより、問題が明らかになるはずです。

于 2012-12-25T00:23:14.320 に答える