2016-11-23 1 views
0

Ich benutze Sitzungen in PHP. Oben auf beiden Seiten mache ich einen session_start(); vor allem anderen.Übergeben von Daten von einer Seite zu einer anderen mit PHP-Sitzungen

Später werden Informationen aus einer Datenbank abgerufen, die zum Auffüllen der Seite mit Informationen verwendet wird. Im Moment verwende ich nur 20 verschiedene Gegenstände. Die erste Seite durchläuft die Datenbank und gibt mir die Ausgabe, die ich erwarte. Sobald Sie ein Bild ausgewählt haben, wird es zu einer anderen Seite weitergeleitet, auf der mehr Informationen zu diesem Objekt angezeigt werden sollen. Das Problem ist, dass die neue Seite immer das letzte Objekt in der Datenbank anzeigt. Ich poste relevanten Code und hoffe, dass jemand meinen Fehler aufzeigen kann.

<?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(); 
} 


?> 

Der folgende Code ist, was ich auf der neuen Seite bin mit, die auf der ersten Seite ausgewählt über die ‚id‘ oder etwas im Zusammenhang mit dem Bild bringen sollte.

<?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

Auf Ihrer ersten Seite stellen Sie die Sitzung mit '$ listingID' ein. Woher kommt diese Variable? Und woher kommen alle Ihre Datenbankvariablen? Sie haben die Sitzung mit '$ listingID' erneut in Ihrem try-block gesetzt? –

+0

Ich habe alle mysql-Sachen entfernt, damit der Code nicht durcheinander kommt. Was passiert ist, kann ich die ID oder was auch immer für das ausgewählte Haus Echo, aber wenn ich es auswählen, spiegelt die neue Seite nur den letzten Eintrag in der Datenbank. Ich versuche, mich daran zu erinnern, welches Haus ausgewählt wurde, damit ich alle Informationen auf der nächsten Seite zeigen kann. – TomG103

+0

Haben Sie eigentlich vor ' Phil

Antwort

4

Sie überschreiben derzeit $_SESSION['listingID'] bei jeder Iteration auf der Schleife, was bedeutet, dass es immer nur das letzte Element enthält.

Anstatt Sitzungen zu verwenden, sollten Sie Abfragezeichenfolgen verwenden.

Ändern Sie die folgende Zeile in der ersten Datei:

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

zu

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

Jetzt auf lake_full.php statt Sitzungen zu verwenden, können Sie jetzt die ID erhalten die $_GET -super global mit:

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... 
Verwandte Themen