Seite 1 von 2

LIMIT Abfrage MySQL mittels php

Verfasst: 13.11.2016 12:27
von abelius-kiel
HAllo allerseits,

nach langer Zeit habe ich mal eine Fachfrage. Derzeit werden auf der Seite http://imkerforum.nordbiene.de/8-letzte-bilder.php alle Fotos aus einem Ordner angezeigt. Nämlich alle Beitragsfotos eines Forums (meines). Gelöst wird dies mit php wie folgt:

Code: Alles auswählen

<?php
//Benötigte Dateien und Variablen von phpBB

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);



// Sammle Haupt Informationen für das Bild
$sql = 'SELECT attach_id, in_message, post_msg_id, extension, is_orphan, poster_id, filetime, physical_filename
    FROM ' . ATTACHMENTS_TABLE .  "
    WHERE extension = 'jpg' OR extension = 'gif' OR extension = 'png' ORDER BY attach_id DESC ";
    $result = $db->sql_query_limit($sql, 1);
$attachment = $db->sql_fetchrow($result);

if(!($result = $db->sql_query($sql)))
{
message_die(GENERAL_ERROR, 'Could not query last attachment', '', __LINE__, __FILE__, $sql);
}
while($attach_data = $db->sql_fetchrow($result)) {


$post_id = $attach_data['post_msg_id'];
$filename = $phpbb_root_path.'files/'. "thumb_". $attach_data['physical_filename'];
$fileid = $attach_data['attach_id'];

// Ausgeben

$post_link = append_sid($phpbb_root_path.'viewtopic.'.$phpEx.'?p='.$post_id.'#'.$post_id);

echo '<a href="'.$post_link.' "target="_blank"" "><img src="'.$filename.'" alt="'.$fileid.'" border="0" width="100" height="75" /></a>';


} // Ende der While Schleife


?>
Nun möchte ich durch eine "LIMIT-Abfrage" im Code erreichen, dass nur die neuesten 8 Fotos ausgelesen und angezeigt werden?

Wie und wo muss ich genau die Änderung

Code: Alles auswählen

LIMIT 0, 8
einfügen?

Vielen Dank im Voraus.
LG
Kai

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 13.11.2016 15:58
von tas2580
Hallo,

ersetze die Zeile

Code: Alles auswählen

if(!($result = $db->sql_query($sql))) 
 durch 

Code: Alles auswählen

if(!($result = $db->sql_query_limit($sql, 8)))
Du kannst das ganze auch noch für eine gewisse Zeit cachen, hier für eine Stunde (3600 Sekunden)

Code: Alles auswählen

if(!($result = $db->sql_query_limit($sql, 8, 0, 3600)))
Weitere Infos dazu findest du auf https://wiki.phpbb.com/Dbal.sql_query_limit

Gruß Tobi

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 13.11.2016 19:33
von abelius-kiel
HAllo,

ganz ganz herzlichen Dank.

LG
Kai

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 09.03.2017 14:35
von abelius-kiel
HAllo an die Fachleute.

Nach meinem Update von phpBB 3.1.7pl auf 3.2.0 funktioniert meine Abfrage mit dem eingangs gezeigten Code nicht mehr.

Ergebnis: http://imkerforum.nordbiene.de/alle-bilder.php

Woran kann es liegen? Kann es sein, dass die SQL-Abfrage anders lauten muss? Hat sich mit Upgrade die Datenbank verändert?

Vielen Dank für Eure Hilfe.

LG
Kai

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 09.03.2017 15:00
von Mahony
Hallo
Hm..hier werden aber nur 11 Bilder angezeigt -->> http://imkerforum.nordbiene.de/8-letzte-bilder.php

Grüße: Mahony

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 09.03.2017 15:32
von Dr.Death
Hi, nur nur kurze Frage,... du referenzierst ja direkt auf Bilder die im "files" Ordner liegen.

Existiert da nicht eine .htaccess , die den direkten Zugriff auf die Resourcen schützt ? :roll: (Kann aber auch sein, das ich mich da momentan vertue... :oops: )

der Verweis auf die Datei / Bild sollte also so aussehen:

./download/file.php?id=2652

und nicht : ./files/thumb_708_66ac13da991bcf312dfe9c986ca73b85

Oder aber, du must die .htaccess Datei im /files/ Ordner anpassen....aufweichen....

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 09.03.2017 15:59
von abelius-kiel
Dr.Death hat geschrieben:Hi, nur nur kurze Frage,... du referenzierst ja direkt auf Bilder die im "files" Ordner liegen.

Existiert da nicht eine .htaccess , die den direkten Zugriff auf die Resourcen schützt ? :roll: (Kann aber auch sein, das ich mich da momentan vertue... :oops: )

der Verweis auf die Datei / Bild sollte also so aussehen:

./download/file.php?id=2652

und nicht : ./files/thumb_708_66ac13da991bcf312dfe9c986ca73b85

Oder aber, du must die .htaccess Datei im /files/ Ordner anpassen....aufweichen....
HAllo Dr.Death,

ich glaube, das wars! Du magst Recht haben. :P :P :P Bin zZ nicht zu Hause und kann das nicht kontrollieren, aber mit der neuen Version wird tatsächlich im /files/-Ordner eine neue .htaccess hochgeladen worden sein. Ich will die mal mit dem Backup vergleichen.

Warum soll der /files/ Ordner eigentlich vor Blicken geschützt sein? HAlte ich für nicht notwendig. :wink:

Ich melde mich heute Abend.

DAnke erstmal für den Tipp.

@Mahony: Ja Du hast Recht, da war noch ein anderes LIMIT eingetragen. :wink:

LG
Kai

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 10.03.2017 08:37
von abelius-kiel
Hier nochmal die Rückmeldung, Dr.Death: Genau das war die Lösung.

Habe in der .htaccess den Zugang von "DENY" auf "ALLOW" gesetzt.

LG
Kai

Verständnisfrage

Verfasst: 17.03.2017 10:41
von Pofi

Code: Alles auswählen

if(!($result = $db->sql_query_limit($sql, 8, 0, 3600))) 
Diese Abfrage kann nur alle 3600 Sekunden ausgeführt werden?

Re: LIMIT Abfrage MySQL mittels php

Verfasst: 17.03.2017 11:55
von canonknipser
Nein, die Abfrage wird für 3600 Sekunden gecached, also in einen Zwischenspeicher eingestellt, so dass identische Abfragen in diesem Zeitraum nicht direkt auf die Datenbank gehen, sondern aus dem Zwischenspeicher beantwortet werden. Dadurch wird verhindert, dass das Datenbanksystem durch zu viele Datenzugriffe unnötig belastet wird. ->
[BTK] Tobi hat geschrieben:Du kannst das ganze auch noch für eine gewisse Zeit cachen, hier für eine Stunde (3600 Sekunden)

Code: Alles auswählen
if(!($result = $db->sql_query_limit($sql, 8, 0, 3600)))


Weitere Infos dazu findest du auf https://wiki.phpbb.com/Dbal.sql_query_limit
Gerade auf der Startseite tummeln sich ja sehr viele Benutzer, Bots etc. die dann auch viele identische Abfragen durchführen würden. Nachteil in diesem Fall: Neue Bilder erscheinen erst bis zu einer Stunde nach Einstellen auf der Startseite ...