CMS Einstellungen auslesen – Code & Blog
Um die Einstellungen des CMS aus der Datenbank zu lesen brauchen wird wieder ein PHP-Script. Dieses befindet sich in der Datei settings.php (Verzeichnis system). Dort gibt es eine Funktion die getSetting heißt. Mit dieser kann man nachher im ganzen Projekt die Einstellungen laden.
Hier ist der Quellcode:
<?PHP function getSetting($property){ global $dbpraefix; $res = mysql_query("SELECT value FROM ".$dbpraefix."settings WHERE property = '".$property."'"); $row = mysql_fetch_row($res); return $row[0]; } ?>
Als Übergabe Parameter wird der jeweilige Name der Eigenschaft übergeben. Mit global können wir über die Präfix-Variable aus der Datei dbsettings.php zugreifen. Ohne ist dies nicht möglich, da wir uns in einer Funktion befinden.
Dann holen wir und mit mysql_query und mysql_fetch_row das jeweilige Ergebnis. Dort wird dann über return die erste (und einzige) Spalte zurückgegeben. Wenn nichts gefunden wurde, wird dort einfach ein false übergeben, darum müssen wir uns nicht kümmern.
So, nun müssen wir das ganze noch Testen. Dafür muss als erstes ein Datensatz in die Tabelle settings. Ich habe hier den Titel des CMS genommen, da wir den nachher bestimmt noch brauchen werden. Hier ist ein Insert-Query:
INSERT INTO `cms_settings` ( `property` , `value` ) VALUES ( 'title', 'Test CMS' );
Zum Abschluss brauchen wir noch eine Test-Datei. Ich habe hier die Datei settings.test.php erstellt. Sie heißt so, damit wir sofort erkennen können was sie testen. Sie muss übrigens ebenfalls im Verzeichnis system liegen. Und so sieht die Datei von innen aus:
<?PHP include('dbconnect.php'); include('settings.php'); echo getSetting("title"); ?>
Wenn alles geklappt hat, sollte sie jetzt den eben eingetragenen Titel des CMS wiedergeben, bei mir gibt es jedenfalls „Test CMS“ wieder.
Dies ist ein Beitrag aus der Aktion Code & Blog, in der hier ein eigenes CMS erstellt wird.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Marko schrieb am 09.08.2009:
Bevor es zu Verwirrungen kommt: Es sollte in der Zeile "Dann holen wir uns mit..." nicht mysql_fetch_assoc, sondern mysql_fetch_row heißen.
Stefan Wienströer schrieb am 09.08.2009:
Hast Recht, werd ich ändern
Froschkoenig schrieb am 18.07.2010:
find das bisher gut :) Leider kann ich es nicht ausprobieren, da es Server Probs gibt -.- (-> No suitable nodes are available to serve your request.) Aber td gut :) werde td mal weiter machen :)
Christian schrieb am 30.07.2010:
hallo und danke für die viele mühe die du dir machst. bin gerade hier gelandet und bekomme eine fehlermeldung. ne idee was falsch sein könnte: Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/www/system/settings.php on line 6 dank und gruß
Stefan Wienströer schrieb am 30.07.2010:
Ist die Tabelle cms_settings vorhanden?
Johannes schrieb am 16.09.2010:
hallo, bekomme den gleichen fehler wie oben, wobei bei mir die Tabelle cms_settings vorhanden ist.
Stefan Wienströer schrieb am 17.09.2010:
Die hier? Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/www/system/settings.php on line 6 Versuch mal das Insert im PhpMyAdmin auszuführen, kommt dort auch ein Fehler?
Johannes schrieb am 18.09.2010:
nein, dies verlief ohne Fehler und 'title', 'Test CMS' wurden auch erfolgreich dort gespeichert... . Danke und gruß Johannes
Stefan Wienströer schrieb am 18.09.2010:
was läuft denn noch schief?
eddi schrieb am 01.10.2010:
Bei mir kommt diese Meldung. Hmm. Kann mir da wer weiterhelfen? Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/CMS/system/settings.php on line 6 Grüße
Stefan Wienströer schrieb am 02.10.2010:
ist bei dir die settings-Tabelle angelegt? Wenn ja, kannst du mal vor dem return mit echo mysql_error() eine genauere Fehlermeldung ausgeben lassen?
eddi schrieb am 02.10.2010:
Ahh. Gelöst. Mein User hatte keine Berechtigung. Jetzt geht alles. Durch diesen mysql_error() bin ich da erst drauf gekommen. Danke
Prashanna schrieb am 08.10.2010:
hi, du hast ein kleinen Fehler im Script. Es sollte nicht $dbpraefix heissen sondern '$dbprafaefix' heissen, weil du es auch in dbsettings.php angegeben hast. Daher kommen die Fehlermeldungen. gruss Prashanna
Stefan Wienströer schrieb am 09.10.2010:
$dbpraefix ist schon richtig, siehe hier: http://blog.stevieswebsite.de/2009/04/cms-datenbank-einstellungen-in-dbsettingsphp-code-blog/
Julian schrieb am 24.01.2011:
Habe das ähnliche Problem wie eddi. Die Fehlermeldung die mir angezeigt wird lautet folgendermaßen: Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/CMS/system/settings.php on line 8 Ich habe auch den Befehl mysql_error() eingebaut und folgendes wird mir nun angezeigt: No database selected. Also habe ich natürlich alles überprüft, die warnung wurde jedoch immer wieder angezeigt. Was kann ich tun?
Stefan Wienströer schrieb am 24.01.2011:
check mal deine system/dbsettings.php. Gibt es die Datenbank?
Julian schrieb am 24.01.2011:
Ja die Datenbank existiert... Ich habe das wie folgt aufgebaut: Sobald ich die test.settings.php Datei aufrufe, werden die folgenden Dateien geladen: 1. $dbconnect -> $dbsettings 2. $settings Kann es sein, dass ich ablauftechnisch etwas falsch gemacht habe?
Stefan Wienströer schrieb am 24.01.2011:
srttings.test.php ist eigentlich nur zum testen gedacht. steht in deinem dbconnect.php denn das mysql_select_db?
Julian schrieb am 24.01.2011:
Das komische ist, in der Datenbank wird der Eintrag cms_settings gemacht, doch der mysql_error Befehl zeigt nach wie vor: No database selected...?
Julian schrieb am 24.01.2011:
Und wenn ich den INSERT-Befehl manuell betätige funktioniert auch alles...
Julian schrieb am 24.01.2011:
Ich sehe gerade folgendes in der localhost Übersicht: Die zusätzlichen Funktionen für verknüpfte Tabellen wurden automatisch deaktiviert. Klicken Sie hier um herauszufinden warum. Kann es zufällig das sein?
Julian schrieb am 26.01.2011:
Juhu es hat doch geklappt!!! Musste etwas umdenken und noch eigene kleine Scripte dazubasteln aber es funzt!!!
BartM schrieb am 28.01.2011:
Habe alles bis jetzt so gemacht wie in dem tutorial. aber bei mir kommt wenn ich die settings.test.php aufrufe dies: Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:Programmexampphtdocscmssystemsettings.php on line 6
BartM schrieb am 28.01.2011:
und mit echo mysql_error() erhalte ich dies: Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:Programmexampphtdocscmssystemsettings.php on line 6 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-settings WHERE property = 'title'' at line 1
Stefan Wienströer schrieb am 28.01.2011:
Kann es sein, dass du nen Bindestrich in deiner $dbpraefix hast?
BartM schrieb am 28.01.2011:
Jetzt geht es auf einmal .. habe einfach nochmal alles vom anfang an gemacht..
Skampy schrieb am 21.03.2011:
Bitte bedenkt das im XAMPP der MySQL Admin standartmäßig "root" heißt.
lars schrieb am 20.04.2011:
Ich habe folgendes Problem: Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in F:xampphtdocsGamesproworldSystemdbconnect.php on line 3 Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in F:xampphtdocsGamesproworldSystemdbconnect.php on line 4 Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in F:xampphtdocsGamesproworldSystemsettings.php on line 6 Kann mir jemand sagen was ich falsch gemacht habe Ich benutze xampp Alls apatche und mysql phpmyadmin von xampp habe alle scrypte mehrfach kontrolliert abber finde die fehler einfach nicht :-(
Stefan Wienströer schrieb am 20.04.2011:
Hi, du hast zu wenig Rechte auf deiner Datenbank / den Benutzer gibt es nicht. Kann es vielleicht sein, dass in deiner dbsettings zwei Anführungszeichen hintereinander stehen? Gruß Stefan
lars schrieb am 20.04.2011:
Nein Ich sehe Keine 2 Abber bin auch noch recht neu in php und nutze dein tutorial um mehr zu lehrnen
lars schrieb am 20.04.2011:
$dbpraefix = "cms_"; $dbhost = "localhost"; $dbpassword = "root"; $dbuser = "root"; $db = "cms";
Stefan Wienströer schrieb am 20.04.2011:
kannst du mal versuchen im PhpMyAdmin (oder Ähnlichem) auf die Datenbank cms mit den Zugangsdaten zuzugreifen?
lars schrieb am 20.04.2011:
ich komme mit demm xammp so dadrauf brauche da nichts einzugeben das ist es ja grade Suche die ganze zeit nach denn daten auf der xampp seite ansonsten muss ich das alles auf meinem webserver hoch laden editen und wieder und wieder und wieder Was ich mall eben probiere :-D
Stefan Wienströer schrieb am 20.04.2011:
dann würd ich mir das mal gerne über TeamViewer ansehen. Kontaktier mich mal auf Facebook, Skype, ICQ o.Ä. Adressen findest du auf der Startseite.
lars schrieb am 20.04.2011:
Habe fast alles jetzt gefunden nur noch ein fehler Juhu Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in F:xampphtdocsGamesproworldSystemsettings.php on line 6
lars schrieb am 20.04.2011:
und teamviwer besitze ich net zumindest nicht mehr
lars schrieb am 20.04.2011:
So habe dich jetzt in skype :-D
lars schrieb am 20.04.2011:
Was soll ich blos machen Mit dem fehler ???? Fehler: Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in F:xampphtdocsGamesproworldSystemsettings.php on line 6 Und hier ist die line 6 $row = mysql_fetch_row($res);
Claudio schrieb am 13.09.2011:
Ich würde empfehlen, dass bei der Datenbankabfrage PDOs verwendet werden, da sie einfach sicherer sind
BIene schrieb am 05.10.2011:
hi ich bin jetzt zum x-mal an dieser Stelle und komme nicht weiter. Denn ich bekomme immer wieder die gleiche fehlermeldung... mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /mnt/webd/c2/65/52559165/htdocs/test_server/cms/system/settings.php on line 6 Ich weiß nicht mehr weiter.
BIene schrieb am 05.10.2011:
...weiter ;) Wieso versteht meine Datenbank diese Zeile (...$row = mysql_fetch_row($res);...) nicht.
Stefan Wienströer schrieb am 05.10.2011:
lass dir mal das SQL-Statement ausgeben. Passt dort evtl. etwas nicht?
BIene schrieb am 05.10.2011:
wo kann ich das denn machen lassen? ;) Ich benutze das SQL von Strato.
Stefan Wienströer schrieb am 05.10.2011:
echo "SELECT value FROM ".$dbpraefix."settings WHERE property = '".$property."'" ;-)
BIene schrieb am 05.10.2011:
was meinst Du soll ich die zeile in setting.php einsetzten. Ich habe eben mal ein ... echo mysql_erro();... eingesetzt und folgende fehlermeldung bekommen... Table 'DB965668.cms_settingssettings' doesn't exist daraufhin habe ich habe ich das setting aus der zeile "SELECT value FROM ".$dbpraefix."settings WHERE .. gelöscht und wieder ein Fehlermeldung bekommen. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'title'' at line 2... Ich bin die ganze Zeit am Suchen nur finden kann ich nichts. Sorry, wenn ich deine Zeit hier im Anspruch nehme.
BIene schrieb am 06.10.2011:
Habe das problem gelöst. ;) Nur warum das jetzt mit einmal doch funktioniert erklärt sich dadurch nicht. Ich hatte einfach mal das "Value" durch "*" ersetzt und ich habe "titel" angeziegt bekommen. Nur ist das ja nicht die Lösung und so habe ich wieder "value" an die Stelle von "*" gesetzt und habe "Test CMS" bekommen. "Test CMS" ist die Antwort oder? Hat mich neben deinem ansonsten gutem Tutorial viel Zeit bei Lesen gekostet( meine Empfehlung... PHP 5.3 & MySQL 5.4 alles andere ist Mist oder umständlich geschrieben).
Cedric schrieb am 02.11.2011:
Hy, über die Freude dieses Tut. gefunden zuhaben, kommen auch schon die Sorgen. Ich erhalte mit echo getSetting("title"); keine Ausgabe. Die Verbindung zur DB steht eine SELECT * FROM Anweisung auf die DB wird ausgeführt. ????? was mache ich da falsch?????
Cedric schrieb am 02.11.2011:
Und schon hat sich meine Anfrage erledigt. Danke.
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project