Sessions

doori

Grünschnabel
Fuer manche php Freaks mag mein Problem jetzt zu einfach sein, aber ich bin leider noch etwas unerfahren auf diesem Gebiet...

Ich arbeite gerade an einer Website, bei der ich mit Hilfe von Sessions das "Blaettern" durch mehrere Ausgabeseiten ermoeglichen soll.

Zuerst zur Struktur meiner Seite:
Ich habe eine index.php, aufgesplittet in Navigation, Suchbereich und Content. Mit Hilfe der Navigation wird jeweils der richtige Content in den entsprechenden Bereich geladen.
Mit Hilfe der Suchfunktion gebe ich Daten mit speziellen Attributen aus der Datenbank aus und hier beginnt das Problem.
Die Ausgabe funktioniert tadellos, doch wenn die Ausgabe mehr als 4 Eintraege enthaelt, sollen diese auf der nachesten Seite uebergeben werden.
Da habe ich versucht die 'pagenumber' in das Session-Array zu schreiben und auf der nachsten Seite aus dem Array wieder auszulesen.

In printForm.php speichere ich den Wert in das Session-Array...
session_start();
$_SESSION["pagenumber"] = $pagenum;


Das ist meine Navigation, die die Resultate aus mehrer Seiten ausgeben lassen soll:
if ($pagenum == $last)
{
}
else {
$next = $pagenum+1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
echo " ";
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";
}


Und in meiner index.php (da wo auch Navigation ist), versuche ich die Werte aus dem Array auszulesen:
foreach($_GET as $pagenum => $pagenum) {
$_SESSION["pagenumber"] = $pagenum;
}


Mit Session-ID hab ichs auch schon versucht, leider erfolglos. Die erste Ausgabeseite von der Suchfunktion wird angezeigt, wenn ich jedoch auf next klicke,
passiert rein gar nichts. Ich bekommen auch leider keine Fehlermeldung.

Ich hoffe, es kann mir jemand weiterhelfen, ich stehe wirklich an! :confused:

lg
 
Hast Du denn in der index.php auch session_start() genutzt um die Session zu starten?
Jedes Script welches die Session nutzt muss die Session erstmal mit session_start() starten um auf die entsprechenden Daten zugreifen zu koennen, ausgenommen natuerlich Scripts die in andere Scripts includet werden nachdem dort, oder in einem dort bereits includeten Script, bereits session_start() ausgefuehrt wurde.
 
Wozu speicherst du diese Information überhaupt in der Sitzung zwischen wenn sie doch gleichzeitig per URL übergeben wird?
 
Zu Dennis: Jop, session_start() steht ganz am Anfang in index.php, danach versuche ich gleich die Werte aus dem Array auszulesen.

Zu Gumbo: Den Wert uebergebe ich damit PHP weiss, jetzt soll er die naechste Seite mit den naechsten Werten anzeigen. Koennte man das besser/anders machen? Meinst, wuerde es reichen nur die SID zu uebergeben?
Uebringens uebergibt er immer die richtige Seitennummer, er schafft es aber nicht die naechsten Werte anzuzeigen, was ich sehr komisch finde. Er springt dann immer zu meiner default-Site zurueck...
 
Dann zeig doch mal den Codeteil, der zur Auswahl und Anzeige der Werte zuständig ist. Denn wenn die Seitenzahl richtig übergeben wird, liegt das Problem ja nicht bei der Seitenzahlübergabe.
 
Also hier kommt $pagenum das erste Mal zum Leben, natuerlich nachdem ich die session gestartet habe und mit der DB connected habe:

PHP:
//This checks to see if there is a page number. If not, it will set it to page 1 
if (!(isset($pagenum))) 
{ 
$pagenum = 1; 
}

//Now we search for our search term, in the field the user specified
$data = mysql_query("SELECT * FROM `properties` WHERE `propertyType` LIKE '%$selectType%' OR `postcode`='%$selectArea%' OR `price per week` = '%$selectPrice%'");

$selectedType=$data[1];
$selectedPrice=$data[5];
$selectedArea=$data[3];

$rows = mysql_num_rows($data); 

//-- for page number

//This is the number of results displayed per page 
$page_rows = 4; 

//This tells us the page number of our last page 
$last = ceil($rows/$page_rows); 

//this makes sure the page number isn't below one, or more than our maximum pages 
if ($pagenum < 1) 
{ 
$pagenum = 1; 
} 
elseif ($pagenum > $last) 
{ 
$pagenum = $last; 
} 

//This sets range that we will display in our query 
$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows;

//This is your query again, the same one... the only difference is we add $max into it
$data_p = mysql_query("SELECT * FROM properties $max") or die(mysql_error()); 

//--for page number


//And we remind them what they searched for
echo "<b>Searched For:</b> Type of property: " .$selectType.", price per week: ".$selectPrice.", in Area ".$selectArea."<p>";
}
//This counts the number or results - and if there wasn't any it gives them a little message explaining that
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo "Sorry, but we can not find an entry to match your query<br><br>";
}
//And we display the results
Print "<table width='644' border='0'>";
while($result = mysql_fetch_array( $data_p ))
{
	//$ID=$info['propertyNo'];
  	Print "<tr><td width='185' rowspan='6'>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
Print "....

Jedoch glaub ich, dass das Problem eher daran liegt, dass ich den Wert falsch ins Array speichere, denn wenn ich den uebergebenen Wert abrufen will und mit echo ausgeben will, zeigt er entweder das Wort "pagenumber" oder gar nichts.
Wenn ich pagenumber einen beliebigen Wert zuweise, zeigt er mir alle Eintraege dieser Seite an, aber vergisst alles (Seitennummer, Werte aus der DB,...) wenn ich auf Next klicke...
Wie gesagt, den Wert speichere ich so: $_SESSION["pagenumber"] = $pagenum;. Liegt da der Fehler? Aber PHP hat doch assoziative Arrays
 
Probier mal Folgendes:
PHP:
// This checks to see if there is a page number and validates it. If not, it will set it to page 1
$pagenum = (isset($_REQUEST['pagenum']) && $_REQUEST['pagenum'] > 0) ? abs(intval($_REQUEST['pagenum'])) : 1;

// Now we search for our search term, in the field the user specified
$query = '
	SELECT
		     %s
	  FROM
	        `properties`
	  WHERE
	        `propertyType`   LIKE "%'.mysql_real_escape_string($_REQUEST['selectType']).'%"
	     OR `postcode`       LIKE "%'.mysql_real_escape_string($_REQUEST['selectArea']).'%"
	     OR `price per week` LIKE "%'.mysql_real_escape_string($_REQUEST['selectPrice']).'%"
	';
$rowCount = mysql_result(mysql_query(sprintf($query, 'COUNT(*)')), 0);

//-- for page number

//This is the number of results displayed per page
$page_rows = 4;

//This tells us the page number of our last page
$last = ceil($rows/$page_rows);

//this makes sure the page number isn't below one, or more than our maximum pages
if ($pagenum > $last) {
	$pagenum = $last;
}

//This sets range that we will display in our query
$max = ' LIMIT ' .(($pagenum - 1) * $page_rows).',' .$page_rows;

//This is your query again, the same one... the only difference is we add $max into it
$data_p = mysql_query(sprintf($query, '*').$max) or die(mysql_error());

//--for page number


//And we remind them what they searched for
echo "<b>Searched For:</b> Type of property: " .htmlspecialchars($_REQUEST['selectType']).", price per week: ".htmlspecialchars($_REQUEST['selectPrice']).", in Area ".htmlspecialchars($_REQUEST['selectArea'])."<p>";
} 
//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
$anymatches=mysql_num_rows($data);
if ($anymatches == 0) 
{ 
echo "Sorry, but we can not find an entry to match your query<br><br>"; 
} 
//And we display the results 
Print "<table width='644' border='0'>"; 
while($result = mysql_fetch_array( $data_p )) 
{ 
    //$ID=$info['propertyNo']; 
      Print "<tr><td width='185' rowspan='6'>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
Print "....
Hast du das eigentlich selbst geschrieben?
 
Danke fuer die Aenderungen, es hat das Problem leider immer noch nicht ganz aus der Welt geschafft. :(

Hab daran herumgebastelt und jetzt wird die richtige $pagenum uebergeben (wahrscheinlich auch wegen deinem huebschen Codeteilchen), ABER...

...er vergisst das Resultat des Queries komplett! Dh ich muss auch dieses irgendwie ins Session-Array speichern... Ok, wie speichere ich ein Array in ein Array und geb es dann auch wieder richtig aus

*merch*
 
Die Ergebnisse, die die entsprechenden Daten aus der DB laden und danach in $data_p gespeichert werden. Wie kann ich $data_p richtig in das Session Array speichern und wieder richtig auslesen?


Zu deiner vorigen Frage: Ich hab den Code teils-teils selbst geschrieben. Ich hab eine einfache Such-Funktion online gefunden und habs auf mein Projekt erweitert. :)
 
Zurück