2

偽のショップ サイトの「カタログ」ページを作成しています。ページに表示されているサムネイルの 1 つをクリックすると、Java スクリプト オーバーレイが製品のすべての情報と共に表示されます (大きな画像など)。 photo1') とそのサムネイル (製品は SQL データベースにあります)。

これは意図したとおりにオーバーレイをプルアップしますが、関連する 'photo1' を 1 つだけ取得するのではなく、テーブルからそれらすべてを取得します。

先生の助けを借りましたが、彼女は助けることさえできませんでしたが、私が集めたものから、どのサムネイルが選択されたかを保存する方法が必要であり、オーバーレイのためにどの情報を引き出すかを明確にすることができます.

主要:

<div id="overlay">
    <div>
    <?php
        include 'includes/connection.php';

        try {
            $sql = 'SELECT * FROM item;';
            $resultSet = $pdo->query($sql);
        } // end try
        catch (PDOException $e) {
            echo 'Error fetching items: ' . $e->getMessage();
            exit();
        } // end catch

        foreach ($resultSet as $row) {
            // put each rows's elements into variables
            $itemName = $row['itemName'];
            $unitPrice = $row['unitPrice'];
            $qtyOnHand = $row['qtyOnHand'];
            $thumbNail = $row['thumbNail'];
            $photo1 = $row['photo1'];

            echo '<td><img  src="' .$photo1 .'" width="500" height="500" alt="$itemName" title="$itemName" ></td>';
        }
    ?>

    <p>Content you want the user to see goes here.</p>
Click here to [<a href='#' onclick='overlay()'>close</a>]
    </div>
</div>

<div id="MainHolder">
    <div id="Headerbar">
        <?php
            include 'includes/login.php';
        ?>
        <div class="ContentBody">
            <div class="Content">
                <article> 
                    <h2>Store</h2>
                    <?php
                        include 'includes/connection.php';
                        try
                        {
                            $sql = 'SELECT * FROM item;';
                            $resultSet = $pdo->query($sql);
                        } // end try
                        catch (PDOException $e)
                        {
                            echo 'Error fetching items: ' . $e->getMessage();
                            exit();
                        } // end catch
                    ?>
                    <!-- open table -->

                    <article>
                    <?php
                        // read result set and populate table 
                        foreach ($resultSet as $row)
                        {
                            // put each rows's elements into variables
                            $itemName = $row['itemName'];
                            $thumbNail = $row['thumbNail'];
                            $qtyOnHand = $row['qtyOnHand'];
                            // test for out of stock condition
                            // if no stock, display out of stock image else display add to cart image 
                            if ($qtyOnHand <= 0) {
                                echo '<td><img  src="images/outOfStock.png" border="3" class="floatingImage" height="80" width="80" alt="" title=""></td>';
                            } else {
                                echo '<td><img class="floatingImage" border="3" src="' .$thumbNail .'" width="80" height="80" alt="' .$itemName .'" title="' .$itemName .'" onclick="overlay()" ></td>';
                            }
                        } // end foreach
                        // close table 
                        echo '</article>';
                    ?>
                </article>
             </div>
             <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
        </div>          
    </div>
</div>

Javascript:

function overlay() {
    el = document.getElementById("overlay");
    el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
}

オーバーレイとカタログは同じファイルにあります。私はまだ学んでいるので、乱雑な書式設定/コードについてお詫び申し上げます。

編集: コードの一部をマージしました。これは、ヘッダー以外のほとんどのストア ページ全体を示しています...

4

4 に答える 4

1

itemName をサーバーに送信するには、オーバーレイ関数を編集する必要があります。これにより、ユーザーがクリックした項目がサーバーに通知されます。

オーバーレイ機能:

function overlay() {

    var item = this.getAttribute("title");//this gets the name of item that was clicked
}

ここで、サーバーへの ajax リクエストをセットアップする必要があります。

function ajaxRequest(item) {
  if (window.XMLHttpRequest){
    var xmlhttp= new XMLHttpRequest();
    xmlhttp.onreadystatechange=function(){
      if (xmlhttp.readyState==4 && xmlhttp.status == 200){//show the overlay after we recieve a response from the server
        el = document.getElementById("overlay");
        el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
        el.innerHtml = ''; //remove previous response
        el.innerHTML=xmlhttp.responseText; //insert the response in your overlay
      }
    }
    xmlhttp.open("GET","overlay.php?item="+ encodeURIComponent(item),true);
    xmlhttp.send();
  }
}

次に、オーバーレイ関数を編集して、ajaxRequest 関数を呼び出す必要があります。

function overlay() {

    var item = this.getAttribute("title");//this gets the name of item that was clicked
    ajaxRequest(item); //send the item name to server
}

これを行った後、PHP はサーバー上の変数を受け取ります。overlay.php という新しいファイルを作成し、次のコードを挿入します。このファイルを Store.php ファイルと同じディレクトリに保存します。

オーバーレイ.php:

<?php
if (isset($_GET['item'])) {//check if you received the name
    $itemName = $_GET['item'];

   //query database for the itemName

                        try
                        {
                            $sql = 'SELECT * FROM item WHERE itemName ='.$itemName.';';//just select data with the matching item name.
                            $resultSet = $pdo->query($sql);
                        } // end try


                        catch (PDOException $e)
                        {
                            echo 'Error fetching items: ' . $e->getMessage();
                            exit();
                        } // end catch
    //fetch the data
    foreach ($resultSet as $row) {
        // put each rows's elements into variables
        $itemName = $row['itemName'];
        $unitPrice = $row['unitPrice'];
        $qtyOnHand = $row['qtyOnHand'];
        $thumbNail = $row['thumbNail'];
        $photo1 = $row['photo1'];
    echo '<td><img  src="' .$photo1 .'" width="500" height="500" alt="$itemName" title="$itemName" ></td>';
    }//end foreach

}//end if
?>
于 2013-06-27T03:27:46.470 に答える
0

クライアント側に完全にデータを保存したい場合は、html5 のローカル ストレージ機能と組み込みの sql lite データベースを使用して、Javascript を使用して情報を保存および取得できます。

于 2013-06-27T03:43:51.053 に答える
0

私はあなたの問題を理解しようとし、jQuery を使用して解決しました。

まず、jQuery lib をロードする必要があります

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

また、オーバーレイ内のすべての生産情報に display:none スタイルを追加します (デフォルトは非表示)。

echo '<td><img src="' .$photo1 .'" width="500" height="500" alt="$itemName" title="$itemName" style="display:none" ></td>';

サムネイルのインライン onClick イベント トリガーを削除する

echo '<td><img class="floatingImage" border="3" src="' .$thumbNail .'" width="80" height="80" alt="' .$itemName .'" title="' .$itemName.'"'></td>';

このクリック イベント ハンドラを追加すると、jQuery はユーザーがクリックしたプロダクション情報を表示できます。

$(".floatingImage").click(function(){
    var itemName = $(this).attr('alt');
    $('#overlay img').hide();
    $('#overlay img[alt="'+itemName+'"]').show();
    overlay();
});

これがお役に立てば幸いです。

于 2013-06-27T04:03:15.877 に答える
0

このループを使用して DB から製品を初めて取得する場合:

foreach ($resultSet as $row) {
    // put each rows's elements into variables
    $itemName = $row['itemName'];
    $unitPrice = $row['unitPrice'];
    $qtyOnHand = $row['qtyOnHand'];
    $thumbNail = $row['thumbNail'];
    $photo1 = $row['photo1'];
    echo '<td><img  src="' .$photo1 .'" width="500" height="500" alt="$itemName" title="$itemName" ></td>';
}

ユーザーがオーバーレイの画像をクリックしたときに表示するすべての属性ですか? その場合は、実際の<img>タグに値を保存してください。

    echo '<td><img src="' .$photo1 .'" width="500" height="500" alt="$itemName" title="$itemName" data-unit-price="$unitPrice" data-qty="$qtyOnhand"></td>';

次に、Javascript を使用してデータにアクセスし、オーバーレイに表示できます。

于 2013-06-27T03:50:38.297 に答える