• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SELECT OFFSET onClick

kayze

Neues Mitglied
Hallo liebe Community.

Mein Problem ist folgendes: Ich rufe aus einer Datenbank einträge ab
Code:
SELECT *, DATE_FORMAT(date, '%d.%m.%y - %H:%i') AS Datum FROM table ORDER BY date DESC LIMIT 3 OFFSET {$offset}
und begrenze die Anzahl der Ergebnisse auf 3.

Zusätzlich kann ich über
Code:
<form action='' method='get'><input type='submit' name='loadmore' value='mehr laden'></form>
die Variable offset (aus der SQL-Abfrage) über
Code:
if(isset($_GET['loadmore'])) {
         $offset="3";
    }
    else {
         $offset=0; 
    }
auf den Wert '3' verändern. Das Resultat: die nächsten 3 Zeilen der Tabelle werden angezeigt.

Schön und gut. Beim erneuten Klick auf 'loadmore' möchte ich aber gerne ERNEUT 3 weitere Zeile ausgeben und das funktioniert bei mir logischerweise nur ein mal.

Ich bräuchte quasi einen Ausdruck für
Code:
everytime($_GET['loadmore'])) {
         $offset="1++";
    }
    else {
         $offset=0; 
    }

Vielen Dank für eure Hilfe, denn ich bin mit meinem Latein am Ende... :-)
 
Werbung:
Welche Datenbank nutzt Du? MySQL oder eine andere? Bei MySQL hat OFFSET eigentlich nicht viele zu tun - das ist nur aus Kompatibilitätsgründen dabei und ich habe ich es noch nie genutzt. Bei dem was Du willst reicht es bei LIMIT das von-bis anzugeben. Siehe Handbuch:
https://dev.mysql.com/doc/refman/5.0/en/select.html

Hallo, danke für die schnelle Antwort!

Ich benutze MySql.

Über Limit weiß ich, dass ich "von - bis" (LIMIT ?, ?)
angaben machen kann, da ich das aber nicht für X Einträge definieren kann, dachte ich, dass ich das mit OFFSET mache?

Da stehts ja:
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

 
Zuletzt bearbeitet:
Werbung:
PHP:
<form action='' method='get'>
  <input type='submit' name='loadmore' value='mehr laden'>
  <input type='hidden' name='offset' value='<?php echo (isset($_GET['offset']) ? $_GET['offset']+3 : 3); ?>'>
</form>
So bekommst du bei jedem weiteren Klick den nächsten Offset in $_GET['offset']
Wobei ich lieber mit method="post" arbeiten würde
 
So bekommst du bei jedem weiteren Klick den nächsten Offset in $_GET['offset']
Wobei ich lieber mit method="post" arbeiten würde

Vielen Dank!

Das funktioniert schon fast perfekt. Habe meiner SELECT Abfrage nun
Code:
OFFSET {$_POST['offset']}
hinzugefügt und das Formular so angewendet wie beschrieben.
Code:
<form id="loadmore" action='' method='post'>
  <input class='loadmore' type='submit' name='loadmore' value='mehr laden'>
  <input type='hidden' name='offset' value='<?php echo (isset($_POST['offset']) ? $_POST['offset']+3 : 3); ?>'>
</form>

Allerdings fehlt noch eine Sache, denn scheinbar gibt es jetzt keinen Anfangswert mehr für $offset.
Selbst wenn ich den wie folgt definiere
Code:
<? $offset=0; ?> // oder = '0'
bekomme ich folgenden Error:

Undefined index: offset in /Applications/XAMPP/xamppfiles/htdocs/sass/index.php on line 30
und das ist die SQL-Abfrage. Außerdem "mysql_fetch_array() expects parameter 1 to be resource, boolean given in".

Trotzdem schon mal tausend Dank!
 
Werbung:
$offset = isset($_GET['offset']) ? $_GET['offset']+3 : 0;
Leider nein, das Ergebnis bleibt das Gleiche:

Code:
$abfrage = "SELECT *, DATE_FORMAT(date, '%d.%m.%y - %H:%i') AS Datum FROM table ORDER BY date DESC LIMIT 3 OFFSET {$_POST['offset']}";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis)) {
    echo $row["titel"] ;
    echo $row["Datum"] ;
   echo $row["content"];
    }

$offset = isset($_POST['offset']) ? $_POST['offset']+3 : 0; ?>   
<form class='textCenter' id='loadmore' action='' method='post'>
<input class='loadmore' type='submit' name='loadmore' value='mehr laden'>
<input type='hidden' name='offset' value='<? echo (isset($_POST['offset']) ? $_POST['offset']+3 : 3); ?>'>
</form>
 
PHP:
$offset = isset($_POST['offset']) ? $_POST['offset'] : 0; ?>
$abfrage = "SELECT *, DATE_FORMAT(date, '%d.%m.%y - %H:%i') AS Datum FROM table ORDER BY date DESC LIMIT 3 OFFSET $offset";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis)) {
    echo $row["titel"] ;
    echo $row["Datum"] ;
   echo $row["content"];
    }
<form class='textCenter' id='loadmore' action='' method='post'>
<input class='loadmore' type='submit' name='loadmore' value='mehr laden'>
<input type='hidden' name='offset' value='<? echo $offset+3; ?>'>
</form>
 
Liebe(r) bdt600, vielen vielen Dank für ihre Mühen, nun funktioniert alles, wie es soll und ohne Probleme zu verursachen.

PHP:
$offset = isset($_POST['offset']) ? $_POST['offset'] : 0;  usw.

Ich hätte mir nicht denken könne wie einfach der Code letztlich ist:

PHP:
$offset = isset($_POST['offset']) ? $_POST['offset'] : 0;

<input type='hidden' name='offset' value='<? echo $offset+3; ?>'>
 
Werbung:
Zurück
Oben