Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.8 veröffentlicht (17.10.16)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Datenbankquery
#1
Hi, ich versuche einen Blog auf meienr Homepage zu erstellen, der auf MyBB aufbaut.
Der Blog steht bereits, jetzt wollte ich eine Seite bauen, die die Einträge nach Kategorie gesordnet anzeigt, die Kategorien sind bereits eingebaut.
Allerdings habe ich ein Problem mit dem Datenbankquery, es sieht folgend aus:
PHP-Code:
if ($_GET['action'] == "cat")
{
$query $db->query("
    SELECT t.*, t.username AS threadusername, u.username, u.avatar
    FROM "
.TABLE_PREFIX."threads t
    LEFT JOIN "
.TABLE_PREFIX."users u ON (u.uid = t.uid)
    WHERE fid IN ("
.$mybb->settings['blogfid'].") AND t.category = "".$_GET['cat']."" AND t.closed NOT LIKE 'moved|%'
    ORDER BY t.dateline DESC "
);


Die URL mit der dieses Query aktiviert wird ist z.B. folgende:
http://localhost:8888/showblognews.php?action=cat&cat=Projekte

In der Datenbanktabelle threads ist das Feld category eingefügt und es existiert auch ein Eintrag mit der Kategorie "Projekte".Das Datenbankquery scheint aber nichts zurückzugeben, da ich nur eine weiße Seite bekomme, was ganz sicherlich nichts mit dem Rest der Dateien zu tun hat, da wenn ich die cat-Überprüfung im WHERE-Teil des Querys rausnehme bekomme ich wieder alles komplett angezeigt.
Weiß jemand was falsch ist?
#2
Hallo Dave,

PHP-Code:
fid IN (".$mybb->settings['blogfid']."
Gibt es denn mehrere Blogs in deinem Forum?

Dein Query enthällt zwei Fehler, welche das Problem aber noch nicht lösen werden.
1.) (Dies ist kein Wirklicher Fehler, mehr ein Hinweis) Bei jedem anderen DB-Typen würde dies ein Fehler verursachen:
PHP-Code:
SELECT t.*, t.username AS threadusername,... 
t.username würde hier zweimal aufgerufen. Einmal mit t.* und dann wiederum als t.username.
Eleganter ist es da, die Felder einzeln aus der Datenbank zu holen und entsprechend zu preperieren, als mit dem all Statement.

2.) Dein Query lässt Sql-Exploits zu.
Ersetze:
PHP-Code:
WHERE fid IN (".$mybb->settings['blogfid'].") AND t.category ".$_GET['cat']." AND t.closed NOT LIKE 'moved|%' 
mit:
PHP-Code:
WHERE fid IN (".$mybb->settings['blogfid'].") AND t.category ='".$db->escape_string($_GET['cat'])."' AND t.closed NOT LIKE 'moved|%' 

Edit: singlequotes hinzugefügt
Ich gebe keinen Support per Messenger oder PN!
#3
Sollte
PHP-Code:
"".$db->escape_string($_GET['cat'])."" 
nicht so heißen:
PHP-Code:
'".$db->escape_string($_GET['cat'])."' 
:question:
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
#4
Danke für eure Hilfe. Ja, um die Sicherheit hatte ich mich noch nit gekümmert. Ich wollte erstmal, dass es funktioniert.
Nein $mybb->settings['blogfid'] enthält lediglich eine ID, allerdings verwende ich viele Code-Teile aus der portal.php wie auch dieses Query und da ich mir die Möglichkeit offen lassen wollte später aus welchen Gründen auch immer eine zwete ID einzufügen habe ich das nicht geändert.

//Edit Hmm, hätte ich mich mal gleich um die Sicherheit mitgekümmert, daran scheint es nämlich geleegen zu haben. Nochmals vielen Dank für eure Hilfe.
#5
Ok, jetzt habe ich doch glat das nächst Query, das mir Kopfschmerzen bereitet:
PHP-Code:
    $query $db->query("SELECT image FROM ".TABLE_PREFIX."blogimages WHERE category = '".$db->escape_string($announcement['category'])."'");
    
$announcement['categoryimage'] = $db->result($query); 

Seitdem ich das eingefügt habe erhalte ich nur eine weiße Seite, davor hat es funktioniert.
Der Tabllen aufbau von mybb_blogimages ist folgender:
iid
category
image
#6
Hallo Dave,

Versuche es doch mal bitte so:
PHP-Code:
$query $db->query("SELECT image FROM ".TABLE_PREFIX."blogimages WHERE category = '".$db->escape_string($announcement['category'])."'");
    
$announcement $db->result($query); 

$categoryimage $announcement['categoryimage'

Mfg Garlant
Ich gebe keinen Support per Messenger oder PN!
#7
Nein, es funktioniert leider nicht.
#8
Hallo Dave, wie wird den $announcement['category'] gefüllt?
Wenn ich es jetzt bedenke fällt mir auf, dass $announcement ja erst später definiert wird, laut deinem Source-Auszug.
Ich gebe keinen Support per Messenger oder PN!
#9
$announcement wird mit sämtlichen Daten befüllt die das Query aus der Datenbank für den entsprechenden Post bekommt, es ist das gleiche System wie in der portal.php. Ich habe mein Problem jetzt auch schon gelöst. Es lag and dem result();, ich weiß nicht wieso. Ich benutze jetzt fetch_array(); und lasse dann das Template auf das Array zugreifen, das funktioniert reibungslos.
#10
Also mit Datenbankquerys scheine ich es überhaupt nicht zu haben:
PHP-Code:
$query3 mysql_query("SELECT tid FROM ".TABLE_PREFIX."threads WHERE category = '".mysql_escape_string(Privates)."'");
    
$count['private'] = mysql_num_rows($query3); 
Was ist an dem Query falsch? Ich greife anschließend im Template auf die Variable {$count['private']} zu. Kann mir jemand helfen?