Hallo,
wie kann ich eine PHP Variable aus einer MySQL Tabelle abrufen, so, dass ich diese Variable weiterverwenden kann ---
--- anders gesagt:
ich habe eine Variablenbezeichnung ($irgendwas) in MySQL gespeichert. Diese Variable ist vorher im PHP Script definiert. Nun möchte ich nur noch innerhalb der while schleife nicht irgendeine andere Variable ausgeben, sondern die, die in der MySQL Tabelle steht.
Mein Stand zu Zeit:
Ich rufe $irgendwas ab und $irgendwas wird auf der seite angezeigt :-( nicht wirklich meine vorstellung...Vielen Dank schonmal für eure Hilfe ;-)
Bimon
Kannst du mal ein detaillierteres Beispiel dazu geben?
Sehe ich das richtig?
Du speicherst in der Datenbank für den einen z.B. User $irgendwas ab und für den zweiten $irgendwas2. Dann liest du die Datenbank aus und willst, dass der Inhalt der jeweiligen Variable angezeigt wird.
Hast du es schon mit eval() versucht?
Etwa so:
PHP-Code:
$ausgabe = eval($sql_daten);
Da kommt ein Fehler:
Zitat:Parse error: syntax error, unexpected $end in /usr/export/www/hosting/revolution2050/includes/navleftv1.php(24) : eval()'d code on line 1
Beispiel:
Das MyBB hat ja diese Sprachdateien (*.lang.php). Diese Sprachverzeichnisse erweiter ich für die Seite, die da noch umzu ist. Also in der z.B. navigation.php.lang.php steht dann:
PHP-Code:
$l['übersicht'] = "Übersicht";
$l['bauen'] = "Bauen";
//bzw.
$l['übersicht'] = "Overview";
$l['bauen'] = "Build";
Natürlich steht da noch mehr drinn...
So nun habe ich eine MySQL Tabelle für die Navigation erstellt, damit man die einfach bearbeiten kann. In dieser Tabelle befindet sich der link, der name und die sortierung. Als name für "Bauen" habe ich jetzt z.B. $lang->bauen eingesetzt. Nun wird "$lang->bauen" aber ja als String abgerufen und dementsprechend auch angezeigt. Ich möchte aber, dass der Inhalt der Variablen $lang->bauen angezeigt wird, also entweder Bauen oder Build.
Gibt es da eine (möglichst einfache) Möglichkeit?
Bimon
Ich sollte solche Sachen testen bevor ich das schreib... naja. Kleiner Denkfehler. So sollte es funktionieren:
Also ich hab eine Tabelle test angelegt mit dem Feld eintrag. Dort habe ich $test_eintrag reingeschrieben.
PHP-Code:
$test_eintrag = "Lalala";
$query = $db->query("SELECT eintrag FROM test");
$mysqldaten = $db->fetch_array($query);
eval("\$ausgabe = ".$mysqldaten['eintrag'].";");
echo $ausgabe;
Ausgegeben wird:
Zitat:Lalala
Ich hoffe so war es gemeint.
Allerdings:
Das ist sehr umständlich wie du das gelöst hast...
In der Datei fragst du erst die Datenbank ab welche Variable er nehmen soll. Warum schreibst du die Variablen nicht gleich in die Datei?
Noch so als Tip:
Ich würde keine Umlaute bei Bezeichnungen verwenden und im HTML-Code sollten Umlaute als Entitäten geschrieben werden.
Dein Beispiel könnte dann so aussehen:
PHP-Code:
$l['uebersicht'] = "Übersicht";
$l['bauen'] = "Bauen";
//bzw.
$l['uebersicht'] = "Overview";
$l['bauen'] = "Build";
ok danke
Zitat:Allerdings:
Das ist sehr umständlich wie du das gelöst hast...
In der Datei fragst du erst die Datenbank ab welche Variable er nehmen soll. Warum schreibst du die Variablen nicht gleich in die Datei?
Da hast du mich gleub ich flasch verstanden. Ich beutze MySQL (mit PHPmyAdmin) dazu die Navigation schnell und einfach zu bearbeiten.
Das mit eval... probier ich leich mal aus.
Danke erstmal!!!
//Edit:
Ich habs jetzt probiert...geht nicht! Kann es daran liegen, dass in der Variblen dieses -> drinn ist, also z.B. $lang->constructions ?? *-_-*
//Edit:
Oder kann man garnischt auf einer seite mehrere $lang->loads("...") machen? Ich brauch aber unbedingt welche!!! kann ich das danach (wenns daran überhaupt liegt) dasw nicht irgendwie unsetten oder sowas?? :question:
Du kannst in einer Datei mehrere $lang->load('...'); verwenden.
Es funktioniert auch mit den Variablen die ein -> enthalten (ich hab es auch mit einer Language-Variablen getestet).
Kannst du hier den entsprechenden Absatz aus deiner Datei posten? Und auch was genau du eingetragen hast, in welche Tabelle und in welches Feld. Und was nicht funktioniert. Kommt eine Fehlermeldung?
So wie du es mir gesagt hast kommt keine Fehlermeldung, es wird nur nichts angezeigt.
Mein Code (Variablennamen bitte nicht so sehr beachten ;-)):
PHP-Code:
$fragesalles1234 = mysql_query("SELECT name, link FROM navleftv1 ORDER BY sort ASC");
while($raudiere1234 = mysql_fetch_array($fragesalles1234))
{
$linkson = $v['httphost'].$raudiere1234['link'];
$nameson1 = $raudiere1234['name'];
eval("\$nameson2 = \"$nameson1\";");
eval("\$nameson = \"$nameson2\";");
echo("
<strong><big>·</big></strong>
<a class=\"box\" href=\"".$linkson."\">".$nameson." ".$nameson2."</a>
<br />");
}
Reicht das?
In der MySQL Tabelle steht...ich geb dir mal ein Export Code!
Code:
--
-- Tabellenstruktur für Tabelle `navleftv1`
--
CREATE TABLE `navleftv1` (
`id` int(250) NOT NULL auto_increment,
`name` varchar(250) NOT NULL default 'unknown',
`link` varchar(250) NOT NULL default 'pages/404.php',
`sort` int(250) NOT NULL default '2147483647',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=13 AUTO_INCREMENT=13 ;
--
-- Daten für Tabelle `navleftv1`
--
INSERT INTO `navleftv1` VALUES (9, '\\$lang->constructions', 'pages/game/constructions.php', 10);
INSERT INTO `navleftv1` VALUES (10, '\\$lang->angriff', 'pages/game/angriff.php', 30);
INSERT INTO `navleftv1` VALUES (12, '\\$lang->verteidigung', 'pages/game/verteidigung.php', 40);
^^Bitte keine Vorträge, dass ein normaler int keine 250 stellen haben kann ;-)
Den Backslash vor den language Variablen hatte ich nun für meine Wahrlosen testzwecke reingesetzt, aber ich sehe gerade, dass da 2 backslashs sind. Der eine wurde garnicht im normalen Edit angezeigt (?) liegst daran?
^^Das 2. eval() war auch nur so ein Test ;-)
Naja wenn du noch fragen zum code hast (nicht zur sinnlosigkeit ;-)) sag(t) bescheid!
Die Variablen in der Datenbank
ohne Backslash speichern (\)!
Versuch es zum Test mal bitte so. Dann siehst du, ob es ein Problem mit den Sprachdateien ist oder mit der Abfrage:
PHP-Code:
$lang->constructions = "Bau Test";
$lang->angriff = "Angriff Test";
$lang->verteidigung = "Vert.Test";
$fragesalles1234 = mysql_query("SELECT name, link FROM navleftv1 ORDER BY sort ASC");
while($raudiere1234 = mysql_fetch_array($fragesalles1234))
{
$linkson = $v['httphost'].$raudiere1234['link'];
eval("\$nameson = ".$raudiere1234['name'].";");
echo("
<strong><big>·</big></strong>
<a href=\"".$linkson."\" class=\"box\">Test: ".$nameson."</a>
<br />");
}
Jetzt sollte auf jeden Fall eine Ausgabe erzeugt werden.
Wenn dann dransteht:
Zitat:Test: Bau Test
Test: Angriff Test
Test: Vert.Test
Hast du ein Problem beim Einbinden der Sprachdateien.
Wenn diese Ausgabe erzeugt wird:
Zitat:Test:
Test:
Test:
häng doch bitte an deinen nächsten Post die ganze Datei an.
Backslash hatte ich ursprünglich auch nicht drinn.
...Funktioniert so weit ich überprüf nommal meine $lang->load() s...
Ich habe das per include gemacht...die Navigation steht in einer extra datei.
über dem include habe ich den load geschrieben, aber wenn das dann geincludet wird steht das da ja so:
Code:
$lang->load()
?>
HTML...
<?php
die Abfrage + verwendung des loads bzw. Inhalts...
...
Liegst daran, dass da zwischen kein html sein darf?
....Also wenn ich das direkt in den Navi code schreibe funktionierts...mach ich das mal so danke dir!!!