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: 290
Registriert: 15.03.2011 08:59

LIMIT Abfrage MySQL mittels php

Beitrag 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
Benutzeravatar
tas2580
Ehemaliges Teammitglied
Beiträge: 3029
Registriert: 01.07.2004 05:42
Wohnort: /home/tas2580
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitrag 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
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi
Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 290
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitrag von abelius-kiel »

HAllo,

ganz ganz herzlichen Dank.

LG
Kai
Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 290
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitrag 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
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitrag von Mahony »

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: 17400
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

Beitrag 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....
Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 290
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitrag 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
Benutzeravatar
abelius-kiel
Mitglied
Beiträge: 290
Registriert: 15.03.2011 08:59

Re: LIMIT Abfrage MySQL mittels php

Beitrag 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
Benutzeravatar
Pofi
Mitglied
Beiträge: 252
Registriert: 06.10.2007 10:17
Wohnort: Wuppertal
Kontaktdaten:

Verständnisfrage

Beitrag 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?
Fügen Sie hier Ihre Signatur ein.
Benutzeravatar
canonknipser
Ehemaliges Teammitglied
Beiträge: 2053
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: LIMIT Abfrage MySQL mittels php

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

Zurück zu „Coding & Technik“