Blätterfunktion nach id funzt nit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Blätterfunktion nach id funzt nit

    hallo

    hab eine kleine Blätterfunktion kreiert die geht aber nit gescheit

    kurze erläuterung:
    Die Blätterfunktion geht einfach immer zur nächsten Seite (Datensatz in der mySQL-Tabelle) und richtet sich nach der id-Spalte.
    wenn eine id gelöscht wurde in der DB dann soll das Blättern natürlich auch gehen, deswegen arbeite ich auch mit arrays

    hier mal der noch nicht funktionierende code:

    PHP-Code:
    include ("../inc/mysqlsub.inc");
    connect_to_db ();

    $table "liste";
    $id $_GET['id'];

    // Blätterfunktion nach id, prüfen der vorhandenen ids 
    $ids = array(); 
    $idpos array_search($id,$ids); 
    $qry mysql_query("SELECT id FROM ".$table." ORDER BY id ASC"); 
    $abfrage "SELECT * FROM liste WHERE id LIKE '$id'"
    // Schauen ob das feld vorhanenden ist 
    $ergebnis mysql_query($abfrage); 

    echo 
    "<blabla.....";

    while (
    $data mysql_fetch_array($qry)) 
    {
        
    $ids[] = $data['id']; 
    }
    if(
    $id 0)
    {
    echo
    "<tr>
    <td><a href=\""
    .$_SERVER['PHP_SELF']."?id=".$ids[$idpos-1]."\"><img src=\"/images/zurueck.gif\"></a></td>
    <td class=\"tabellekopfklein\">bl&auml;ttern</td>"
    ;
    }
    if(
    $id count($ids))
    {
    echo
    "<td><a href=\"".$_SERVER['PHP_SELF']."?id=".$ids[$idpos+1]."\"><img src=\"/images/weiter.gif\"></a></td>
    </tr>
    </table>"
    ;
        } else {
    echo
    "<td><img src=\"/images/inaktiv.gif\"></td></tr></table>";
    }
    echo 
    "</td> 
    rückwärts geht garnicht und bei vorwärts zeigt er immer "id=2" an?
    SLAPPER'on#OSX

  • #2
    mal mit einem anderen ansatz probiert?

    gesamtzahl der datensätze auslesen.
    anzahl der datensätze pro seite festlegen
    maximalzahl der seiten ermitteln für fehlerabfangen

    datensätze nur mit LIMIT auslesen

    PHP-Code:
    if $aktuelleseite 
    {
    aktuellesseite 0;
    }

    if 
    $aktuelleseite $gesamtseitenzahl
    {
    $aktuelleseite $gesamtseitenzahl;
    }
    $start $aktuelleseite $beitraege;

    $sql ="
     SELECT
                `datenfelder`
     FROM
               `tabellenname`
     WHERE
               bedingung
     LIMIT 
              
    $start$beitraege;"
    so in der richtung habe ich meine blätterfunktion verwirklicht und die funzt vorwärtz wie rückwärtz

    der link ist dann
    $_SERVER['PHP_SELF'}?aktuelleseite=....

    vielleicht kann dir das weiterhelfen

    Kommentar


    • #3
      danke jochenj

      aber deine lösung nützt mir garnix

      ich brauche keine lösung mit LIMIT etc. da ich nicht 10 oder 20'iger Sätze anzeige , sondern ich blätter einzelne Seiten von ID zur nächsten ID, also einzelne Datensätze
      1 Datensatz = 1 Zeile in der mysql Tabelle in der DB

      Ich muss also die vorab die vorhanden ID's ermitteln, in einer Abfrage und mit einem Array auswerten.
      Kann ja sein es fehlt eine ID
      ID's sehen als link so aus

      detail.php?id=4 z.B.
      SLAPPER'on#OSX

      Kommentar


      • #4
        schwachfug

        ob ich jetzt
        LIMIT 0, 10
        LIMIT 10, 10
        LIMIT 20, 10
        schreibe und immer 10 datensätze hole oder
        LIMIT 0, 1
        LIMIT 1, 1
        LIMIT 2, 1
        und damit immer einen datensatz nach dem anderen hole ist doch völlig ega
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          die Ermittlung von $idpos steht an der falschen Stelle im Script.
          Aber mit limit ist es viel einfacher, auch beim Blättern datensatzweise

          Kommentar


          • #6
            Original geschrieben von asp2php
            die Ermittlung von $idpos steht an der falschen Stelle im Script.
            Aber mit limit ist es viel einfacher, auch beim Blättern datensatzweise
            danke, wenn das nix wird mach ich es mit LIMIT

            was meinst an falscher Stelle?
            meinst du
            PHP-Code:
            $idpos array_search($id,$ids); 
            sollte wo anderst stehen?

            oder muss ich die if-Bedingungen anderst schreiben
            SLAPPER'on#OSX

            Kommentar


            • #7
              wo die Anweisung stehen soll, muss du schon selbst dahinter kommen
              Hinweis: du deklarierst $ids = array(); dann anschliessend
              $idpos = array_search($id,$ids);

              Meine Empfehlung: vergisst das Ganze und lerne die Grundlagen von
              Anfang an; fürs erste kannst du mit Schattenbaum.net anfangen

              Kommentar


              • #8
                Meine Empfehlung: vergisst das Ganze und lerne die Grundlagen von Anfang an; fürs erste kannst du mit Schattenbaum.net anfangen
                haha danke für die hilfe

                nun hab ich es mit limit gemacht und bin auch nit weiter als vorher *lol
                so geht es einwandfrei mit blättern:

                PHP-Code:
                $id = (isset($id)) ? abs((int)$id) : 0;
                $limit 1;
                // Feststellen der Anzahl der verfügbaren Datensätze.
                $resultID mysql_query("SELECT COUNT(DISTINCT id) FROM liste");
                $total mysql_result($resultID,0);

                // Datenbankabfrage ausführen für Blätterfunktion.
                $query "SELECT id FROM liste LIMIT ".$id.",".$limit;
                $resultID mysql_query($query);

                while (
                $data mysql_fetch_array($resultID))

                if(
                $id 0)
                {
                $start = ($id $limit 0) ? : ($id $limit);
                echo
                "<tr>
                <td><a href=\""
                .$_SERVER['PHP_SELF']."?id=".$start."\"><img src=\"/images/zurueck.gif\"></a></td>
                <td class=\"tabellekopfklein\">bl&auml;ttern</td>"
                ;
                }
                if (
                $id $limit $total)
                {
                $start $id $limit;
                echo
                "<td><a href=\"".$_SERVER['PHP_SELF']."?id=".$start."\"><img src=\"/images/weiter.gif\"></a></td>
                </tr>
                </table>"
                ;

                nun hab ich das gleiche problem wie vorher
                fehlt ein datensatz, also in meinem fall eine id
                z.B. id=1, 2, 3, 4, 7 usw. <--- hier fehlt also id=5 und 6
                blättert die funktion ebenfalls diese leeren ids durch

                muss ich also doch mit Arrays arbeiten, um die ids nicht nur einfach durchzuzählen, sondern auch fehlende ermitteln zu können
                Limit nützt mir wie anfangs erwähnt nicht wirklich was
                SLAPPER'on#OSX

                Kommentar


                • #9
                  so ich greif mal in meine scriptkist- das forum hat mir ja schon einige gegeben.

                  PHP-Code:
                  // Beiträge pro seite
                  $beitraege 5
                  //erstellen der blätterfunktion
                  //aktuelle seite, beiträge pro seite, erster datensatz der abfrage (LIMIT), abfragebedingung, Modus
                  function blaettern($seite$beitraege, &$anfang$where$action)
                  {
                  dbverbinden(&$verbindung);
                  $sql "SELECT 
                                     count(*)         
                            FROM 
                                      `gb`
                             WHERE
                                     
                  $where
                             LIMIT
                                     1"
                  ;
                  $abfrage mysql_query($sql$verbindung);
                  //anzahl der beiträge
                  $gesamt mysql_fetch_row($abfrage);
                  //anzahl der seiten
                  $seitenzahl ceil($gesamt[0]/$beitraege);
                  //falls zu grosse werte übergeben werden
                  if ($seite $seitenzahl)
                      {
                  $seite $seitenzahl;}
                  //berechnung der ausgabe
                  $anfang = ($seite-1) * $beitraege ;
                  $ende $anfang $beitraege;
                  if (
                  $ende $gesamt[0]) 
                      {
                  $ende $gesamt[0];}
                  // Ausgabe der blaetterleiste
                  echo "<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"mittig\">
                           <tr>
                               <td ><br>"
                  ;
                            
                  //Bei der ersten Seit soll kein zurückblätttern möglich sein
                                  
                  if ($seite == 1)
                                      {echo
                  "<img border=\"0\" alt=\"kein zurück\" src=\"bilder/back0.gif\">";}
                                  else
                                      {echo
                  "<a href=\"".$_SERVER['PHP_SELF']."?action=".$action."&seite=".($seite-1)."\"><img border=\"0\" alt=\"vorherige Seite\" src=\"bilder/back.gif\"></a>";}
                                  echo
                  "  Seite ".$seite." von ".$seitenzahl."  ";
                            
                  //Bei der letzten Seite soll kein vorblättern möglich sein
                                  
                  if ($seite == $seitenzahl)
                                      {echo
                  "<img border=\"0\" alt=\"kein vorwärts\" src=\"bilder/next0.gif\">";}
                                  else
                                      {echo
                  "<a href=\"".$_SERVER['PHP_SELF']."?action=".$action."&seite=".($seite+1)."\"><img border=\"0\" alt=\"nächste Seite\" src=\"bilder/next.gif\"></a>";}
                  echo
                  "        </td>
                           <tr>
                                <td>Beitrag "
                  .($anfang 1)." bis ".$ende." von ".$gesamt[0]." </td>
                           </tr>             
                         </table><br>\n"


                  und die ausgabe

                  PHP-Code:
                  function ausgabe($anfang$beitraege$where)
                  {
                  dbverbinden(&$verbindung);
                  $sql "SELECT
                                   `name`,    
                                `email`,
                                   `emailshow`,
                                   `url`,
                                   `time`,
                                    DATE_FORMAT( time, 'Am %d.%m.%Y um %h:%i Uhr schrieb ' ) AS `timeformat`,
                                   `beitrag`,
                                   `kommentar`,
                                   `status`                 
                          FROM
                                `gb`
                            WHERE
                                   
                  $where
                          ORDER BY 
                                  time DESC
                          LIMIT
                                
                  $anfang$beitraege;";
                  $abfrage mysql_query($sql$verbindung);
                  ...

                  es handelt sich heirbei um mein gästebuch- in diesem habe ich ein feld status in welchen ich beiträge sperren kann, daher die where bedingung - und wenn ich die beiträge auf eins setzt, blättere ich dir sogar durch die einzelnen beiträge, ohne einen auszulassen -> selbst wenn dir LIMIT nichts nützt, es funktioniert.

                  PS, verzeihe mir, wenn ich nicht direkt auf deinen Programmcode eingehe, aber mit manchen zeilen (z. B.: $id = (isset($id)) ? abs((int)$id) : 0 komme ich mit der schreibweise nicht zurecht
                  Zuletzt geändert von jochenj; 07.04.2004, 18:35.

                  Kommentar


                  • #10
                    danke jochenj

                    ich check mal deine function bei mir
                    SLAPPER'on#OSX

                    Kommentar


                    • #11
                      bin auf dein ergebnis gespannt

                      Kommentar

                      Lädt...
                      X