Supportnet Computer
Planet of Tech

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

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

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!)

<?
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



Antwort 5 von semi

Ehhmm. Sowas?

<?
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 oben
Hä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

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
...
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

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

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:

$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...
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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: