0

私のウェブサイトに小さな「ブックマーク」機能を作成しようとしました。ユーザーは、次のスクリプトを実行する「.bookmarkButton」をクリックできます。

<!--Add To Bookmarks--> 
        $(".bookmarkButton").click(function() {
            var pid=$(this).closest('div').attr('id');
            $('#noBookmark').hide(); 
            $.post('bookmarks/addBookmark.php', 'rid=' + pid, function (addBookmark) {
              $("#bookmarkResults").add(addBookmark);
           });  
       });

「addBookmark.php」のコードは次のとおりです。

    <?php

session_start();

if (isset($_SESSION['ridArray']) && count($_SESSION['ridArray'] > 0)){
    addBookmark();

} else if (isset($_POST['rid']) && !isset($_SESSION['ridArray'])) { 
    $_SESSION['ridArray'] = array(); 
    addBookmark(); 
}


function addBookmark() {  
    if (is_array($_SESSION['ridArray']) && isset($_SESSION['ridArray']) && isset( $_POST['rid']) ) { 
            array_push($_SESSION['ridArray'], $_POST['rid']); //push the id value from post to the session array
            //$_SESSION['ridArrayClean'] = array_unique($_SESSION['ridArray']); //remove duplicates
            print_r($_SESSION['ridArray']); 

            foreach($_SESSION['ridArray'] as $x) {
                // Get all the data from the "example" table
                $result = mysql_query("SELECT * FROM example WHERE id = $x") 
                or die(mysql_error()); 
                $row = mysql_fetch_array( $result );
                echo $row['productname'];
    }}}

    ?>

変数$_SESSION['ridArray']は、蓄積されたすべての ID を持つ配列を保持します。

私の問題は、このスクリプトが 1 つのアイテムがブックマークされている場合にのみ機能することです。ブックマークされた製品が複数ある場合、ブックマークしたすべてのものではなく、最後にブックマークされた製品名のみを取得します。

たとえば、bookmarkButton クラスをクリックした後に複数の製品 ID を取得する代わりに、配列内の 0,1,2,3 のようにします。最後にクリックされたもの、つまり6つだけを取得します。

私はこれをしばらく調べてきましたが、何が間違っているのかわかりません。

4

2 に答える 2

0

あなたのセッションが自動的に開始するとは思わない(php.iniで自動開始を設定することは可能ですが、デフォルトではそうではありません)ので、

<?php
session_start();

他の考え:

SELECT * FROM 例 WHERE id = $x

SQL インジェクションについて聞いたことがありますか?

ps: 二次チェックは必要ありません (前にチェックされます)。最初の条件から 2 番目の条件が続きます。

is_array($_SESSION['ridArray']) && isset($_SESSION['ridArray'])

私はそれを次のように書きます

<?php
session_start();
if (isset($_POST['rid'])) { 
    addBookmark(intval($_POST['rid'])); 
}


function addBookmark($rid) {  
     $_SESSION['ridArray'][] = $rid; 
     $_SESSION['ridArray'] = array_unique($_SESSION['ridArray']);

     foreach($_SESSION['ridArray'] as $x) {
         $result = mysql_query("SELECT * FROM example WHERE id = '$x'") 
                   or die(mysql_error()); 
         $row = mysql_fetch_array( $result );
         echo $row['productname'];
     }
}
?>
于 2012-01-28T08:06:58.460 に答える
0

「rid」を投稿した場合、スクリプトは製品名のみをエコーし​​ます。

また、次のように if を書くこともできます:

if (isset($_SESSION['ridArray'], $_POST['rid']) && is_array($_SESSION['ridArray'])) { 

最初に isset() をチェックします。また、追加で確認することもできます

... && count($_SESSION['ridArray'] > 0)
于 2012-01-28T07:22:02.057 に答える