• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP Array aus MySQL umschlüsseln

Status
Für weitere Antworten geschlossen.

curveball

Neues Mitglied
Hallo @ all !!

Also was PHP und MySQL angeht bin ich ein absoluter Neuling :-D !!

Drum tue ich mich gerade etwas schwer bei folgender Idee:

In meiner Datenbank habe ich eine Spalte "language" in der sich flags für einzelne Länder befinden ("ger," für Deutschland "fra" für Frankreich usw.). Wenn ich diese Spalte nun auslese, sieht das z.B. folgendermaßen aus "ger, fra, gbr,". Jetzt möchte ich diesen Flags praktisch Bilder zuweisen, dass "ger" umgeschlüsselt wird zu <img src="ger.jpg">.

Evtl. hat doch jemand von Euch eine Idee, wie ich dies an geschicktesten anstellen könnte ... habe schon meine vorhandene Literatur gewälz - nur hapert es bei mir momentan an der Transferleistung meine eigenen Vorstellungen umzusetzen. :wink:

Code:
<?php
    $aa = mysql_query("SELECT language FROM table_links WHERE 01_main LIKE 'auto'");
 
    while ($bb = mysql_fetch_assoc($aa))
     {
     echo $bb['language'] . "<br>";
     }
    ?>

Wäre Euch für Tipps an dieser Stelle echt dankbar !!

Gruß, curveball
 
Zuletzt bearbeitet:
Tja ... daran habe ich auch schon gedacht, nur ist es so, dass ich mehrfach Flags in der DB habe ... also quasi "ger, fra, gbr,"

Diese Idee würde nicht zum Erfolg führen:
PHP:
$img='<img src="' . $bb[language] . '.jpg">';

Es würde dann folgt aussehen:

Code:
<img src="ger, fra, gbr,.jpg">

Und nicht wirklich ein Bild anzeigen - geschweige denn drei Landesflaggen ;-)
 
Du musst es direkt in die mysql-schleife einfügen und aufgeben lassen, dann hast du 3 Flaggen
(Anstatt dem echo das jetzt drinsteht)
 
In jedem Datensatz stehen solche kommagetrennte Kürzel? Schlechte Idee. Dann solltest Du dein Datenbankmodell überdenken.

Hallo @ threadi !!

Ja ... in zu jedem Link steht in der Datenbank diese entsprechenden Kürzel in welchen Sprachen die jeweiligen entsprechenden Homepages verfasst sind !!

In welche Art und Weise sollte ich denn dann mein Datenbankmodell überdenken ??!!

Gruß, curveball
 
Also ich würde es so machen, und zwar direkt nach dem mysql_fetch_assoc:
PHP:
<?php
$sprache=explode(",",$bb['language']);
// Dort wo die Flaggen ausgegeben werden sollen
foreach($sprache as $flagge) {
   echo "<img src='".trim($flagge).".jpg' alt='Sprachauswahl: ".trim($flagge)."'>\n";
}
?>
Gruß thuemmy
 
Ja ... in zu jedem Link steht in der Datenbank diese entsprechenden Kürzel in welchen Sprachen die jeweiligen entsprechenden Homepages verfasst sind !!

In welche Art und Weise sollte ich denn dann mein Datenbankmodell überdenken ??!

Hier ein Beispiel:

Tabelle "Webseiten":
webseitenid int(11)
name varchar(50)

Tabelle "Sprachen":
languageid int(11)
sprachkürzel varchar(20)

Tabelle "Webseite_Sprachen" (dient als Verknüpfungstabelle zwischen Webseiten-Tabelle und Sprachtabelle und gibt die Sprachen an in denen eine Webseite verfasst ist):
languageid int(11)
webseitenid int(11)

Beispiel für den Abruf einer Liste der Webseiten (SQL 1) und der Ermittlung ihrer jeweiligen Sprachen (SQL 2):

SQL 1:
Code:
SELECT webseitenid, name FROM Webseiten

Die Ergebnisse dieses Statements müsstest Du als while-Schleife ausgeben. Innerhalb dieser Schleife ermittelst Du in einem weiteren Statement die Sprachen der einzelnen Seiten:

SQL 2:
Code:
SELECT s.sprachkürzel FROM Sprachen AS s, Webseite_Sprachen AS ws WHERE s.languageid = ws.languageid AND ws.webseitenid = '<? echo $db['webseitenid']; ?>'

Diese Liste kannst Du wiederum in einer while-Schleife ausgeben und erhälst so zu jeder Webseite alle Sprachkürzel.
 
@thuemmy:

Der Ansatz mit explode() ist garnicht schlecht !! ... hab da mal versucht etwas mit zu spielen:

PHP:
<?php
    $aa = mysql_query("SELECT language FROM table_links WHERE 01_main LIKE 'auto'");
 
      $bb = mysql_fetch_assoc($aa);
 
    $sprache=explode(",",$bb);
    // Dort wo die Flaggen ausgegeben werden sollen
    foreach($sprache as $flagge) 
     {
        echo "<img src='../images/flaggen/" . trim($flagge) . ".gif'>";
     }
    ?>

Besten Dank dafür !! ... das einzige Problem, welches ich jetzt noch habe, ist, dass mir beim Durchlaufen der foreach-Schleife für das letzte "," auch noch ein img angelegt wird :cry: !! ;)

Darüber hinaus liefert mir das obige Beispiel "Array" als Wert in dem img-Tag ... also es erscheinen noch keine Bilder.

PHP:
<?php
    $aa = mysql_query("SELECT language FROM table_links WHERE 01_main LIKE 'auto'");
 
       //$bb = mysql_fetch_assoc($aa);
 
     $bb = "ger, fra, gbr, ita,";
 
    $sprache=explode(",",$bb);
    // Dort wo die Flaggen ausgegeben werden sollen
    foreach($sprache as $flagge) 
     {
        echo "<img src='../images/flaggen/" . trim($flagge) . ".gif'>";
     }
    ?>

Gebe ich $bb eine feste Variable funktioniert das Sxcript bis auf das Problem mit dem letzten Komma ansich recht gut !!

Ich werde da noch etwas tüfteln ... aber evtl. hab ihr ja noch die eine oder andere gute Idee, was ich machen könnte !!

Besten Dank !! ... schon einmal im Voraus für Eure Inputs !!
 
Mit mysql_fetch_assoc erzeugst Du, wie der Name schon vermuten lässt, ein assoziatives Array, deswegen muss die explode-Funktion so aussehen:
PHP:
<?php
$sprache=explode(",",$bb['language']);
?>
Da habe ich Dein Post nicht ganz richtig gelesen, mir ist das abschließende Komma nicht aufgefallen. Aber auch für dieses kleine Problemchen gibt es eine Lösung
PHP:
<?php
foreach($sprache as $flagge) { // Prüfen, ob $flagge gefüllt ist
   if (trim($flagge)) {
      echo "<img src='".trim($flagge).".jpg' alt='Sprachauswahl: ".trim($flagge)."'>\n";
   }
}
?>
Gruß thuemmy
 
Hallo thuemmy,

also das mit dem assoziativen Array hatte ich auch schon durch $bb['language'] lösen wollen, klappt aber leider nicht !!

Die Idee mit if das letzte Komma zu beseitigen, klappt bei dem Test mit der festen Variable $bb = "ger, fra, gbr," super - besten Dank dafür !!

Aber mit der Übergabe des associativen Arrays verzweifel ich so langsam !! ... Mir wird dabei dann immer nur die erste Flagge angezeigt, also <img src="ger.gif"> nicht die weiteren Flaggen !!

PHP:
<?php
    $aa = mysql_query("SELECT language FROM table_links WHERE 01_main LIKE 'auto'");
 
       $bb = mysql_fetch_assoc($aa);
 
     //$bb = "ger, fra, gbr,";
 
    $sprache=explode(",",$bb['language']);
 
    foreach($sprache as $flagge) 
     {
        if (trim($flagge)) {
               echo "<img src='../images/flaggen/" . trim($flagge) . ".gif'>";
            }
     }
    ?>
 
Eine Sache ist mir aufgefallen. In Deinem ersten Posting hattest Du noch in der while-Schleife das assoziative Array geholt, nun plötzlich nicht mehr. Wenn kein Satz in der Tabelle gelesen wird, kann es zu unvorhergesehenen Ergebnissen führen.

Aber nun zu dem eigentlichen Problem.
PHP:
<?php
// Testausgabe vor dem explode
echo bb['language'] . "<br>\n";
// und dann das Ergebniss hier posten
?>
Gruß thuemmy
 
Natürlich ... Hallo ?! ;) ... jetzt klappt es auch !!

Hab bei dem ganzen Hin und Her zum Testen die Schleife nicht wieder hinzugefügt !!

@thuemmy - besten Dank für Deinen Input ... hast mir sehr geholfen !! ... aber mit Sicherheit werde ich hier und da noch einige Fragen zu PHP haben, weiterhinauch Bücher wälzen, mich hier und da aber wieder hier melden !! :grin::grin:

VIELEN DANK !! Gruß, curveball.

PHP:
<?php
    $aa = mysql_query("SELECT language FROM table_links WHERE 01_main LIKE 'auto'");
     
      while($bb = mysql_fetch_assoc($aa))
     {
    $sprache=explode(",",$bb['language']);
    
    foreach($sprache as $flagge) 
     {
        if (trim($flagge)) {
               echo "<img src='../images/flaggen/" . trim($flagge) . ".gif'>";
            }
     }
     
    }
    ?>
 
Bitteschön. Nur her mit Deinen Fragen. Wenn man merkt, dass jemand zuerst selber versucht eine Lösung zu finden, wird hier immer gern geholfen.

Gruß thuemmy
 
Status
Für weitere Antworten geschlossen.

Neueste Beiträge

Zurück
Oben