Hilfe bei Gästebuch-Tutorial

Jacky222

Grünschnabel
Hallo

Ich versuche grad ein Gästebuch zu erstellen und hab mir dazu ein Tutorial angeschaut (http://www.youtube.com/watch?v=mTdY4HGd6Bs).
Ich habs nachgemacht, adaptiert auf meine Daten, aber ich hab tdm 2 Problemeauf:
1. Es zeigt mir von Anfang an keine Daten an. wenn ich gucke was in der Variable $pos steht (echo $pos halt) kommt nichts und weil ich ja unten angegeben habe

PHP:
$query = mysql_query("SELECT * FROM tblgaestebuch WHERE GID <= '$pos' ORDER BY GID DESC LIMIT 5", $link);

... kanns wsl nichts ausgeben, weils die Variable pos nicht findet. Ok, aber wie änder ich das?

2. der Weiter-Button funktioniert. Aber beim Draufklicken steht in der URL nicht ...php?page=2, sondern irgendein komplizierter Kram, der ganz sicher nicht richtig ist. (Ich hab das bei ihm mit der Navigation auch nicht ganz kapiert, vielleicht kann mir ja wer nochmal erklären warum ich bei $anzahlseiten "$zahl-1 / 5)" eingeben muss.. ) und wenn ich dann auf "Weiter" klick hab ich beiden Buttons da, also "Zurück" und "Weiter", was eig nicht sein darf, weil ich genau 6 Einträge in der DB hab und das nur 2 Seiten sein sollten. Also gibts keine Seite 3 und logischerweise kein Weiter auf Seite 2... theoretisch. Tja, und ich komm mit dem "Zurück" auch nicht auf die 1. Seite, hängt wahrscheinlich alles ein bisschen zusammen, warum die Navigations nicht funktioniert..

Hier einmal das Skript, damit ihr euch auskennt (ich hoffe zumindest, dass sich jemand auskennt :D) :

PHP:
    <fieldset>
    	<legend>Gästebuch</legend>
        <?php
		
		$pagesuche = 0;
		$url = $_SERVER['REQUEST_URI'];
		$pagesuche = strpos($url, "?page=");
		
		if($pagesuche == "") {
			$page = 1; }
		else {
			$page = $_GET['page']; }
		
		$wo = ($page * 5) - 5;
		$wo++;
		
		$zahl = 1;
		$pos = 1;
		
					
			$query = mysql_query("SELECT GID FROM tblgaestebuch ORDER BY GID DESC", $link);
			while($row = mysql_fetch_object($query)); {
					if($zahl == $wo) {
					$pos = $row['GID'];	}
				$zahl++;
		}


			$query = mysql_query("SELECT * FROM tblgaestebuch WHERE GID <= '$pos' ORDER BY GID DESC LIMIT 5", $link);
			while($row = mysql_fetch_object($query)); {
				echo ("<p>".$row['name']."&nbsp;<small style='color:grey;'>schrieb:</small></p>");
				echo ("<p>".$row['nachricht']."</p>");
				echo ("<p style='color:grey;'>".$row['datum']."</p>");
				echo ("<hr />");
			}
		
		?>
    </fieldset>
    
    <fieldset>
    	<legend>Navigation</legend>
		<?php
			if($page < 1) {
		echo ("<a href='gaestebuch.php?page=<?php echo ($page - 1); ?>'><p>Zurück</p></a>");
         }
		 
		 $anzahlseiten = ceil($zahl-1 / 5);
		 $weiterfrage = $anzahlseiten - $page;
		 
		 if($weiterfrage > 0) {
		 			echo ("<a href='gaestebuch.php?page=<?php echo ($page + 1); ?>'><p>Weiter</p></a>"); }
		 
		?>
    </fieldset>
 

sheel

I love Asm
Hi

Zuerst mal was Allgemeines:

PHP:
        $pagesuche = 0;
        $url = $_SERVER['REQUEST_URI'];
        $pagesuche = strpos($url, "?page=");
        
        if($pagesuche == "") {
            $page = 1; }
        else {
            $page = $_GET['page']; }
Hat einige Probleme.
zB. was ist, wenn die Url sowas ist:
http://meineseite.com/seite.php?irgendwas=123&page=2
Wenn also page nicht der erste Parameter ist?
Diese ganze umständliche Überprüfung kann man sich mit isset sparen.
Überprüft, ob eine Variable vorhanden ist.
PHP:
        if(!isset($_GET['page'])) {
            $page = 1;
        }
        else {
            $page = $_GET['page'];
        }
oder noch einfacher
PHP:
        $page = 1;
        if(isset($_GET['page']))
                $page = $_GET['page'];


PHP:
        $wo = ($page * 5) - 5;
        $wo++;
hmm...
PHP:
        $wo = ($page - 1) * 5 + 1;


Die zwei SQLs danach...
Eines deiner Hauptprobleme: Was soll $zahl sein?
Sonst...
Zuerst fragst du alles einer Tabelle ab, um dann manuell nach $wo zu durchsuchen.
Warum kein "where" verwenden?
Den Fund verwendest du dann als Variable bei der zweiten Abfrage.
Warum nicht alles in ein SQL-Kommando zusammenfassen?

Und du solltest am Anfang irgendwo prüfen, ob $page überhaupt eine Zahl ist
(übergeben kann man was Anderes auch...).


Zum Problem 2: Was steht denn Komisches in der Url?
 

Jacky222

Grünschnabel
Hey Danke Leute, für die Tipps. Ich werd ds heute mal ausprobieren und meld mich dann, wenns geklappt hab (oder ich weitere Hilfe brauche *yesss).

btw, es steht drinnen: gaestebuch.php?page=%3C?php%20echo%20(1%20+%201);%20?%3E ... wie gesagt, ds kann sicher ned stimmen.

Also bis bald und Thank you!
Lg Jacky
 
Zuletzt bearbeitet:

sheel

I love Asm
Naja, wenn im echon ein <?php echo ?> steht...
Einfach nur $page-1 reicht auch.
Und ein p in a...hmm...
Statt
PHP:
echo ("<a href='gaestebuch.php?page=<?php echo ($page - 1); ?>'><p>Zurück</p></a>");
das:
PHP:
echo ('<p><a href="gaestebuch.php?page=' . ($page - 1) . '">Zurück</a></p>');

Stimme alxy da vollkommen zu und würde sogar raten,
von Programmier-Videotutorials komplett Abstand zu nehmen.
 

Jacky222

Grünschnabel
Okay, Leute. Ich hab endlich ne Lösung für die Probleme gefunden.. ich hab quasi ganz neu angefangen xD jeden fall funktioniert jetzt alles *yess
sry, dass es so lange gedauert hat, für die die interessiert sind, wies funktioniert :)

der ganze Code, mit der Seitennavigation sieht so aus:
PHP:
$query = mysql_query("SELECT * FROM tabelle ORDER BY ID DESC", $link);
$num = mysql_numrows($query);

$rowsperpage = 5; 
$totalpages = ceil($num / $rowsperpage);

	if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {   // cast var as int  
		$currentpage = (int) $_GET['currentpage'];} else {   // default page num  
		$currentpage = 1; }

	if ($currentpage > $totalpages) {   // set current page to last page  
		$currentpage = $totalpages; } // end if// if current page is less than first page...
	
	if ($currentpage < 1) {   // set current page to first page 
		$currentpage = 1; }

$offset = ($currentpage - 1) * $rowsperpage;

$query = mysql_query("SELECT * FROM tabelle ORDER BY ID DESC LIMIT $offset, $rowsperpage");

     for ($i = 0; $i < $rowsperpage; $i++) {
              $row = mysql_fetch_array($query);
         echo("<p style='font-style: bold;'>".$row['name']." schrieb:</p>");
		 echo("<p>".$row['nachricht']."</p>"); 
		 echo("<p style='font-size: 0.8em; padding-bottom: 10px;'>".$row['datum']."</p>"); }

	//if ($currentpage > 1) {    
		//echo " <a href='gaestebuch.php?currentpage=1'></a> ";  
		$prevpage = $currentpage - 1;     // get previous page num
		echo " <a href='gaestebuch.php?currentpage=1'><<</a>"; // show << link to go back to page 1
		echo " <a href='gaestebuch.php?currentpage=$prevpage'><</a> "; //}  // show < link to go back to 1 page

$range = 5;// loop to show links to range of pages around current page

	//for ($i = ($currentpage - $range);$i < (($currentpage + $range)  + 1);$i++) {   
		for ($i = ($currentpage - $range); $i <= $totalpages; $i++) {
		if (($i > 0) && ($i <= $totalpages)) {      // if it's a valid page number... 
		if ($i == $currentpage) {         // if we're on current page...
			echo " [<b>$i</b>] ";  }      // 'highlight' it but don't make a link   
		else {                 // if not current page...
			echo "<a href='gaestebuch.php?currentpage=$i'>$i </a>";      } } }  // make it a link 

	//if ($currentpage != $totalpages) {   
		$nextpage = $currentpage + 1;     // get next page 
		echo " <a href='gaestebuch.php?currentpage=$nextpage'>></a>";  // echo forward link for next page  
		echo " <a href='gaestebuch.php?currentpage=$totalpages'>>></a>"; //}  // echo forward link for lastpage

Ich hab nur noch ein kleines Problem und zwar wird mir wenn ich zB 12 Beiträge hab, auf der letzten Seite 5x "schrieb:" angezeigt, obwohls gar keinen Beitrag mehr von nem 13. 14. oder 15. user gibt... joaaa, ds sieht ein bissl blöd aus xD
ich habs schon mit if-anweisungen probiert, aber iwas mach ich immer falsch :(

Aber ich freu mich richtig, dass das Hautpgerüst jetzt funktioniert****** das Design lässt noch zu Wünschen übrig, aber ds krieg ich schon alleine hin *haha

Wenn wer nen Vorschlag hat, bin natürlich offen dafür :D

LG Jacky
 

timestamp

Mitglied Käsekuchen
Solche Datenbankausgaben regelt man in der Regel durch while Schleife, nicht durch for-Schleifen:
PHP:
while( $row = mysql_fetch_array($query) ){ 
         echo("<p style='font-style: bold;'>".$row['name']." schrieb:</p>"); 
         echo("<p>".$row['nachricht']."</p>");  
         echo("<p style='font-size: 0.8em; padding-bottom: 10px;'>".$row['datum']."</p>"); 
}