Supportnet / Forum / Datenbanken
Abfrage, Ergebnis in intervalen Anzegigen ?
Frage
Hallo,
Ich möglich gerne mein Ergebnis von einer Datenbank Abfrage Limitieren auf 7 zeilen pro seite in Intervalen Anzeigen lassen. Am liebsten 2x die Ergebnis seiten hinternander dann 1x eine andere Ergebnis seite.
Danach wieder von vorne am besten stunden lang.
Hier einmal der erste Script Ausschnitt vom ersten Ergenis.
<?php
include("inc/config.php");
$SQL_statement="SELECT Artikel,Preis FROM momo LIMIT 0,7";
$resultset=mysql_query($SQL_statement);
while($data=mysql_fetch_array($resultset)){
echo "<table border=\"0\">";
echo "<tr>";
echo "<td width=750>".$data['Artikel']."</td>";
echo "<td width=150>".$data['Preis']."</td>";
echo "</tr>";
echo "</table>";
}
mysql_close();
?>
wäre Super wenn mir jemand Helfen könnte !!!
danke
Faivel
Antwort 1 von semi
Mach den "LIMIT 0,7" Teil variabel und schleppe die Offsets und Länge von Seite zu Seite. Alternativ Session-Management.
Die Funktionsweise ist in PHP-Handbuch beschrieben. Was darüber hinausgeht bleibt Deiner Kreativität überlassen.
Gruß,
Michael
Die Funktionsweise ist in PHP-Handbuch beschrieben. Was darüber hinausgeht bleibt Deiner Kreativität überlassen.
Gruß,
Michael
Antwort 2 von Faivel
Hy,
danke für die schnelle Antwort.
Ich verstehe vieleicht ungefähr was Du meinst leider nicht so viel das ich das umsetzen kann. SORRY
Vieleicht könntest Du es mir ein wenig genauer erklären.
1000send dank
Faivel
danke für die schnelle Antwort.
Ich verstehe vieleicht ungefähr was Du meinst leider nicht so viel das ich das umsetzen kann. SORRY
Vieleicht könntest Du es mir ein wenig genauer erklären.
1000send dank
Faivel
Antwort 3 von semi
OK fangen wir mal bei Sessions an.
Lass mal das hier laufen und schau Dir das Ergebnis im Browser an.
(Cookies aktivieren!)
wenn Du im IE auf "F5" klickst. Das wäre die Seitennummer, die für jede
Session gültig ist.
Du weißt aber nicht wieviele "Seiten" in der Tabelle drin sind,
möchtest aber jeweils nur 7 Datensätze pro Seite anzeigen.
LIMIT $offset, 7
Damit Du weißt, ob eine weitere Seite existiert, holst Du einen Datensatz
mehr als Du anzeigen möchtest.
LIMIT $offset, 8
Mit mysql_num_rows($result) kannst Du die tatsächliche Anzahl der Datensätze
einer Seite ermitteln. Wenn mysql_num_rows($result)==8, dann gibt es eine
weitere Seite, sonst bist Du am Ende der Tabelle.
Baue noch eine Fehlerprüfung für die Datenbankverbindung ein!
Gruß,
Michael
Lass mal das hier laufen und schau Dir das Ergebnis im Browser an.
(Cookies aktivieren!)
<?
session_start();
if(!session_is_registered("pageno")) {
session_register("pageno");
$pageno=0;
}
else {
$pageno=($pageno<5)?$pageno+1:0;
}
$offset = $pageno*7;
$erster = $offset+1;
$letzter = ($pageno+1)*7;
echo "Seite : $pageno<br>";
echo "Offset : $offset<br>";
echo "Datensatz: $erster bis $letzter<br>";
?>
Es werden immer die Seiten 0 bis 5 angezeigt, dann kommt wieder die 0, wenn Du im IE auf "F5" klickst. Das wäre die Seitennummer, die für jede
Session gültig ist.
Du weißt aber nicht wieviele "Seiten" in der Tabelle drin sind,
möchtest aber jeweils nur 7 Datensätze pro Seite anzeigen.
LIMIT $offset, 7
Damit Du weißt, ob eine weitere Seite existiert, holst Du einen Datensatz
mehr als Du anzeigen möchtest.
LIMIT $offset, 8
Mit mysql_num_rows($result) kannst Du die tatsächliche Anzahl der Datensätze
einer Seite ermitteln. Wenn mysql_num_rows($result)==8, dann gibt es eine
weitere Seite, sonst bist Du am Ende der Tabelle.
<?
session_start();
if(!session_is_registered("pageno")) {
session_register("pageno");
$pageno=0;
}
# Anzahl der Datensätze pro Seite
$pagesize = 7;
# Offset der aktuellen Seite
$offset = $pageno*$pagesize;
$db = mysql_pconnect("host", "user", "password");
mysql_select_db("datenbank");
# Einen Datensatz mehr lesen als nötig ($pagesize+1)
$result = mysql_query(
"SELECT artikel, preis "
."FROM momo ORDER BY artikel "
."LIMIT $offset," . ($pagesize+1)
);
# Nächste Seitennummer berechnen; 0, wenn Ende der Tabelle
$pageno = (mysql_num_rows($result)>$pagesize)?$pageno+1:0;
echo "<html><body><table border=1>"
."<tr><td>Artikel</td><td>Preis</td></tr>";
# Höchstens $pagesize Datensätze ausgeben
$i=0;
while($row=mysql_fetch_array($result, MYSQL_NUM)) {
printf(
"<tr><td>%s</td><td align=right>%.2f</td></tr>",
$row[0], $row[1]
);
$i++;
if($i==$pagesize)
break;
}
echo "</table></body></html>";
# Ergebnis freigeben
mysql_free_result($result);
# Verbindung nicht schließen, da mit pconnect geöffnet!
?>
Schau Dir den Code in ruhe an.Baue noch eine Fehlerprüfung für die Datenbankverbindung ein!
Gruß,
Michael
Antwort 4 von Faivel
Hy,
danke für die schnelle Antwort. :-)
habe mich den ganzen sonntag damit beschäftigen können dank der schnellen antwort.
Hab das Script erfolgreich in mein Projekt einbinden können. :-)
Habe es auch den ganzen tag durch gelesen aber eine Möglichkeit für die zweite ergebnis seite eine neue mysql abfrage für den inhalt der zweiten zeite habe ich nicht gefunden.
Könntest Du mir dabei noch helfen ?
danke
Faivel
danke für die schnelle Antwort. :-)
habe mich den ganzen sonntag damit beschäftigen können dank der schnellen antwort.
Hab das Script erfolgreich in mein Projekt einbinden können. :-)
Habe es auch den ganzen tag durch gelesen aber eine Möglichkeit für die zweite ergebnis seite eine neue mysql abfrage für den inhalt der zweiten zeite habe ich nicht gefunden.
Könntest Du mir dabei noch helfen ?
danke
Faivel
Antwort 5 von semi
Ehhmm. Sowas?
0
1
---> andere Seite (an/aus)
2
3
---> andere Seite (an/aus)
4
5
---> andere Seite (an/aus)
6
usw.
Wenn die Anzahl der Seiten ungerade ist, dann erscheint die "zweite" Seite direkt nach der letzten wieder, obwohl erst eine "normale" Seite angezeigt wurde. Das kannst Du dann aber selbst korriegieren. :)
Gruß,
Michael
<?
session_start();
if(!session_is_registered("pageno")) {
session_register("pageno");
session_register("andere_seite");
$pageno=0;
$andere_seite=true;
}
if(!$andere_seite && ($pageno%2)==0)
{
$andere_seite = true;
echo "Hier was anderes anzeigen."
."z.B. mit include('andere-seite.php');";
exit; // Skript nicht fortsetzen!
}
$andere_seite = false;
...
... Rest wie obenHättest Du die Seitennummerierung etwas genauer unter die Luppe genommen, wärst Du selbst drauf gekommen.0
1
---> andere Seite (an/aus)
2
3
---> andere Seite (an/aus)
4
5
---> andere Seite (an/aus)
6
usw.
Wenn die Anzahl der Seiten ungerade ist, dann erscheint die "zweite" Seite direkt nach der letzten wieder, obwohl erst eine "normale" Seite angezeigt wurde. Das kannst Du dann aber selbst korriegieren. :)
Gruß,
Michael
Antwort 6 von Faivel
Hy,
Sorry das ich jetzt erst schreibe wollte mir nur nicht wieder bloss stellen das ich das nicht hin bekommen habe. :-(
Tut mir echt leid, aber ich wills einfach verstehen.
Hier ist noch mal unser gesamter code.
<?
session_start();
if(!session_is_registered("pageno")) {
session_register("pageno");
session_register("pageno2");
$pageno=0;
$pageno2=true;
}
if(!$pageno2 && ($pageno%2)==0)
{
$pageno=true;
include("new.php");
exit; //script nicht fortsetzen!
}
$pageno2=false;
# Anzahl der Datensätze pro Seite
$pagesize = 9;
# Offset der aktuellen Seite
$offset = $pageno*$pagesize;
include("admin/inc/config.php");
# Einen Datensatz mehr lesen als nötig ($pagesize+1)
$result = mysql_query("SELECT artikel, preis"
."FROM mini ORDER BY artikel "
."LIMIT $offset," . ($pagesize+1)
);
# Nächste Seitennummer berechnen; 0, wenn Ende der Tabelle
$pageno = (mysql_num_rows($result)>
$pagesize)?$pageno+1:0;
echo "<html><link href=inc/style.css rel=stylesheet type=text/css><meta http-equiv=refresh content=10><body><table width=950 border=0>";
# Höchstens $pagesize Datensätze ausgeben
$i=0;
while($row=mysql_fetch_array($result, MYSQL_NUM)) {printf(
"<tr><td>%s</td><td align=right>%.2f</td></tr>",
$row[0], $row[1]
);
$i++;
if($i==$pagesize)
break;
}
echo "</table></body></html>";
# Ergebnis freigeben
mysql_free_result($result);
# Verbindung nicht schließen, da mit pconnect geöffnet!
?>
wäre super nett wenn Du mir noch beim ende helfen könntest.
1000send dank
Faivel
Sorry das ich jetzt erst schreibe wollte mir nur nicht wieder bloss stellen das ich das nicht hin bekommen habe. :-(
Tut mir echt leid, aber ich wills einfach verstehen.
Hier ist noch mal unser gesamter code.
<?
session_start();
if(!session_is_registered("pageno")) {
session_register("pageno");
session_register("pageno2");
$pageno=0;
$pageno2=true;
}
if(!$pageno2 && ($pageno%2)==0)
{
$pageno=true;
include("new.php");
exit; //script nicht fortsetzen!
}
$pageno2=false;
# Anzahl der Datensätze pro Seite
$pagesize = 9;
# Offset der aktuellen Seite
$offset = $pageno*$pagesize;
include("admin/inc/config.php");
# Einen Datensatz mehr lesen als nötig ($pagesize+1)
$result = mysql_query("SELECT artikel, preis"
."FROM mini ORDER BY artikel "
."LIMIT $offset," . ($pagesize+1)
);
# Nächste Seitennummer berechnen; 0, wenn Ende der Tabelle
$pageno = (mysql_num_rows($result)>
$pagesize)?$pageno+1:0;
echo "<html><link href=inc/style.css rel=stylesheet type=text/css><meta http-equiv=refresh content=10><body><table width=950 border=0>";
# Höchstens $pagesize Datensätze ausgeben
$i=0;
while($row=mysql_fetch_array($result, MYSQL_NUM)) {printf(
"<tr><td>%s</td><td align=right>%.2f</td></tr>",
$row[0], $row[1]
);
$i++;
if($i==$pagesize)
break;
}
echo "</table></body></html>";
# Ergebnis freigeben
mysql_free_result($result);
# Verbindung nicht schließen, da mit pconnect geöffnet!
?>
wäre super nett wenn Du mir noch beim ende helfen könntest.
1000send dank
Faivel
Antwort 7 von semi
Und was genau ist Deine Frage?
Ein Fehler fällt mir aber auf ($pageno2 statt $pageno verwenden)
Das ist dieses an/aus aus Antwort 5
Gruß,
Michael
Ein Fehler fällt mir aber auf ($pageno2 statt $pageno verwenden)
Das ist dieses an/aus aus Antwort 5
...
if(!$pageno2 && ($pageno%2)==0)
{
$pageno2=true;
...Gruß,
Michael
Antwort 8 von semi
Noch etwas. Verwende bitte die Code-Formatierung, dann sind die Sourcecodes besser lesbar. Siehe Forumhilfe
Antwort 9 von Faivel
Hy,
danke hab den fehler gleich aus gebessert. Und funkt. jetzt.
danke
Aber das mit dem ein/aus hab ich nicht richtig verstanden wo und wie schreib ich an/aus ?
Du hast geschrieben:
0
1
---> andere Seite (an/aus)
2
3
---> andere Seite (an/aus)
4
5
---> andere Seite (an/aus)
6
usw.
wie schreibe ich das ?
danke
Faivel
danke hab den fehler gleich aus gebessert. Und funkt. jetzt.
danke
Aber das mit dem ein/aus hab ich nicht richtig verstanden wo und wie schreib ich an/aus ?
Du hast geschrieben:
0
1
---> andere Seite (an/aus)
2
3
---> andere Seite (an/aus)
4
5
---> andere Seite (an/aus)
6
usw.
wie schreibe ich das ?
danke
Faivel
Antwort 10 von semi
$pageno2=true; ==> andere Seite ist an.
$pageno2=false; ==> andere Seite ist aus.
Einfach nur eine Info, was gerade angezeigt wird.
Gruß,
Michael
$pageno2=false; ==> andere Seite ist aus.
Einfach nur eine Info, was gerade angezeigt wird.
Gruß,
Michael
Antwort 11 von Faivel
ok, danke ich bekomme das nicht hin
habe es an allen drei stellen probiert jedesmal zeigt er die zweite seite an dritter stelle an.
ich würde sie gerne an 5 stelle angezeit bekommen.
vieleicht kannst du mir auch sagen wie ich meinen string ändern kann hier mein string:
In der gleichen tabelle ist auch eine spalte "aktiv" da steht "ja" oder "nein" drin und in der Anzeige möchte ich gerne nur die mit ja angezeigt bekommen.
100send dank
faivel
habe es an allen drei stellen probiert jedesmal zeigt er die zweite seite an dritter stelle an.
ich würde sie gerne an 5 stelle angezeit bekommen.
vieleicht kannst du mir auch sagen wie ich meinen string ändern kann hier mein string:
$result=mysql_query("SELECT artikel, preis FROM mini ORDER BY artikel LIMIT $offset,".($pagesize+1));
In der gleichen tabelle ist auch eine spalte "aktiv" da steht "ja" oder "nein" drin und in der Anzeige möchte ich gerne nur die mit ja angezeigt bekommen.
100send dank
faivel
Antwort 12 von semi
Ist doch einfach wie Fic...
Wenn z.B. 10 Seiten angezeigt werden, dann passiert folgendes:
Bei der Abfrage fehlt nur die WHERE-Klausel
Gruß,
Michael
if(!$pageno2 && ($pageno%4)==0)Wenn z.B. 10 Seiten angezeigt werden, dann passiert folgendes:
$pageno = 0; ($pageno%4)=0; $pageno2=true
===> Bedingung: if(!$pageno2 && ($pageno%4)==0) NICHT erfüllt
da $pageno2=true
Folge: Die andere Seite NICHT anzeigen
$pageno2=false
$pageno = 1; ($pageno%4)=1; $pageno2=false
$pageno = 2; ($pageno%4)=2; $pageno2=false
$pageno = 3; ($pageno%4)=3; $pageno2=false
$pageno = 4; ($pageno%4)=0; $pageno2=false
===> Bedingung: if(!$pageno2 && ($pageno%4)==0) erfüllt
da $pageno2=false
Folge: $pageno2=true und die andere Seite anzeigen
<=== beim nächsten Aufruf (zurück von der anderen Seite)
Bedingung: if(!$pageno2 && ($pageno%4)==0) NICHT erfüllt
da $pageno2=true
Folge: Die andere Seite NICHT erneut anzeigen
$pageno2=false
$pageno = 5; ($pageno%4)=1; $pageno2=false
$pageno = 6; ($pageno%4)=2; $pageno2=false
$pageno = 7; ($pageno%4)=3; $pageno2=false
$pageno = 8; ($pageno%4)=0; $pageno2=false
===> wie bei $pageno = 4;
<=== wie bei $pageno = 4;
$pageno2=false
$pageno = 9; ($pageno%4)=1; $pageno2=false
...
usw.Bei der Abfrage fehlt nur die WHERE-Klausel
"SELECT artikel, preis FROM mini WHERE aktiv='ja' ORDER BY....Gruß,
Michael
Antwort 13 von Faivel
Suuuuuuuuuuuuperrrrrrrrrrrrrrrr
hat geklappt...
100000send dank
Bist klasse....
Faivel
hat geklappt...
100000send dank
Bist klasse....
Faivel

