2016-11-23 22 views
0

私はPHPでセッションを使用しています。両方のページの一番上に、私はsession_start()を実行します。何よりも前にPHPセッションを使用してあるページから別のページにデータを渡す

その後、情報をページに読み込むために使用されるデータベースから情報が引き出されます。今は20種類のアイテムしか使っていません。最初のページがデータベースを反復して、私が期待する出力が得られます。イメージを選択すると、そのオブジェクトに関する詳細情報が必要な別のページに移動します。問題は、新しいページには常にデータベース内の最後のオブジェクトが表示されることです。私は関連するコードを掲示し、誰かが私の失敗を指摘できることを願っています。

<?php 

//initial page with list of objects 

session_start(); 

$_SESSION['listingID'] = $listingID; 


?> 

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>Some Title</title> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> 
    <link rel="stylesheet" href="main.css" /> 

</head> 
<body> 

<!-- Wrapper --> 
<div id="wrapper"> 

    <!-- Header --> 
    <header id="header"> 
     <h1><a href="#" target="__blank">Some H1 that works fine</h1> 
     <nav> 
      <ul> 
       <li><a href="#" target="__blank">Some link</a></li> 
      </ul> 
     </nav> 
    </header> 
</div> 



</body> 
</html> 

<?php 

try { 
    $dbh = new PDO("mysql:host=$dbservername;dbname=$dbname", $dbusername, $dbpassword); 
    //echo "Connection is successful!<br/>"; 
    $sql = "SELECT * FROM $tablename"; 
    $users = $dbh->query($sql); 



    foreach ($users as $row) { 
    extract($row); 
    $_SESSION['listingID'] = $listingID; 
    echo "THIS IS listingID ". $listingID; 
    echo '<div id="main" style="margin-bottom: 2em;">'; 
    echo '<article class="thumb">'; 
    echo '<a href="lake_full.php?'.$listingID.'" class="image"><img style="width:100%;height:100%;" src="' . $image . '" /></a>'; 
    echo "<h2>$address</br>$city, $state $zip</br>$$asking_price</h2>"; 
    echo '</article>'; 
    echo '</div>'; 



    } // end foreach 

$dbh = null; 
} 
catch (PDOexception $e) { 
    echo "Error is: " . $e-> etmessage(); 
} 


?> 

次のコードは、最初のページで選択した画像に関連付けられた「id」や何かを引き継ぐ新しいページで使用しているコードです。

<?php 

//lake_full.php 
session_start(); 

$listingID = $_SESSION['listingID']; 
echo "ID IS ".$listingID; 

?> 


    <!DOCTYPE HTML> 
    <html> 
    <head> 
     <title>Some Title</title> 
     <meta charset="utf-8" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> 

     <link rel="stylesheet" href="main.css" /> 

    </head> 
    <body> 

    <!-- Wrapper --> 
    <div id="wrapper"> 

     <!-- Header --> 
     <header id="header"> 
      <h1><a href="#">Some H1</h1> 
      <nav> 
       <ul> 
        <li><a href="#" target="__blank" class="icon fa-info-circle">Some Link</a></li> 
       </ul> 
      </nav> 
     </header> 



    </body> 
    </html> 

<?php 

try { 
    $dbh = new PDO("mysql:host=$dbservername;dbname=$dbname", $dbusername, $dbpassword); 
    //echo "Connection is successful!<br/>"; 
    $sql = "SELECT listingID FROM $tablename"; 
    $users = $dbh->query($sql); 

    echo "THIS ID IS ". $mls; 

     echo '<div id="main" style="margin-top: 2em;">'; 
     echo '<article class="thumb">'; 
     echo '<a href="#" class="image"><img style="width:100%;height:100%;" src="' . $image . '" /></a>'; 
     echo "<h2>$address</br>$city, $state $zip</br>$$asking_price</h2>"; 
     echo '</article>'; 
     echo '</div>'; 

    $dbh = null; 
} 
catch (PDOexception $e) { 
    echo "Error is: " . $e-> etmessage(); 
} 



?> 
+0

最初のページでは、セッションを '$ listingID'で設定しています。その変数はどこから来たのですか?そして、あなたのすべてのデータベース変数はどこから来ますか?また、あなたのtry-blockの '$ listingID'でセッションを再設定しますか? –

+0

mysqlの内容をすべて削除して、コードが乱雑にならないようにしました。 私は選択した家のIDなどをエコーすることができますが、それを選択すると、新しいページにはデータベースの最後の項目だけが反映されます。どの家が選ばれたのかを覚えさせようとしているので、次のページにすべての情報を表示することができます。 – TomG103

+0

* "新しいページ" *に '<?php'の前に空白文字がありますか?私は '$ listingID'を使っているところも見ません – Phil

答えて

4

あなたは現在、それは常に最後の項目が含まれていることを意味し、あなたのループの各反復で$_SESSION['listingID']を上書きしています。

セッションを使用する代わりに、クエリ文字列を使用する必要があります。

変更し、あなたの最初のファイルに次の行:

echo '<a href="lake_full.php?'.$listingID.'" class="image"><img style="width:100%;height:100%;" src="' . $image . '" /></a>'; 

lake_full.phpに今
echo '<a href="lake_full.php?listingID='.$listingID.'" class="image"><img style="width:100%;height:100%;" src="' . $image . '" /></a>'; 

に、代わりのセッションを使用して、あなたは今、グローバル-Super $_GETを使用してIDを取得することができます。

if (!isset($_GET['listingID'])) { 
    // If we didn't get an ID, we can't continue, so stop the script 
    die('Invalid listing ID'); 
} 

$listingID = $_GET['listingID']; 

// ... the rest of the code... 
関連する問題