Zur Navigation

Seitennavigation erstellen [3]

21 andehrl

Ob du jetzt eine Variable oder Konstante definierst, ist in diesem Fall egal - nur kannst du natürlich auch nur das im LIMIT Statement verwenden, was du vorher definiert hast.

ich kann also $maxRows_R1 = 10; so verwenden.





Das Navigationsscript musst du noch in ein Script einbauen. Und statt der Abfrage $result aus dem Navigationsscript verwendest du die Abfrage in deinem Script

dann verändere ich diese code der navigation:

$result = @mysql_query_R1("SELECT * FROM Eingabe LIMIT $start, ".$maxRows_R1);

auf diese weise?:

$result = @mysql_query_R1("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H:%i') AS zeit_formatiert, IF(Eingabe.zeit = '00:00:00', 1, 0) AS bar, Eingabe.hinfahrtladeflaeche, Eingabe.hilfeeinausladen, Eingabe.rueckfahrt, Eingabe.rueckfahrtladeflaeche, Eingabe.beschreibung, Eingabe.preis, Eingabe.marke, Eingabe.model, Eingabe.laderaumhoehe, Eingabe.laderaumbreite, Eingabe.laderaumlaenge, Eingabe.laderaumvolumen, Eingabe.treibstoff, Eingabe.getriebe, Eingabe.tempo, Eingabe.nutzername, Eingabe.passwort, Eingabe.mail, Eingabe.handy, Eingabe.tel FROM Eingabe 
WHERE ";
$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'Abfahrtsort') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($_POST['abfahrtsort'], 'text') . " AND ";
}

...



if (isset($_POST['getriebe']) && $_POST['getriebe'] != '-') {
    $query_R1 .= " (getriebe = " . GetSQLValueString($_POST['getriebe'], 'text') . " OR getriebe IS NULL) AND ";
}
$query_R1 .= "1 ORDER BY Eingabe.datum, bar, Eingabe.zeit, Eingabe.laderaumlaenge DESC, Eingabe.laderaumbreite DESC, Eingabe.laderaumhoehe DESC, Eingabe.laderaumvolumen DESC, Eingabe.treibstoff DESC, Eingabe.getriebe DESC";
$query_limit_R1 = sprintf("%s LIMIT %d, %d", $query_R1, $startRow_R1, $maxRows_R1);

12.11.2010 19:21

22 Jörg Kruse

Zitat von andehrl
Ob du jetzt eine Variable oder Konstante definierst, ist in diesem Fall egal - nur kannst du natürlich auch nur das im LIMIT Statement verwenden, was du vorher definiert hast.

ich kann also $maxRows_R1 = 10; so verwenden.

Ja - entsprechend verwendest du dann später auch $maxRows_R1

Das Navigationsscript musst du noch in ein Script einbauen. Und statt der Abfrage $result aus dem Navigationsscript verwendest du die Abfrage in deinem Script

dann verändere ich diese code der navigation:

$result = @mysql_query_R1("SELECT * FROM Eingabe LIMIT $start, ".$maxRows_R1);

auf diese weise?:

$result = @mysql_query_R1("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H:%i') AS zeit_formatiert, IF(Eingabe.zeit = '00:00:00', 1, 0) AS bar, Eingabe.hinfahrtladeflaeche, Eingabe.hilfeeinausladen, Eingabe.rueckfahrt, Eingabe.rueckfahrtladeflaeche, Eingabe.beschreibung, Eingabe.preis, Eingabe.marke, Eingabe.model, Eingabe.laderaumhoehe, Eingabe.laderaumbreite, Eingabe.laderaumlaenge, Eingabe.laderaumvolumen, Eingabe.treibstoff, Eingabe.getriebe, Eingabe.tempo, Eingabe.nutzername, Eingabe.passwort, Eingabe.mail, Eingabe.handy, Eingabe.tel FROM Eingabe 
WHERE ";
$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'Abfahrtsort') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($_POST['abfahrtsort'], 'text') . " AND ";
}

...



if (isset($_POST['getriebe']) && $_POST['getriebe'] != '-') {
    $query_R1 .= " (getriebe = " . GetSQLValueString($_POST['getriebe'], 'text') . " OR getriebe IS NULL) AND ";
}
$query_R1 .= "1 ORDER BY Eingabe.datum, bar, Eingabe.zeit, Eingabe.laderaumlaenge DESC, Eingabe.laderaumbreite DESC, Eingabe.laderaumhoehe DESC, Eingabe.laderaumvolumen DESC, Eingabe.treibstoff DESC, Eingabe.getriebe DESC";
$query_limit_R1 = sprintf("%s LIMIT %d, %d", $query_R1, $startRow_R1, $maxRows_R1);

$startRow_R1 muss noch angepasst werden (oder umgekehrt $start umbenannt werden)

Und weiter unten kannst du dann an gewünschter Stelle die Navigation einbauen

12.11.2010 19:37

23 andehrl

$startRow_R1 muss noch angepasst werden (oder umgekehrt $start umbenannt werden)

ich habe $start in $startRow_1 umgeändert und den code in meine seite eingesetzt.
bekomme nun diese fehlermeldung:

Parse error: syntax error, unexpected ';' in /is/htdocs/wp10548565_XUUKREW8G9/www/2eMitumzugAngeboteErweitertergebnis.php on line 543

zeile 543 ist die hier:

WHERE ";

wenn ich das semikolon entferne erhalte ich diese fehlermeldung:

Parse error: syntax error, unexpected T_VARIABLE in /is/htdocs/wp10548565_XUUKREW8G9/www/2eMitumzugAngeboteErweitertergebnis.php on line 544

zeile 544 ist diese hier:

$colname_R1 = "KEIN EINTRAG";



das gesamte navigationsscript schaut jetzt so aus:

<?PHP

$maxRows_R1 = 10;
$pageNum_R1 = 0;

define("NAV_LEISTE",11);

function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){
		
	$NavCeil = floor(NAV_LEISTE / 2);
	if($seiteAktuell > 1){
		$string .= '<a href="?site=1'.$extVariables.'"><<</a>&nbsp;&nbsp;';
		$string .= '<a href="?site='.($seiteAktuell-1).$extVariables.'"><</a>&nbsp;&nbsp;';
	}
	
	for($x=$seiteAktuell-$NavCeil;$x<=$seiteAktuell+$NavCeil;$x++){
		if(($x>0 && $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete))
			$string .= '<a href="?site='.$x.$extVariables.'">'.$x.'</a>&nbsp;&nbsp;';
		
		if($x==$seiteAktuell)
			$string .= $x . '&nbsp;&nbsp;';
	}
	
	
	if($seiteAktuell < $SitesComplete){
		$string .= '<a href="?site='.($seiteAktuell+1).$extVariables.'">></a>&nbsp;&nbsp;';
		$string .= '<a href="?site='.$SitesComplete.$extVariables.'">>></a>&nbsp;&nbsp;';
	}
	
	return $string;
	
}

$pageNum_R1 = $_GET['site'] + 0;

if(empty($pageNum_R1))
	$pageNum_R1 = 1;

$startRow_R1 = $pageNum_R1 * $maxRows_R1 - $maxRows_R1; 

$result = @mysql_query_R1("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H:%i') AS zeit_formatiert, IF(Eingabe.zeit = '00:00:00', 1, 0) AS bar, Eingabe.hinfahrtladeflaeche, Eingabe.hilfeeinausladen, Eingabe.rueckfahrt, Eingabe.rueckfahrtladeflaeche, Eingabe.beschreibung, Eingabe.preis, Eingabe.marke, Eingabe.model, Eingabe.laderaumhoehe, Eingabe.laderaumbreite, Eingabe.laderaumlaenge, Eingabe.laderaumvolumen, Eingabe.treibstoff, Eingabe.getriebe, Eingabe.tempo, Eingabe.nutzername, Eingabe.passwort, Eingabe.mail, Eingabe.handy, Eingabe.tel FROM Eingabe 
WHERE "
$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'Abfahrtsort') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($_POST['abfahrtsort'], 'text') . " AND ";
}
if (isset($_POST['zielort']) && $_POST['zielort'] != 'Zielort') {
   $query_R1 .= " zielort  = " . GetSQLValueString($_POST['zielort'], 'text') . " AND ";
}
if (isset($_POST['tag'], $_POST['jahr'], $_POST['monat']) && $_POST['tag'] != '-' && $_POST['jahr'] != '-' && $_POST['monat'] != '-') {
    $query_R1 .= " datum >= '" . sprintf("%04d-%02d-%02d", $_POST['jahr'], $_POST['monat'], $_POST['tag']) . "' AND ";
} else {
    $query_R1 .= " datum >= '" . date("Y-m-d") . "' AND ";
}
if (isset($_POST['stunde'], $_POST['minute']) && $_POST['stunde'] != '-' && $_POST['minute'] != '-') {
    $query_R1 .= " (zeit >= '" . sprintf("%02d:%02d", $_POST['stunde'], $_POST['minute']) . "' OR zeit = '00:00:00') AND ";
}
if (isset($_POST['hinfahrtladeflaeche']) && $_POST['hinfahrtladeflaeche'] != 'Angaben zur Ladefläche') {
    $query_R1 .= " hinfahrtladeflaeche = " . GetSQLValueString($_POST['hinfahrtladeflaeche'], 'text') . " AND ";
}
if (isset($_POST['hilfeeinausladen']) && $_POST['hilfeeinausladen'] != '-') {
    $query_R1 .= " (hilfeeinausladen = " . GetSQLValueString($_POST['hilfeeinausladen'], 'text') . " OR hilfeeinausladen Like '-') AND ";
}
if (isset($_POST['rueckfahrt']) && $_POST['rueckfahrt'] != '-') {
    $query_R1 .= " (rueckfahrt = " . GetSQLValueString($_POST['rueckfahrt'], 'text') . " OR rueckfahrt Like '-') AND ";
}
if (isset($_POST['rueckfahrtladeflaeche']) && $_POST['rueckfahrtladeflaeche'] != 'K.A. zur Ladefläche') {
    $query_R1 .= " (rueckfahrtladeflaeche = " . GetSQLValueString($_POST['rueckfahrtladeflaeche'], 'text') . " OR rueckfahrtladeflaeche Like 'K.A. zur Ladefläche') AND ";
}
if (isset($_POST['marke']) && $_POST['marke'] != '') {
    $query_R1 .= " (marke LIKE '%" . mysql_real_escape_string($_POST['marke']) . "%' OR marke IS NULL) AND ";
}
if (isset($_POST['model']) && $_POST['model'] != '') {
    $query_R1 .= " (model LIKE '%" . mysql_real_escape_string($_POST['model']) . "%' OR model IS NULL) AND ";
}
if (isset($_POST['laderaumhoehe']) && $_POST['laderaumhoehe'] != '') {
    $query_R1 .= " (laderaumhoehe >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumhoehe']), 'double') . " OR laderaumhoehe IS NULL) AND ";
}
if (isset($_POST['laderaumbreite']) && $_POST['laderaumbreite'] != '') {
    $query_R1 .= " (laderaumbreite >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumbreite']), 'double') . " OR laderaumbreite IS NULL) AND ";
}
if (isset($_POST['laderaumlaenge']) && $_POST['laderaumlaenge'] != '') {
    $query_R1 .= " (laderaumlaenge >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumlaenge']), 'double') . " OR laderaumlaenge IS NULL) AND ";
}
if (isset($_POST['laderaumvolumen']) && $_POST['laderaumvolumen'] != '') {
    $query_R1 .= " (laderaumvolumen >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumvolumen']), 'double') . " OR laderaumvolumen IS NULL) AND ";
}
if (isset($_POST['treibstoff']) && $_POST['treibstoff'] != '-') {
    $query_R1 .= " (treibstoff = " . GetSQLValueString($_POST['treibstoff'], 'text') . " OR treibstoff IS NULL) AND ";
}
if (isset($_POST['getriebe']) && $_POST['getriebe'] != '-') {
    $query_R1 .= " (getriebe = " . GetSQLValueString($_POST['getriebe'], 'text') . " OR getriebe IS NULL) AND ";
}
$query_R1 .= "1 ORDER BY Eingabe.datum, bar, Eingabe.zeit, Eingabe.laderaumlaenge DESC, Eingabe.laderaumbreite DESC, Eingabe.laderaumhoehe DESC, Eingabe.laderaumvolumen DESC, Eingabe.treibstoff DESC, Eingabe.getriebe DESC";
$query_limit_R1 = sprintf("%s LIMIT %d, %d", $query_R1, $startRow_R1, $maxRows_R1);

$resultGesamt = @mysql_query_R1("SELECT COUNT(*) AS menge FROM Eingabe"); 
$Eintraege = @mysql_result($resultGesamt,0,"menge");

while($row = @mysql_fetch_row($result)){
	$contentWeb .= $row[0] . ' -- ' . $row[1] . '<br>';
}

$contentWeb .= '<div align="center">'; 
$SitesComplete = ceil($Eintraege / $maxRows_R1);
$contentWeb .= 'Ergebnisseite ' . $$pageNum_R1 . ' von ' . $SitesComplete . '<br>';
$extVariables = '&var1=wert1&var2=wert2';
$contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables); 
$contentWeb .= '</div>';

echo $contentWeb;

?>

12.11.2010 20:39

24 Jörg Kruse

Warte - ich schreib gleich mal 'ne Schritt- für Schritt-Anleitung, wie du das umbaust (dauert etwas)

12.11.2010 21:03

25 Jörg Kruse

Du nimmst DEIN bestehendes Script - dort wird die Navigation eingearbeitet (nicht umgekehrt)

Folgende Änderungen nimmst du an deinem Script vor:

1. Die Funktionsdefinition von navigationsLeiste() packst du unterhalb der Funktionsdefinition von GetSQLValueString() (geht auch woanders, aber so ist es übersichtlicher)

2. Definition von Konstanten und Variablen:

define("NAV_LEISTE",11);
$maxRows_R1 = 10;
$pageNum_R1 = 0;
if (isset($_GET['site'])) {
  $pageNum_R1 = $_GET['site'];
}
$startRow_R1 = $pageNum_R1 * $maxRows_R1;

3. Deine Query $query_R1

Die kannst du im Prinzip so lassen. Ich würde allerdings nach dem SELECT ein SQL_CALC_FOUND_ROWS einfügen

$query_R1 = "SELECT SQL_CALC_FOUND_ROWS Eingabe.id, /* und so weiter */ ";

Das sorgt dafür, dass MySQL sich die Gesamtanzahl aller Datensätze merkt (und nicht nur die durch LIMIT begrenzte Anzahl) Diese kann man dann später mithilfe von SELECT FOUND_ROWS() abfragen (s.u. 4.). Siehe hierzu auch Manual von MySQL zu FOUND_ROWS():

http://dev.mysql.com/doc/refman/5.1/de/information-functions.html

Das LIMIT Statement kannst du so belassen:

$query_limit_R1 = sprintf("%s LIMIT %d, %d", $query_R1, $startRow_R1, $maxRows_R1);

4. die Navigation

Die Gesamtanzahl kann jetzt mit SELECT FOUND_ROWS() abgefragt werden. Das ist einfacher als die Abfrage mit dem COUNT() und den ganzen WHERE Statements nochmal zu wiederholen, wie es das Navigationsscript macht

$resultGesamt = mysql_query("SELECT FOUND_ROWS()"); 
$Eintraege = mysql_result($resultGesamt,0);

$contentWeb = '<div align="center">'; 
$SitesComplete = ceil($Eintraege / MAX_EINTRAEGE);
$contentWeb .= 'Ergebnisseite ' . $seiteAktuell . ' von ' . $SitesComplete . '<br>';
$extVariables = '&var1=wert1&var2=wert2';
$contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables); 

$contentWeb .= '</div>';

echo $contentWeb;

anstelle von "&var1=wert1&var2=wert2" musst du - falls vorhanden - noch die URL-Parameter deines Scriptes eintragen; ansonsten einfach leer lassen

12.11.2010 21:35 | geändert: 12.11.2010 21:37

26 andehrl

ich habe die Funktionsdefinition von navigationsLeiste() unterhalb der Funktionsdefinition von GetSQLValueString() eingefügt anschließend kommen dann gleich die konstanten und variablen. danach habe ich SELECT mit SQL_CALC_FOUND_ROWS erweitert (fett):

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case 'text':
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){
		
	$NavCeil = floor(NAV_LEISTE / 2);
	
	if($seiteAktuell > 1){
		$string .= '<a href="?site=1'.$extVariables.'"><<</a>&nbsp;&nbsp;';
		$string .= '<a href="?site='.($seiteAktuell-1).$extVariables.'"><</a>&nbsp;&nbsp;';
	}
	
	for($x=$seiteAktuell-$NavCeil;$x<=$seiteAktuell+$NavCeil;$x++){
		if(($x>0 && $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete))
			$string .= '<a href="?site='.$x.$extVariables.'">'.$x.'</a>&nbsp;&nbsp;';
		
		if($x==$seiteAktuell)
			$string .= $x . '&nbsp;&nbsp;';
	}
	
	
	if($seiteAktuell < $SitesComplete){
		$string .= '<a href="?site='.($seiteAktuell+1).$extVariables.'">></a>&nbsp;&nbsp;';
		$string .= '<a href="?site='.$SitesComplete.$extVariables.'">>></a>&nbsp;&nbsp;';
	}
	
	return $string;
	
}

define("NAV_LEISTE",11);
$maxRows_R1 = 10;
$pageNum_R1 = 0;
if (isset($_GET['site'])) {
  $pageNum_R1 = $_GET['site'];
}
$startRow_R1 = $pageNum_R1 * $maxRows_R1;
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = "SELECT SQL_CALC_FOUND_ROWS Eingabe.id, ...

das limit habe ich gelassen wie es war und die navigation habe ich an der stelle an der sie angezeigt werden soll so eingefügt:

<?php

$resultGesamt = mysql_query("SELECT FOUND_ROWS()"); 
$Eintraege = mysql_result($resultGesamt,0);

$contentWeb = '<div align="center">'; 
$SitesComplete = ceil($Eintraege / $maxRows_R1);
$contentWeb .= 'Ergebnisseite ' . $seiteAktuell . ' von ' . $SitesComplete . '<br>';
$extVariables = '';
$contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables); 

$contentWeb .= '</div>';

echo $contentWeb;
?>

wenn ich eine suche starte bekomme ich auf der ersten seite richtige ergebnisse angezeigt. die navigationsleiste sieht allerdings so aus:

Ergebnisseite von 2
-5 -4 -3 -2 -1 0 1 2 > >>

seite 1 ist ausgewählt. blättere ich eine seite weiter weden mir auch ungewünschte datensätze angezeigt. gehe ich auf eine minus seite bekomme ich diese fehlermeldung:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-30, 10' at line 2

12.11.2010 22:52

27 Jörg Kruse

Ja, $seiteAktuell muss auch noch angepasst werden - da entpricht ja unserem $pageNum_R1

<?php

$resultGesamt = mysql_query("SELECT FOUND_ROWS()"); 
$Eintraege = mysql_result($resultGesamt,0);

$contentWeb = '<div align="center">'; 
$SitesComplete = ceil($Eintraege / $maxRows_R1);
$contentWeb .= 'Ergebnisseite ' . $pageNum_R1 . ' von ' . $SitesComplete . '<br>';
$extVariables = '';
$contentWeb .= navigationsLeiste($SitesComplete,$pageNum_R1,$extVariables); 

$contentWeb .= '</div>';

echo $contentWeb;
?>

12.11.2010 23:09

28 andehrl

habs geändert. jetzt bekomme auf der ersten ergebnisseite diese navigation angezeigt:

Ergebnisseite 0 von 2
0 1 2 > >>

und wenn ich vorblättere bekomme ich wieder ungewünschte datensätze angezeigt.

12.11.2010 23:15

29 Jörg Kruse

Es ist wohl sinnvoller mit Seite 1 zu beginnen

define("NAV_LEISTE",11);
$maxRows_R1 = 10;
$pageNum_R1 = 1;
if (isset($_GET['site'])) {
  $pageNum_R1 = $_GET['site'];
}
$startRow_R1 = ($pageNum_R1 - 1) * $maxRows_R1;

und wenn ich vorblättere bekomme ich wieder ungewünschte datensätze angezeigt.

Was heißt "ungewünscht"?

Achja, da fehlen ja noch 'ne ganze Menge Parameter - und dummerweise wurden die alle mit $_POST übergeben :(

Ja, dann muss man noch einiges umändern.

Zuerst mal beim Aufbau der Query $_REQUEST statt $_POST verwenden - das beinhaltet dann auch $_GET

if (isset($_REQUEST['abfahrtsort']) && $_REQUEST['abfahrtsort'] != 'Abfahrtsort') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($_REQUEST['abfahrtsort'], 'text') . " AND ";
}
/* und so weiter */

Dann muss $extVariables definiert werden, so dass die Parameter an den Query String drangehängt werden

$extVariables = '&abfahrtsort=' . $_REQUEST['abfahrtsort'] . '&zielort=' .  $_REQUEST['zielort'] /* und so weiter */;

12.11.2010 23:35

30 andehrl

jetzt schein es zu funktionieren. vielen vielen dank für deine mühe und deine geduld :-) :-) :-)

13.11.2010 01:34

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]