MyBB.de Forum
Datenbankquery - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Archiv (https://www.mybb.de/forum/forum-57.html)
+--- Forum: MyBB 1.2.x und älter (https://www.mybb.de/forum/forum-27.html)
+---- Forum: Allgemeiner Support (https://www.mybb.de/forum/forum-36.html)
+---- Thema: Datenbankquery (/thread-7635.html)

Seiten: Seiten: 1 2 3


Datenbankquery - Dave - 11.11.2007

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?


RE: Datenbankquery - Garlant - 11.11.2007

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


RE: Datenbankquery - StefanT - 11.11.2007

Sollte
PHP-Code:
"".$db->escape_string($_GET['cat'])."" 
nicht so heißen:
PHP-Code:
'".$db->escape_string($_GET['cat'])."' 
:question:


RE: Datenbankquery - Dave - 11.11.2007

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.


RE: Datenbankquery - Dave - 11.11.2007

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


RE: Datenbankquery - Garlant - 11.11.2007

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


RE: Datenbankquery - Dave - 11.11.2007

Nein, es funktioniert leider nicht.


RE: Datenbankquery - Garlant - 11.11.2007

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.


RE: Datenbankquery - Dave - 11.11.2007

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


RE: Datenbankquery - Dave - 12.11.2007

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?