Zur Navigation

Seitennavigation erstellen [2]

11 andehrl

Du kannst dir jetzt aussuchen, ob du die Parameter von deinem Script durch die des anderen Scriptes ersetzt und dessen LIMIT Statement verwendest, oder andersrum die Variablennamen im Navigationsscript anpasst. Das erste ist für dich vielleicht einfacher (weil an dem Punkt warst du ja schon)

ich habe insgesamt 6 ergebnisseiten, die noch eine blätterfunktion benötigen.
ich würde daher eigentlich lieber das navigationsscript modifizieren. dann kann ich das veränderte script einfach in die entsprechenden seiten einfügen. ich bin allerdings von anfang an gleich überfortert mit der aus führung:

ich habe am begin des navigationsscriptes diese definitionen:

define("MAX_EINTRAEGE",10);
define("NAV_LEISTE",11);

das pendent dazu wäre doch

$maxRows_R1 = 10;
$pageNum_R1 = 0;

die menge der angezeigten datensätze ist also schon festgelegt. wenn ich pagenr noch von 0 auf 11 setzte

$pageNum_R1 = 11;

und die nachfolgenden codes wie zb

$NavCeil = floor(NAV_LEISTE / 2);

in

$NavCeil = floor(pageNum_R1 / 2);

umschreibe, muss ich das dann überhaupt nochmal neu definierten oder falls ja kann ich dann sagen


define("maxRows_R1",10);
define("pageNum_R1",11);

oder ist das alles vollkommen verquer??



11.11.2010 17:56

12 Jörg

Zitat von andehrl
ich habe am begin des navigationsscriptes diese definitionen:

define("MAX_EINTRAEGE",10);
define("NAV_LEISTE",11);

das pendent dazu wäre doch

$maxRows_R1 = 10;
$pageNum_R1 = 0;

Zu $pageNum_R1: nein. Lies mal auf der verlinkten Seite von selfphp.info, welche Funktion die Konstante NAV_LEISTE hat. Ein Pendant gibt es in deinem Script anscheinend nicht, du musst also eine entsprechende Variable hinzufügen.

$pageNum_R1 entspricht eher $seiteAktuell. Die Zuweisung von 0 ist hier nur die Initialisierung - in den Zeilen danach wird der Variable dann ein GET Parameter zugewiesen (siehe auch meinen letzten Beitrag).

die menge der angezeigten datensätze ist also schon festgelegt.

Ja

wenn ich pagenr noch von 0 auf 11 setzte

$pageNum_R1 = 11;

$pageNum_R1 definierst du gar nicht, sonst wird hier überall nur der Inhalt von Seite 11 angezeigt :)

11.11.2010 18:47 | geändert: 11.11.2010 18:49

13 andehrl

Zitat von Jörg
Zitat von andehrl
ich habe am begin des navigationsscriptes diese definitionen:

define("MAX_EINTRAEGE",10);
define("NAV_LEISTE",11);

das pendent dazu wäre doch

$maxRows_R1 = 10;
$pageNum_R1 = 0;

Zu $pageNum_R1: nein. Lies mal auf der verlinkten Seite von selfphp.info, welche Funktion die Konstante NAV_LEISTE hat. Ein Pendant gibt es in deinem Script anscheinend nicht, du musst also eine entsprechende Variable hinzufügen.

$pageNum_R1 entspricht eher $seiteAktuell. Die Zuweisung von 0 ist hier nur die Initialisierung - in den Zeilen danach wird der Variable dann ein GET Parameter zugewiesen (siehe auch meinen letzten Beitrag).

die menge der angezeigten datensätze ist also schon festgelegt.

Ja

wenn ich pagenr noch von 0 auf 11 setzte

$pageNum_R1 = 11;

$pageNum_R1 definierst du gar nicht, sonst wird hier überall nur der Inhalt von Seite 11 angezeigt :)




NAV_LEISTE legt die anzahl der angezeigten seitenzahlen fest. ich lasse es also so wie es ist. was für eine variable müsste ich dann noch anfügen?



kann ich aber

define("MAX_EINTRAEGE",10);

einfach entfernen und MAX_EINTRAEGE jeweils mit maxRows_R1 ersetzen?





du sagst $pageNum_R1 entspricht $seiteAktuell. kann ich dann nicht in diesem codeabschnitt

function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){

$seiteAktuell durch $pageNum_R1 ersetzen? und was würde dann $SitesComplete entsprechen?


11.11.2010 19:22

14 Jörg

was für eine variable müsste ich dann noch anfügen?

Mehr scheint das nicht zu sein - aber das merkst du dann schon, wenn irgendeine Variable noch definiert werden muss.

kann ich aber

define("MAX_EINTRAEGE",10);

einfach entfernen und MAX_EINTRAEGE jeweils mit maxRows_R1 ersetzen?

Jain - du musst die Variable natürlich einheitlich benennen, aber hierbei aufpassen, dass MAX_EINTRAEGE eine Konstante ist, die mit define() definiert wird und $maxRows_R1 eine Variable, der mit "=" ein Wert zugewiesen wird.

du sagst $pageNum_R1 entspricht $seiteAktuell. kann ich dann nicht in diesem codeabschnitt

function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){

$seiteAktuell durch $pageNum_R1 ersetzen? und was würde dann $SitesComplete entsprechen?

Die Funktionsdefinition würde ich so belassen, da die Variablennamen dort nur innerhalb der Funktion Gültigkeit haben. Anpassen musst du die Namen außerhalb von Funktionen.

11.11.2010 19:53

15 andehrl

Jain - du musst die Variable natürlich einheitlich benennen, aber hierbei aufpassen, dass MAX_EINTRAEGE eine Konstante ist, die mit define() definiert wird und $maxRows_R1 eine Variable, der mit "=" ein Wert zugewiesen wird.

wenn der wert der konstanten und der variablen übereinstimmen, kann ich es dann nicht auch so lassen? ansonsten ist mir gerade sehr unklar wie ich beide einheitlich benennen kann?



Die Funktionsdefinition würde ich so belassen, da die Variablennamen dort nur innerhalb der Funktion Gültigkeit haben. Anpassen musst du die Namen außerhalb von Funktionen.

das bedeutet ich lasse diesen abschnitt so wie er ist?

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;
	
}

und gleich im anschluss wird dann seiteAktuell wieder aufgenommen
$seiteAktuell = $_GET['site'] + 0;
das muss ich dann verändern.

du meintest das
$seiteAktuell = $_GET['site'] + 0;
diesem code meiner seite entsprechen würde

if (isset($_GET['pageNum_R1'])) {
  $pageNum_R1 = $_GET['pageNum_R1'];
}

das kann ich aber doch nicht einfach austauschen oder? dann geht mir doch die zuordnung zu seiteAktuell verlohren, oder mache ich einen denkfehler?

für mich würde eher so etwas wie
$seiteAktuell = $_GET['pageNum_R1'] + 0;
sinn machen???

11.11.2010 20:36

16 Jörg

Zitat von andehrl
Jain - du musst die Variable natürlich einheitlich benennen, aber hierbei aufpassen, dass MAX_EINTRAEGE eine Konstante ist, die mit define() definiert wird und $maxRows_R1 eine Variable, der mit "=" ein Wert zugewiesen wird.

wenn der wert der konstanten und der variablen übereinstimmen, kann ich es dann nicht auch so lassen? ansonsten ist mir gerade sehr unklar wie ich beide einheitlich benennen kann?

Du musst dich für eine von beiden entscheiden. Du hast in deinem Script eine Seitenauswahl ohne Navigation und ein Navigationsscript, was aber noch nicht an dein Script angepasst ist. Beides funktioniert für sich genommen derzeit nicht. Entweder passt du dein Script an das Navigationsscript an oder umgekehrt.

Die Funktionsdefinition würde ich so belassen, da die Variablennamen dort nur innerhalb der Funktion Gültigkeit haben. Anpassen musst du die Namen außerhalb von Funktionen.

das bedeutet ich lasse diesen abschnitt so wie er ist?

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;
	
}

Ja

und gleich im anschluss wird dann seiteAktuell wieder aufgenommen
$seiteAktuell = $_GET['site'] + 0;
das muss ich dann verändern.

du meintest das
$seiteAktuell = $_GET['site'] + 0;
diesem code meiner seite entsprechen würde

if (isset($_GET['pageNum_R1'])) {
  $pageNum_R1 = $_GET['pageNum_R1'];
}

das kann ich aber doch nicht einfach austauschen oder? dann geht mir doch die zuordnung zu seiteAktuell verlohren, oder mache ich einen denkfehler?

für mich würde eher so etwas wie
$seiteAktuell = $_GET['pageNum_R1'] + 0;
sinn machen???

Das Navigationsscript erzeugt aber Links mit dem Parameter site=n. Andersrum würde es schon eher Sinn machen.

$pageNum_R1 = $_GET['site'];

Dann solltest du $pageNum_R1 weiter in dem LIMIT Statement verwenden können

11.11.2010 23:34

17 andehrl

ich habe den code der navigation jetzt so verändert (fett):

<?PHP


define("maxRows_R1",10);
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;

$start = $pageNum_R1 * maxRows_R1 - maxRows_R1; 

$result = @mysql_query_R1("SELECT * FROM Eingabe LIMIT $start, ".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;

?>



macht das so in zusammenhang mit meinem seitencode sinn für dich? hier nochmal der seitencode:

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

...
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);

$R1 = mysql_query($query_limit_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);

if (isset($_GET['totalRows_R1'])) {
  $totalRows_R1 = $_GET['totalRows_R1'];
} else {
  $all_R1 = mysql_query($query_R1);
  $totalRows_R1 = mysql_num_rows($all_R1);
}
$totalPages_R1 = ceil($totalRows_R1/$maxRows_R1)-1;

$currentPage = $_SERVER["PHP_SELF"];
...

...
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);

$R1 = mysql_query($query_limit_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);

if (isset($_GET['totalRows_R1'])) {
  $totalRows_R1 = $_GET['totalRows_R1'];
} else {
  $all_R1 = mysql_query($query_R1);
  $totalRows_R1 = mysql_num_rows($all_R1);
}
$totalPages_R1 = ceil($totalRows_R1/$maxRows_R1)-1;

$currentPage = $_SERVER["PHP_SELF"];
...

...
$queryString_R1 = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_R1") == false && 
        stristr($param, "totalRows_R1") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_R1 = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_R1 = sprintf("&totalRows_R1=%d%s", $totalRows_R1, $queryString_R1);
?>

12.11.2010 00:19

18 Jörg

Hier verwendest du eine Variable $maxRows_R1:

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

Hier definierst du eine Konstante maxRows_R1:

define("maxRows_R1",10);

Das musst du noch in Einklang bringen. Konstanten sollten übrigens zur leichteren Unterscheidung in Großbuchstaben geschrieben werden.

12.11.2010 10:12

19 andehrl

die varible $maxRows_R1 bekommt in meinem sscript einen wert zugewiesen: $maxRows_R1 = 10; mathemathisch ausgedrückt habe ich das so verstanden: $maxRows_R1 = x und x=<10. genauso habe ich auch die konstante begriffen: define("MAX_EINTRAEGE",10); MAX_EINTRAEGE = x und x =< 10; ich dachte also das der wert sich "konstant" zwischen 0 und 10 bewegen kann.



aus diesem gedanken heraus und weil du sagst:

Zitat von Jörg
Hier verwendest du eine Variable $maxRows_R1:

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

Hier definierst du eine Konstante maxRows_R1:

define("maxRows_R1",10);

Das musst du noch in Einklang bringen. Konstanten sollten übrigens zur leichteren Unterscheidung in Großbuchstaben geschrieben werden.





habe ich das navigationsscript jetzt so verändert:

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

$start = $pageNum_R1 * $maxRows_R1 - $maxRows_R1; 

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

$resultGesamt = @mysql_query_R!("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 13:44

20 Jörg

die varible $maxRows_R1 bekommt in meinem sscript einen wert zugewiesen: $maxRows_R1 = 10; mathemathisch ausgedrückt habe ich das so verstanden: $maxRows_R1 = x und x=<10. genauso habe ich auch die konstante begriffen: define("MAX_EINTRAEGE",10); MAX_EINTRAEGE = x und x =< 10; ich dachte also das der wert sich "konstant" zwischen 0 und 10 bewegen kann.

Sorry, das ist Unsinn - lies dich mal in die Grundlagen von Variablen und Konstanten ein:

http://www.php.net/manual/de/language.variables.php

http://www.php.net/manual/de/language.constants.php

Du weist hier beiden nur einen Wert zu, nämlich die 10. Die Variable oder Konstante verwendest du dann im LIMIT Statement deiner SQL-Abfrage, um die Anzahl der Ergebnise zu begrenzen.

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.

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

12.11.2010 17:34 | geändert: 12.11.2010 17:36