Blättern klappt nur auf erster Seite ...

Termos

Mitglied
Blättern mit mehreren Tabellen (2 Select Anweisungen)

Ich kann in meinem Skript ... nur auf der ersten Seite Daten ausgeben ...

in der Zweiten Seite bekomme ich zwar meine Tabelle aber keine Werte und keine Seitenzahlen mehr, sieht wer den Fehler?

ich möchte bei Eingabe eines Buchtitels nur die Bücher Datenbank durchsuchen.
Bei Eingabe eines Autors durchsuche ich die Autoren und Joine mit einem Schlüssel (ISBN) Buch und Autor zusammen.

Sobald ich aber mit IF(){}Else{} die 2 Select Anweisungen trenne kommen keine Daten mehr bzw nur noch 1 Seite mit Daten ...

PHP:
<?php 

// Datenbankverbindung 
//--------------------------------------------------- 
$host = "###";     // Adresse des Datenbankservers, meist localhost 
$user = "###";             // Ihr MySQL Benutzername 
$pass = "###";             // Ihr MySQL Passwort 
$dbase = "###";             // Name der Datenbank 

$connection = mysql_connect("$host" , "$user" , "$pass")  
              OR die ("Keine Verbindung zu der Datenbank moeglich."); 
$db = mysql_select_db($dbase , $connection)  
              OR die ("Auswahl der Datenbank nicht moeglich.");  
//---------------------------------------------------  
//Variablen für unterschiedliche Kriterien
//---------------------------------------------------
$suche=$_POST["suche"];
$kriterium=$_POST["kriterium"];
$suche .="%";
//---------------------------------------------------

$pfad = $_SERVER['PHP_SELF'];    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation

  $query = mysql_query("SELECT * FROM Buch WHERE $kriterium LIKE '$suche'"); // DB Abfragee

// ------------------------------------------------------------------------

$datensaetze_pro_seite = "10";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen
$p = "1";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden

$total = mysql_num_rows($query);                      // liefert die Anzahl der Datensaetze der Abfrage
$seiten = ceil($total / $datensaetze_pro_seite);     // Berechnet die Seitenanzahl insgesamt

// ------------------------------------------------------------------------

if(empty($_GET['go'])){ // korrigieren der aktuellen Seite

    $go = 1;             // Sofern $go nicht uebergeben wurde

}elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten){

    $go = 1;         // Variable definieren

}else{ // Wenn Obiges nicht zutraf

    $go = mysql_real_escape_string($_GET['go']);     // Variable definieren
}

$links = array(); // Linkkette bilden

// Seite die vor der aktuellen Seite kommt definieren
if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }            

// Seite die nach der aktuellen Seite kommt definieren
if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }   
       
$off = ($go - $davor); // Variable definieren   
                
if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen         
    $first = 1;
       $links[] = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";      
}      

if($go != 1){ // Link definieren => eine Seite zurueck blaettern          
    $prev = $go-1;
    $links[] = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";     
}   
       
       
for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen

  if ($i != $go){  // Link definieren            
  
        $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";
        
  }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich             
        
        $links[] = "<span class=\"current\">[ $i ]</span>\n";  
        
  }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich             
  
        $links[] = "<span class=\"current\">[ $i ]</span>\n";
        
  } // close if $i      
}                

if($go != $seiten){ // Link definieren => eine Seite weiter blaettern       
    $next = $go+1;
    $links[] = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n";
}      
    
if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen   
    $last = $seiten; 
    $links[] = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n";
}      

$start = ($go-1) * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB


$link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String

  $abfrage = mysql_query("SELECT * From Buch WHERE $kriterium LIKE '$suche' LIMIT $start,$datensaetze_pro_seite ");

// Daten ausgeben
while($row = mysql_fetch_object($abfrage)){
    
    echo "<p>Titel".$row->Titel."<br/>\n";
    echo "INFO: ".$row->Info."<br/> \n";
    echo "ISBN: ".$row->ISBN."\n </p>";

} // close while

// -------------------------------------- Seitennavigation ausgeben ----------------------------
 echo "<div id=\"navigation\">\n";

 echo "<span class=\"pages\">Seite ".$go." von ".$seiten."</span>\n";

 echo $link_string; // Ausgabe der Seitennavigation
    
 echo "</div> \n";
// -------------------------------------- Seitennavigation ende --------------------------------
?>


Bearbeitet: Code geändert - Ohne WHERE Bedingung und ohne IF klappt es ... aber dann bringt es mir nichts muss unterschiedliche Abfragen ausführen können ...
 
Zuletzt bearbeitet:
item: Du rechnest mit einer Variable die bereits für des SQL maskiert ist. Solltest du mWn nicht machen
PHP:
...
 $go = mysql_real_escape_string($_GET['go']);
...$go - $p...

item: Reduziere deine Abfragen auf eine Abfrage.

item: Ein Fehler auf anhieb habe ich grad nicht gefunden. Bin aber auch nicht alle if() durchgegangen.

item: Hier noch ein Link zu einem Beispiel für eine Seitennavigation
PHP Einfache Seitennavigation
und ein Beispiel wie du dein SQL flexibel anhand der übergebenen Paramters zusammenschustern kannst
PHP/MySQL einfache variable Where-Zusammenstellung
 
Vielen Dank nochmal

hier die Lösung für das Problem ... Es lag bei mir an den Abfragen diese wurden durch das Codebeispiel von Yaslaw (vielen dank) dynamisch erstellt.


Nicht ganz sauber - falls dazu wer Tipps hat nehme ich die gern entgegen.

PHP:
<?php 
// Datenbankverbindung 
//--------------------------------------------------- 
include 'connect.php';
//---------------------------------------------------  
//Variablen für Dynamische Abfrage
//---------------------------------------------------
$StringArg1=$_POST["suche"];
$StringArg2=$_POST["kriterium"];
$StringArg3=" Buch.ISBN = Autor.ISBN ";

$StringArg1 .="%";
$args = array();
$args2 = array();

if($StringArg2 == "Autor")
{

  if(isset($StringArg1)) $args[] = "Autor LIKE '".mysql_real_escape_string($StringArg1)."'";
  if(isset($StringArg3)) $args[] = mysql_real_escape_string($StringArg3);

    $where = implode(' AND ', $args);
    $sql1 = "SELECT * FROM Buch,Autor";
}
else{
  if(isset($StringArg1)) $args[] = "Titel LIKE '".mysql_real_escape_string($StringArg1)."'";
    $where = implode(' AND ', $args);
    $sql1 = "SELECT * FROM Buch";
}
    


    if(isset($where)) $sql1 = $sql1." WHERE ".$where;
   
//---------------------------------------------------

$pfad = $_SERVER['PHP_SELF'];    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation


  $query = mysql_query("$sql1"); // DB Abfragee

// ------------------------------------------------------------------------

$datensaetze_pro_seite = "10";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen
$p = "3";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden

$total = mysql_num_rows($query);                      // liefert die Anzahl der Datensaetze der Abfrage
$seiten = ceil($total / $datensaetze_pro_seite);     // Berechnet die Seitenanzahl insgesamt

// ------------------------------------------------------------------------

if(empty($_GET['go'])){ // korrigieren der aktuellen Seite

    $go = 1;             // Sofern $go nicht uebergeben wurde

}elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten){

    $go = 1;         // Variable definieren

}else{ // Wenn Obiges nicht zutraf

    $go = mysql_real_escape_string($_GET['go']);     // Variable definieren
}

$links = array(); // Linkkette bilden

// Seite die vor der aktuellen Seite kommt definieren
if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }            

// Seite die nach der aktuellen Seite kommt definieren
if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }   
       
$off = ($go - $davor); // Variable definieren   
                
if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen         
    $first = 1;
       $links[] = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";      
}      

if($go != 1){ // Link definieren => eine Seite zurueck blaettern          
    $prev = $go-1;
    $links[] = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";     
}   
       
       
for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen

  if ($i != $go){  // Link definieren            
  
        $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";
        
  }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich             
        
        $links[] = "<span class=\"current\">[ $i ]</span>\n";  
        
  }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich             
  
        $links[] = "<span class=\"current\">[ $i ]</span>\n";
        
  } // close if $i      
}                

if($go != $seiten){ // Link definieren => eine Seite weiter blaettern       
    $next = $go+1;
    $links[] = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n";
}      
    
if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen   
    $last = $seiten; 
    $links[] = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n";
}      

$start = ($go-1) * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB


$link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String



/*
if(isset($StringArg1)) $args2[] = "Titel LIKE '".mysql_real_escape_string($StringArg1)."'";

  $sql2 = "SELECT * FROM Buch,Autor";
  if(isset($where)) $sql2 = $sql2." WHERE ".$where ."LIMIT $start,$datensaetze_pro_seite";
  */

  $sql1 .= "LIMIT $start,$datensaetze_pro_seite";
  $abfrage = mysql_query("$sql1");


// Daten ausgeben
while($row = mysql_fetch_object($abfrage)){
    
    echo "<p>Titel: ".$row->Titel."<br/>\n";
    echo "INFO: ".$row->Info."<br/> \n";
    echo "ISBN: ".$row->ISBN."\n </p>";

} // close while

// -------------------------------------- Seitennavigation ausgeben ----------------------------
 echo "<div id=\"navigation\">\n";

 echo "<span class=\"pages\">Seite ".$go." von ".$seiten."</span>\n";

 echo $link_string; // Ausgabe der Seitennavigation
    
 echo "</div> \n";
// -------------------------------------- Seitennavigation ende --------------------------------
?>
 
Zuletzt bearbeitet:
Zurück