LIMIT Abfrage MySQL mittels php

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 288
Registriert: 15.03.2011 08:59

LIMIT Abfrage MySQL mittels php

Beitragvon abelius-kiel » 13.11.2016 12:27

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

Benutzeravatar
tas2580
Ehemaliger
Beiträge: 2803
Registriert: 01.07.2004 05:42
Wohnort: /home/tas2580
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitragvon tas2580 » 13.11.2016 15:58

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
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi

Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 288
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitragvon abelius-kiel » 13.11.2016 19:33

HAllo,

ganz ganz herzlichen Dank.

LG
Kai

Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 288
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitragvon abelius-kiel » 09.03.2017 14:35

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

Benutzeravatar
Mahony
Ehemaliger
Beiträge: 10878
Registriert: 17.11.2005 22:33
Wohnort: Esslingen (Neckar)
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitragvon Mahony » 09.03.2017 15:00

Hallo
Hm..hier werden aber nur 11 Bilder angezeigt -->> http://imkerforum.nordbiene.de/8-letzte-bilder.php

Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.

Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 15279
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitragvon Dr.Death » 09.03.2017 15:32

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

Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 288
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitragvon abelius-kiel » 09.03.2017 15:59

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

Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 288
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitragvon abelius-kiel » 10.03.2017 08:37

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

Benutzeravatar
Pofi
Mitglied
Beiträge: 240
Registriert: 06.10.2007 10:17
Wohnort: Wuppertal

Verständnisfrage

Beitragvon Pofi » 17.03.2017 10:41

Code: Alles auswählen

if(!($result = $db->sql_query_limit($sql, 8, 0, 3600))) 

Diese Abfrage kann nur alle 3600 Sekunden ausgeführt werden?
Fügen Sie hier Ihre Signatur ein.

Benutzeravatar
canonknipser
Supporter
Supporter
Beiträge: 922
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitragvon canonknipser » 17.03.2017 11:55

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 ...
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;)
Kein Support via PN, nur im Board und (manchmal) im IRC


Zurück zu „Coding & Technik“