tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
371
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    rernanded rernanded ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    51
    Hi, ich muß in mein Blätterscript ein DESC LIMIT 301,1000 einbauen, ich weiß nur nicht wie und wo? Hab schon einiges probiert klappt aber nicht.

    Moni

    PHP-Code:
    <?php
         
        $host 
    "";
        
    $user "";
        
    $pass "";
        
    $dbase "";
     
        
    $connection mysql_connect("$host"$user"$pass"
                      OR die (
    "Keine Verbindung zur Datenbank möglich.");
        
    $db mysql_select_db($dbase $connection
                      OR die (
    "Auswahl der Datenbank nicht möglich."); 
             
        
    $pfad $_SERVER['PHP_SELF'];
         
        
    $query mysql_query("SELECT id FROM news");
                 
        
    $datensaetze_pro_seite "10";
        
    $p "5";                                // SEITENLINKS
         
        
    $total mysql_num_rows($query);
        
    $seiten ceil($total $datensaetze_pro_seite);
             
        if(empty(
    $_GET['go'])){
         
            
    $go 1;
         
        }elseif(
    $_GET['go'] <= || $_GET['go'] > $seiten){
         
            
    $go 1;
     
        }else{
         
            
    $go mysql_real_escape_string($_GET['go']);
        }
         
        
    $links = array();
         
        if((
    $go $p) < 1){ $davor $go 1;  }else { $davor $p; }           
         
        if((
    $go $p) > $seiten){ $danach $seiten $go; }else{ $danach $p; }  
                
        
    $off = ($go $davor);  
                         
        if (
    $go$davor 1){      
            
    $first 1;
            
    //$links[] = "<a href=\"$pfad?go=$first\" title=\"zur ersten Seite\"> || </a>\n";     
        
    }     
         
        if(
    $go != 1){         
            
    $prev $go-1;
            
    //$links[] = "<a href=\"$pfad?go=$prev\" title=\"eine Seite zurück\"> < </a>\n";    
        
    }  
                
                
        for(
    $i $off$i <= ($go $danach); $i++){
         
          if (
    $i != $go){          
           
                
    $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";
                 
          }elseif(
    $i == $seiten) {         
             
                
    $links[] = "<span class=\"current\">[ $i ]</span>\n"
                 
          }elseif(
    $i == $go){          
           
                
    $links[] = "<span class=\"current\">[ $i ]</span>\n";
                 
          } 
    // close if $i     
        
    }               
         
        if(
    $go != $seiten){      
            
    $next $go+1;
            
    //$links[] = "<a href=\"$pfad?go=$next\" title=\"eine Seite weiter\"> > </a>\n";
        
    }     
             
        if(
    $seiten $go $p ){  
            
    $last $seiten;
            
    //$links[] = "<a href=\"$pfad?go=$last\" title=\"zur letzten Seite\"> || </a>\n";
        
    }     
         
        
    $start = ($go-1) * $datensaetze_pro_seite
         
         
        
    $link_string implode(" "$links); 
         
        
    $abfrage mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite");

        while(
    $row mysql_fetch_object($abfrage)){
             
        echo 
    "<big>$row->headline</big><br>[$row->monat_jahr . $row->id]<br>";
        echo 
    nl2br(substr ($row->text,0,100)), " ...";
        echo 
    "<br>$row->link<br><br>";
         
        } 
         
        
    // Seitennavigation
              
         
    echo "Seite ".$go." von ".$seiten."<br>";
         
         echo 
    $link_string;
             
         
        
    ?>
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    ... DESC LIMIT 301,1000 ...
    Verstehe ich nicht.

    "DESC" gehört zu "ORDER BY" und würde die Datensätze absteigend sortieren.

    "LIMIT 301, 1000" würde die Anzeige auf die Datensätze 301 bis 1000 beschränken.

    Das würde theoretisch Sinn machen aber nur theoretisch da du mit fest vorgegebenen Werten arbeitest.

    Meinst du vielleicht das:

    PHP-Code:
    $abfrage mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start, ($start + $datensaetze_pro_seite)"); 
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    rernanded rernanded ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    51
    @tombe: Danke Dir. Die Blätterfunktion wie ich sie habe zeigt mir immer alle Datensätze an. Setze ich ORDER BY id ASC ein alle Datensätze aufsteigend von id=1 bis id=x, setze ich ORDER bY id DESC ein alle Datensätze absteigend von id=x bis id=1. Und das jeweils 10 pro Seite. Soweit alles korrekt. x ist der letzte Datensatz und variabel da die Zahl der Datensätze weiter steigt.

    Ich will das nur die aktuellsten Datensätze angezeigt werden (allerdings nicht die topaktuellsten 300 weil die mit einem anderen Script angezeigt werden) und ich will deshalb mit meinem hier benutzten Script das auf der ersten Seite oben der erste Datensatz id=x-301 steht. Der zweite id=x-302 folgt, dann id=x-303 usw.
    Und ich will das insgesamt nur 1000 Datensätze angezeigt werden. Bei 10 Einträgen pro Seite ergäbe das also 70 Seiten also alle Datensätze zwischen id=x-301 und id=x-1000.

    WIe und wo baue ich das ein.

    Moni
    Geändert von rernanded (07.12.11 um 16:25 Uhr)
     

  4. #4
    Avatar von Yugeen
    Yugeen Yugeen ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    69
    Zitat Zitat von rernanded Beitrag anzeigen
    Und ich will das insgesamt nur 1000 Datensätze angezeigt werden. Bei 10 Einträgen pro Seite ergäbe das also 70 Seiten also alle Datensätze zwischen id=x-301 und id=x-1000.

    WIe und wo baue ich das ein.

    Moni
    Ich glaub du hast es mit dem LIMIT falsch (oder ich täusche mich ) verstanden mit LIMIT legts du fest wie viele datensätze du angezeigt haben möchtest oder ab welchen er anfangen soll und wann er enden soll

    z.B. mit LIMIT 100,200 lässt du dir datensätze ab 100 bis 200 anzeigen und nicht die id 100 bis 200
     

  5. #5
    rernanded rernanded ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    51
    @yugeen
    Nein ich weiß schon um was es geht und was LIMIT x,y bedeutet.
    Ich denke nur das Problem ist wie von tombe angedeutet das feststehende LIMIT im Script:
    PHP-Code:
    ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite 
    wodurch die Blätterfunktion erst möglich wird. Und die ist darauf ausgelegt alle Datensätze ohne Einschränkung zu berücksichtigen.

    Wie und wo kann ich da meine 301,1000 unterbringen? Vllt muß eine ganz neue Blätterfunktion her, hab nur bisher noch nichts gefunden. Bin auch in php nicht so bewandert das ich das mal eben selbst machen kann.

    Moni
    Geändert von rernanded (07.12.11 um 17:03 Uhr)
     

  6. #6
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Hi,

    ich muss hier dringend Fehlinformationen berichtigen.

    Zitat Zitat von Yugeen Beitrag anzeigen
    z.B. mit LIMIT 100,200 lässt du dir datensätze ab 100 bis 200 anzeigen und nicht die id 100 bis 200
    Was?

    LIMIT legt nicht die Range der Datensätze fest, sondern die Anzahl der zu überspringenden Datensätze und die Anzahl der zurückzugebenen Datensätze.

    Syntax:
    Code mysql:
    1
    
    SELECT ... FROM ... [WHERE ...] [GROUP BY ...] [ORDER BY ...] LIMIT [offset,] row_count

    LIMIT 100, 200 übersrpingt 100 Datensätze und gibt 200 Datensätze zurück! Es werden also die Datensätze 101 bis 300 zurückgegeben.

    Mehr Informationen zum SELECT STATEMENT findest du im MySQL Handbuch.

    Gruß Kyoya Stefan
    Geändert von Kyôya (07.12.11 um 19:18 Uhr) Grund: Added Link to MySQL Manual
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  7. #7
    rernanded rernanded ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    51
    @kyoya
    Stimmt genau deshalb habe ich ja Yugeen auch geantwortet. ZITAT: Nein, ich weiß schon um was es geht und was LIMIT x,y bedeutet. Siehe auch meinen Thread von 16.21h(geändert 16.25h).
    Doch was hilft mir das für mein eigentliches Problem?
    Moni
    Geändert von rernanded (07.12.11 um 19:03 Uhr)
     

  8. #8
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Um noch was zum Thema an sich beizutragen:

    Der Query
    Code mysql:
    1
    
    SELECT * FROM `news` ORDER BY `id` DESC LIMIT 300, 1000
    sollte das Problem lösen.
    Andernfalls sind entweder die IDs nicht fortlaufend oder du hast keine weniger als 301 Datensätze in der Tabelle. Wobei bei Zweiterem ein leeres Result-Set zurückkommt.

    Willst du hingegen die letzten 300 IDs hardcoded ausschließen, sieht der Query wie folgt aus:
    Code mysql:
    1
    
    SELECT * FROM `news` WHERE `id` < (SELECT MAX(`id`) - 300 FROM `news`) ORDER BY `id` DESC LIMIT 1000

    Gruß Kyoya Stefan
    Geändert von Kyôya (07.12.11 um 19:17 Uhr)
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  9. #9
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Nach ein paar Minuten überlegen und dem nochmaligen Lesen des Sourcecodes, meine ich den Fehler gefunden zu haben:
    Code php:
    1
    
    $datensaetze_pro_seite = "10";

    Die Werte für das Limit müßtest du wie folgt berechnen:
    Code php:
    1
    2
    3
    
    $rowsPerPage = 1000;
    $offset = ($page - 1) * $rowsPerPage + 300;
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT $offset, $rowsPerPage";

    Gruß Kyoya Stefan
    Geändert von Kyôya (07.12.11 um 19:44 Uhr)
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  10. #10
    rernanded rernanded ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    51
    @Kyoya
    Dein Thread von 19.10h/19.17h funktioniert jedenfalls nicht.
    Den nächsten von 19.42h/19.44h probier ich noch. Danke schon mal. Ich meld mich wieder.

    Moni
     

  11. #11
    rernanded rernanded ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    51
    @kyoya
    Der 2. Versuch klappt mit
    PHP-Code:
    $datensaetze_pro_seite="1000" 
    NICHT aber mit
    PHP-Code:
    $datensaetze_pro_seite="10" 
    .
    Wo ich die 1000 unterbringen soll bleibt ein Rätsel. Und noch etwas: Wenn ich bei
    PHP-Code:
    $datensaetze_pro_seite="10" 
    die Zahl 10 ändere zB in 5 oder 3 werden plötzlich leere Seiten erzeugt.
    Moni
     

  12. #12
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Warum schriebst du integer in Quotes und warum jagst du $_GET['go'] durch mysql_real_escape_string?
    Beides sind doch integer, da ist ein typecasting nach int sinnvoller.

    Zum allgemeinen Verständnis:
    • Du willst Datensätze aus der Tabelle "news" anzeigen.
    • Die 300 letzten Datensätze sollen übersprungen werden.
    • Pro Seite sollen 10 Datensätze angezeigt werden.

    Code php:
    1
    2
    3
    
    $aktuelle_seite = (int) $_GET['go'];
    $start = ($aktuelle_seite - 1) * $datensaetze_pro_seite + 300;
    $abfrage = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start,$datensaetze_pro_seite");

    Wenn dieser Code nicht funktioniert, wäre es schön wenn du mal einen MySQL-Dump und den Source-Code anhängen könntest. So auf blauen dunst ist ein Debugging immer recht schwierig.

    Gruß Kyoya Stefan
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  13. #13
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    Hi,

    außerdem solltest du eine Fehlerbehandlung einfügen.
    Das einfachste Beispiel für ein Fehler-Szenario ist, dass jemand für den GET-Parameter 'go' -30 setzt.
    Dieser wird auch richtig in einen Integer umgewandelt und ergibt dann nach der Gleichung für $start einen Wert von -10.
    Und damit taucht der erste Fehler seitens MySQL auf. Dann werden noch mehr Fehler von den anderen Funktionen (mysql_fetch_object()) generiert.

    Neben einer Fehlerbehandlung würde sich auch sowas eigenen:
    PHP-Code:
    $aktuelle_seite 1// Standard-Seite

    if ( isset($_GET['go']) )
    {
      
    $aktuelle_seite intval($_GET['go']);
      if ( 
    $aktuelle_seite || $aktuelle_seite 999 )
        
    trigger_error('Fehlerbehandlung...'E_USER_ERROR);

     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

Ähnliche Themen

  1. Form ergänzen-wie?
    Von pepsi_gx im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 19.02.10, 15:29
  2. Cronjob per PHP ergänzen
    Von Milliongame im Forum PHP
    Antworten: 18
    Letzter Beitrag: 22.07.09, 17:18
  3. XML-Dateien ergänzen
    Von $horty$2 im Forum Java
    Antworten: 8
    Letzter Beitrag: 16.07.09, 14:59
  4. Kalender mit PHP ergänzen
    Von bambid im Forum PHP
    Antworten: 11
    Letzter Beitrag: 20.05.05, 10:45
  5. Lästiges Ergänzen im MS IE
    Von Ruediger im Forum Microsoft Windows
    Antworten: 1
    Letzter Beitrag: 08.09.02, 16:49