Page 2 of 3

PostPosted: 15. June 2007 18:22
by kschroeder
Grundsätzlich ja. Du kannst Werte schlicht und einfach addieren.
Entweder mit
[code]
$wert = $wert + 1;
[code]

oder auch

[code]
$wert += 1;
[code]

Wenn Du ja für "weiter" und "zurück" die Seite neu aufrufen möchtest, musst Du natürlich drauf achten, dass Du Dir die alten Werte merkst oder einfach die neuen Werte übergeben.

PostPosted: 21. June 2007 09:59
by Gukie
So, ich habe jetzt über das Wochenende versucht, da mal ein bisschen weiter zu kommen, habe im Internet nach Skripts gesucht, und hab das hier gefunden:

http://www.php-einfach.de/tuts_mysql_bl ... nktion.php

Den Skript habe ich versucht an meiner Suchfunktion anzupassen, war aber leider nicht mehr so ganz Erfolgreich.
Es kommt zwar keine Fehlermeldung wenn ich die Datei aufrufe, aber es werden immer noch alle Ergebnisse angezeigt.

So sieht mein Code zur Zeit aus:

Code: Select all
<?php
                        $seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist

                        //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
                        if(!isset($seite))
                          { $seite = 1; }

                        //Datenbank Einstellungen -->
                        $server = ('localhost');
                        $user = ('****');
                        $pw = ('*****');
                        $db = ('****');
                        //Datenbank Einstellungen Ende -->

                        // mit Datenbank Verbinden -->
                        $verbindung = mysql_connect($server,$user,$pw)
                        or die ("Keine Verbindung möglich");
                        mysql_select_db($db)
                        or die ("Die Datenbank existiert nicht");
                        // mit Datenbank Verbinden Ende-->



                        //Einträge pro Seite: Hier 15 pro Seite
                        $eintraege_pro_seite = 15;

                        //Ausrechen welche Spalte man zuerst ausgeben muss:

                        $start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;


                        //Tabelle Abfragen
                        //Tabelle hei&szlig;t hier einfach: Tabelle
                        $start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
                        $ende = $seite * $eintraege_pro_seite


                        //Tabelle Abfragen
                        //Tabelle hei&szlig;t hier einfach: Tabelle
                        $abfrage = "SELECT * FROM $db
                          WHERE code='" . $_POST['code_tb'] . "'
                             OR flughafen='" . $_POST['flughafen_tb'] . "'
                             OR stadt='" . $_POST['stadt_tb'] . "'
                             OR land_de='" . $_POST['land_tb'] . "'
                             LIMIT $start , $ende";
                          $ergebnis = mysql_query($abfrage);
                          while($row = mysql_fetch_object($ergebnis))
                             {echo "<tr>
                             <td>$row->code</td>
                             <td>$row->flughafen</td>
                             <td>$row->stadt</td>
                             <td>$row->land</td>
                             </tr>";}


                          //Jetzt kommt das "Inhaltsverzeichnis",
                          //sprich dort steht jetzt: Seite: 1 2 3 4 5


                          //Wieviele Einträge gibt es überhaupt

                          //Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
                          //also der gleiche Text wie in der Variable $abfrage, blo&szlig;
                          //das hier das LIMIT fehlt
                          //Sonst funktioniert die Blätterfunktion nicht richtig,
                          //und hier kann nur 1 Feld abgefragt werden, also id

                          $result = mysql_query("SELECT id FROM $db");
                          $menge = mysql_num_rows($result);

                          //Errechnen wieviele Seiten es geben wird
                          $wieviel_seiten = $menge / $eintraege_pro_seite;

                          //Ausgabe der Seitenlinks:
                          echo "<div align=\"center\">";
                          echo "<b>Seite:</b> ";


                          //Ausgabe der Links zu den Seiten
                          for($a=0; $a < $wieviel_seiten; $a++)
                          { $b = $a + 1;

                          //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
                          if($seite == $b)
                          {
                          echo "  <b>$b</b> ";
                          }

                          //Aus dieser Seite ist der User nicht, also einen Link ausgeben
                              else
                                 {
                                 echo "  <a href=\"?seite=$b\">$b</a> ";
                                 }
                           }
                           echo "</div>";
                           ?>


Kann mir vielleicht jemand sagen wo mein Fehler da ist?
Ist wahrscheinlich in der Zeile wo ich den LIMIT angebe, aber ich weiss es nicht.
Vielleicht ist es auch noch interessante zu sagen, das ich diese Zeite mal geändert habe, und es hat auch nicht funktioniert

So ist es ja jetzt
Code: Select all
                        $abfrage = "SELECT * FROM $db
                          WHERE code='" . $_POST['code_tb'] . "'
                             OR flughafen='" . $_POST['flughafen_tb'] . "'
                             OR stadt='" . $_POST['stadt_tb'] . "'
                             OR land_de='" . $_POST['land_tb'] . "'
                             LIMIT $start , $ende";


Und so habe ich auch ausprobiert
Code: Select all
                        $abfrage = "SELECT * FROM $db
                          WHERE code='" . $_POST['code_tb'] . "'
                             OR flughafen='" . $_POST['flughafen_tb'] . "'
                             OR stadt='" . $_POST['stadt_tb'] . "'
                             OR land_de='" . $_POST['land_tb'] . "'
                             LIMIT 0, 15";


Sind die zeichen vielleicht falsch gesetzt oder was ist da los?

Ich bedanke mich
Gukie*

PostPosted: 21. June 2007 14:09
by Mätes
Ich habe deinen Post nur (sehr) fix überflogen, aber
einen kleinen fehler gefunden:

LIMIT $start , $ende

ist falsch. Limit $x, $y bedeutet 'starte bei $x und gibt mir $y'.
oder mit etwas mehr fachchinesisch:
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

somit php:
$anzahl = $ende-$start;
sql:
LIMIT $start, $anzahl

ma

PostPosted: 21. June 2007 14:45
by Gukie
Hey, danke für deine antwort
Habe hier deine änderung gemacht, und noch ein bisschen rumgespielt. und jetzt wird die seite nicht mehr angezeigt, sondern eine fehlermeldung
und zwar diese hier


Parse error: syntax error, unexpected T_VARIABLE in xxxxx\ergebnis.php on line 119

was kann das sein?
zeile 119 sieht bei mir so aus

Code: Select all
                        $abfrage = "SELECT * FROM $db
                          WHERE code='" . $_POST['code_tb'] . "'
                             OR flughafen='" . $_POST['flughafen_tb'] . "'
                             OR stadt='" . $_POST['stadt_tb'] . "'
                             OR land_de='" . $_POST['land_tb'] . "'
                             LIMIT $start , $ende-$start";
                          $ergebnis = mysql_query($abfrage);
                          while($row = mysql_fetch_object($ergebnis))
                             {echo "<tr>
                             <td>$row->code</td>
                             <td>$row->flughafen</td>
                             <td>$row->stadt</td>
                             <td>$row->land</td>
                             </tr>";}


Danke
Gukie*

PostPosted: 21. June 2007 15:07
by Mätes
welche von den zeilen ist denn 119?

PostPosted: 21. June 2007 15:16
by Gukie
die erste
ich hab den rest motgepostet, weil alles fast 1 befehl ist

PostPosted: 21. June 2007 15:25
by Mätes
der fehler ist in der zeile davor:
$ende = $seite * $eintraege_pro_seite
dort fehlt ein semikolon

und statt
LIMIT $start , $ende-$start";
schreib lieber
LIMIT $start , " . ($ende-$start) . ";

...
...

m

PostPosted: 21. June 2007 16:32
by Gukie
Oh, wie dumm das ich es übersehen hab :s
Egal, es klappt jetzt halb, da stimmt aber noch eine sache nicht

Jetzt habe ich nur 15 Ergebnisse auf seite Nummer 1, habe auch Links für Seite 2 und Seite 3, aber wenn ich sie öffne, ziegt er nix an... Bzw er zeigt die Seite an, aber die nächsten 15 Einträgen nicht... Habe jetzt auch schon gesucht, die Erklärung auf der Seite wo ich den Skript her hab schon ein paar Mal durchgelesen, und es ist immer noch so.

Mein Code sieht jetzt so aus

Code: Select all
                        $seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist

                        //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
                        if(!isset($seite))
                          { $seite = 1; }


                        //Datenbank Einstellungen -->
                        $server = ('localhost');
                        $user = ('*');
                        $pw = ('*');
                        $db = ('*');
                        //Datenbank Einstellungen Ende -->



                        // mit Datenbank Verbinden -->
                        $verbindung = mysql_connect($server,$user,$pw)
                        or die ("Keine Verbindung möglich");
                        mysql_select_db($db)
                        or die ("Die Datenbank existiert nicht");
                        // mit Datenbank Verbinden Ende-->




                        //Einträge pro Seite: Hier 15 pro Seite
                        $eintraege_pro_seite = 15;


                        //Tabelle Abfragen
                        //Tabelle hei&szlig;t hier einfach: Tabelle
                        $start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
                        $ende = $seite * $eintraege_pro_seite;


                        //Tabelle Abfragen
                        //Tabelle hei&szlig;t hier einfach: Tabelle
                            $select = "SELECT * FROM $db WHERE
                                 code='" . $_POST['code_tb'] . "'
                              OR flughafen='" . $_POST['flughafen_tb'] . "'
                              OR stadt='" . $_POST['stadt_tb'] . "'
                              OR land_de='" . $_POST['land_tb'] . "'
                              LIMIT $start , " . ($ende-$start) . "";
                           $ergebnis = mysql_query($select);
                                 while($row = mysql_fetch_object($ergebnis))
                                    {echo "<tr>
                                           <td>$row->code</td>
                                           <td>$row->flughafen</td>
                                           <td>$row->stadt</td>
                                           <td>$row->land</td>
                                           </tr>";}


                          //Jetzt kommt das "Inhaltsverzeichnis",
                          //sprich dort steht jetzt: Seite: 1 2 3 4 5


                          //Wieviele Einträge gibt es überhaupt

                          //Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
                          //also der gleiche Text wie in der Variable $abfrage, blo&szlig;
                          //das hier das LIMIT fehlt
                          //Sonst funktioniert die Blätterfunktion nicht richtig,
                          //und hier kann nur 1 Feld abgefragt werden, also id

                          $result = mysql_query("SELECT code FROM $db WHERE
                                 code='" . $_POST['code_tb'] . "'
                              OR flughafen='" . $_POST['flughafen_tb'] . "'
                              OR stadt='" . $_POST['stadt_tb'] . "'
                              OR land_de='" . $_POST['land_tb'] . "'");
                          $menge = mysql_num_rows($result);


                          //Errechnen wieviele Seiten es geben wird
                          $wieviel_seiten = $menge / $eintraege_pro_seite;

                          //Ausgabe der Seitenlinks:
                          echo "<div align=\"center\">";
                          echo "<b>Seite:</b> ";


                          //Ausgabe der Links zu den Seiten
                          for($a=0; $a < $wieviel_seiten; $a++)
                          { $b = $a + 1;

                          //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
                          if($seite == $b)
                          {
                          echo "  <b>$b</b> ";
                          }

                          //Aus dieser Seite ist der User nicht, also einen Link ausgeben
                              else
                                 {
                                 echo "  <a href=\"?seite=$b\">$b</a> ";
                                 }
                           }
                           echo "</div>";
                           ?>

PostPosted: 22. June 2007 09:08
by Mätes
nun sag mir bitte bitte bitte, das es in der tabelle mehr als 15 zeilen gibt

PostPosted: 22. June 2007 10:13
by Gukie
ja, da gibt es mehr als 15 zeilen

PostPosted: 22. June 2007 10:23
by Mätes
was solls, ich hab ja zeit :)

lass dir mal per
echo '<br>' . $select . '<br>';

den SQL-String ausgeben, interessant ist der auf
seite 2 oder 3, und poste den.

PostPosted: 22. June 2007 10:39
by Gukie
Seite 2

Code: Select all
SELECT * FROM *** WHERE code='' OR flughafen='' OR stadt='' OR land_de='' LIMIT 15 , 15


Seite 3

Code: Select all
SELECT * FROM *** WHERE code='' OR flughafen='' OR stadt='' OR land_de='' LIMIT 30 , 15


Ja, $ende bleibt immer 15 (warum auch immer), aber ich habs schon anders versucht, und es ging immer noch net...

Danke, dass du mir hilfst

PostPosted: 22. June 2007 10:46
by Mätes
und jetzt hätt ich (doch) gern noch den sql von seite 1,
dann schau bitte selber nochens drüber,
und dann sag mir, ob dir irgendwas auffällt.

PostPosted: 22. June 2007 10:54
by Gukie
Seite 1

Code: Select all
SELECT * FROM *** WHERE code='' OR flughafen='' OR stadt='' OR land_de='deutschland' LIMIT 0 , 15


Mir fallen 2 Sachen auf
Einmal bleibt mein limit immer x, 15
Und dann hab ich ab seite 2 kein suchbegriff mehr

PostPosted: 20. July 2007 14:49
by Gukie
Hallo,

meine Seite funktioniert jetzt fast richtig, aber eine Sache gefällt mir nicht ganz

Mein Select auf Seite 1 Sieht so aus:
Code: Select all
SELECT * FROM *** WHERE code='' OR flughafen='' OR stadt='' OR land_de='Deutschland' LIMIT 0 , 15

Super, es werden nur 15 Ergebnisse angezeigt

Auf Seite 2
Code: Select all
SELECT * FROM *** WHERE code='' OR flughafen='' OR stadt='' OR land_de='Deutschland' LIMIT 15 , 30

Aber es werden nicht nur 15 Ergebnisse angezeigt, sondern 20


Es kommt aber nicht nur bei dieser Abfrage vor.
Bei einer anderen, ist es auch so

Seite 1
Code: Select all
SELECT * FROM *** WHERE art='Hochhaus' LIMIT 0 , 1

Wird wie auch oben, nur 1 Ergebnis angezeigt

Seite 2
Code: Select all
SELECT * FROM *** WHERE art='Hochhaus' LIMIT 1 , 2

Da werden wieder 2 Ergebnisse angezeigt.

Es ist für mich sehr unlogisch, aber viellelicht weiss jemand woran es liegt.

Danke

Gukie*