7

ユーザーが「問題」を送信してからコメントできるようにする単純なアプリケーションがあります。私は単純な投票システムを作成しようとしています。これにより、ユーザーは問題を「投票」してリストの上位に押し上げることができます。私はPHPの基本的な知識があり、これまでのところすべてが機能していますが、これを機能させる方法がわかりません。

私はオンラインでチュートリアルに従ってきましたが、これまでのところ私のproblem.phpページにこれがあります...

if (isset($_GET['vote'], $_GET['id'])){
        add_problem_vote($_GET['id]'], $_GET['vote']);
    }

<a href="?vote=up&amp;id=<?php echo $problemID; ?>">Vote</a>

そして、私の functions.php ページで...

function add_problem_vote($problemID, $vote){

    $problemID = (int)$problemID;

    $vote = ($vote === 'up') ? '+' : '-';

    $sql = "UPDATE `problems` SET `votes` = `votes` {$vote} 1 WHERE `id` = {$problem_id}";

    mysql_query($sql);
}

すべてのテーブル フィールドは間違いなく正しい名前です。セッションが終了した後の再投票など、考慮すべきことがたくさんあることは承知していますが、アイデアを示している限り、完璧である必要はありません。リンクがクリックされた瞬間にページにリダイレクトされますが、投票は mysql テーブルで変更されません。

4

9 に答える 9

1
$sql = "UPDATE `problems` SET `votes` = `votes` ".$vote." 1 WHERE `id` = ".$problem_id;
mysql_query($sql) or die(mysql_error());

あなたが得ているエラーを確認してください。

于 2012-06-01T11:29:42.293 に答える
0

これについてはまったくわかりませんが、次のとおりです。

$problemID = (int)$problemID;

それは次のとおりです。

$problemID = intval($problemID);

何かが機能しなくなるたびに、常に追加します

echo $sql;

mysql_query() を呼び出す前に; そうすれば、結果をコピーして SQL ブラウザに貼り付け、正しいかどうかを確認できます。

編集:別の外観を持っていて、以前にSQLステートメントをエスケープした人がいたので、試してみることに言及する価値があると思いました:

$sql = "UPDATE `problems` SET `votes` = `votes` {$vote} 1 WHERE `id` = {$problem_id}";

に:

$sql = "UPDATE `problems` SET `votes` = `votes` {".$vote."} 1 WHERE `id` = {$problem_id}";

しかし、実行しているすべての SQL が上昇している場合は、次のことを試してみませんか。

$sql = "UPDATE `problems` SET `votes` = `votes`+1 WHERE `id` = {$problem_id}";

それはまさにあなたがしていることなので、 $vote パラメータを渡す必要はありません。

その他の簡単なデバッグ オプションは次のとおりです。

print_r($_POST); // to show all the POSTED variables from a form
print_r($_GET);  // to show all the parameters from the URL 

ぶろっく

于 2012-05-15T15:40:58.257 に答える
0

is-set 関数の両方のデータ間で「And」を使用するか、単にデータの 1 つを is-set 関数に使用できます。

 if (isset($_GET['vote'] &&  $_GET['id'])){
                add_problem_vote($_GET['id]'], $_GET['vote']);
            }

        <a href="?vote=up&amp;id=<?php echo $problemID; ?>">Vote</a>



    function add_problem_vote($problem_id,$vote)
{
$query_select="select votes from problems where id='".$problem_id."'";
$query_run=mysql_query($query_select);
if(mysql_num_rows($query_run)>0)
{
$vote_num=mysql_result($query_run,0,votes)
if($vote==up)
$vote_num=+$vote_num;
else
$vote_num=-$vote_num
}
$sql = "UPDATE `problems` SET `votes` = '$vote_num'  WHERE `id` = '".$problem_id.'"";

    mysql_query($sql);

}
于 2015-02-11T12:41:08.543 に答える
0

Please check the following for the errors

  • Include the functions.php in problem.php
  • Use mysqli_query($sql) insted of mysql_query($sql).Because it is deprecated.You can use PDO also
  • Use die(mysqli_error($connection_varible)) function to track sql errors.
于 2015-01-22T06:17:44.153 に答える
0

データベースへのMYSQL接続を確立していないため、この方法では機能しません。

私の PHP プロジェクトでは、一度書いたクラスを (再) 使用し、これらすべての関数をラップし、適切なエラー処理などを行います。

おそらく、このようなことを考える必要があります。または、少なくともmysql_connectクエリを実行する前に追加する必要があります。

それが役立つことを願っています。

于 2012-05-07T10:53:20.030 に答える
0

これを試して :

"UPDATE `problems` SET `votes` = `votes` ".mysql_real_escape_string($vote)." 1 WHERE `id` = ".mysql_real_escape_string($problem_id);
于 2012-05-07T11:04:18.183 に答える