Variablen überprüfen und Ausgabewert ändern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
ausnahme
bild
boom
break
champion
code
empfehlen
fertigkeit
http
miss
ordner
problem
punkt
sonderzeichen
switch
tag
url
variante nehmen
-
Hallo!
Ich habe ein kleines tag/problem">Problem... Schaut euch mal bitte diese Seite von mir an. Es geht darum, dass man einen zufälligen Guide für League of Legends bekommt. Die Bilder werden alle zufällig aus einem Ordner geholt. Der Champion, dass ist das Bild links oben, hat 3 Fertigkeiten. Der Name des Champions wird in der Variable $championname[0] gespeichert. Die Fertigkeiten befinden sich in dem Ordner images/fertigkeiten/'.$championname[0]. Also ist der Zielordner der Ordner des Champions, der ausgewählt wurde. Dann wird noch der Name des Champions also die Variable $championname[0] unten als Text ausgegeben. Jetzt kommt mein Problem. Da manche Champion ein Leerzeichen oder ein ' im Namen haben muss ich diese umbenennen, damit das mit den Pfaden klappt. Z.B. Lee Sin muss ich also in lee_sin ändern. Das sieht dann aber wiederum doof bei der Ausgabe des Namens aus. Ich hatte eine Idee, wie ich das Problem evtl. lösen kann. Ich wollte eine If-Schleife machen, wo alle Champions mit dieser Art von Name den richtigen Namen kriegen sollen:
if($championname == "cho_gath"){ echo "Cho'Gath"; } elseif($championname == "dr_mundo"){ echo "Dr. Mundo"; } elseif($championname == "jarvan_iv"){ echo "Jarvan IV"; } elseif($championname == "lee_sin"){ echo "Lee Sin"; } elseif($championname == "master_yi"){ echo "Master Yi"; } elseif($championname == "miss_fortune"){ echo "Miss Fortune"; } elseif($championname == "twisted_fate"){ echo "Twisted Fate"; } elseif($championname == "xin_zhao"){ echo "Xin Zhao"; } elseif($championname == "kog_maw"){ echo "Kog'Maw"; } else { echo "$championname[0]"; }
Das klappt allerdings nicht. Kann mir jemand helfen?? Würde mich freuen.
Liebe Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du solltest vielleicht eher auf switch/case umsteigen, um Dein Vorhaben zu realisieren:
switch ($championname[0]) { case "cho_gath": echo "Cho'Gath"; break; case "dr_mundo": echo "Dr. Mundo"; break; case "jarvan_iv": echo "Jarvan IV"; break; case "lee_sin": echo "Lee Sin"; break; case "master_yi": echo "Master Yi"; break; case "miss_fortune": echo "Miss Fortune"; break; case "twisted_fate": echo "Twisted Fate"; break; case "xin_zhao": echo "Xin Zhao"; break; case "kog_maw": echo "Kog Maw"; break; default: echo $championname[0]; }
Außerdem beachte man Deine Zeile 1!
Dort überprüfst Du nicht $championname[0], sondern nur $championname...
Wobei mir nicht klar ist, weshalb Du den Namen in einem Array speicherst. -
Da gibt es vieles anzumerken.
Zum ersten, schreibst du oben von $championname[0] (Array) und unten von $championname (Variable).
Zum zweiten solltest du in solchen Fällen die switch-anweisung verwenden.<?php switch($championname[0]){ case 'dr_mundo': $championname = "Dr. Mundo"; break; case 'jarvan_iv': $championname = "Jarvan IV"; break; case 'lee_sin': $championname = "Lee Sin"; break; case 'master_yi': $championname = "Master Yi"; break // ... } ?>
Der nächste Schritt wäre, feste Regeln einzuführen, welche dann per RegEx ausgeführt werden.
EDIT: Ups, da kam mir wer zuvor. :S
Beitrag zuletzt geändert: 7.5.2012 17:34:14 von kelserific -
Nur dass bei mir auch noch der Default - also der unveränderte Name eingeplant ist
Aber mir ist auch noch eingefallen, dass es wahrscheinlich Sinn machen würde, die Namen besser zu "kodieren", damit sie dann auch automatisch "dekodiert" werden können.
So wäre es z.B. möglich, alle Leerzeichen durch den Unterstrich, alle Hochkommata durch ein anderes Sonderzeichen ersetzt und diese dann automatisch rausfiltert bei der Ausgabe.
Dadurch würde dann diese lange Switch-Liste entfallen und müsste auch nicht ständig erweitert werden! -
Danke :) Ich zerlege den kompletten Dateinamen in 3 Teile. Name, Punkt und Dateiendung:) Name ist also $championname[0], der Punkt ist $championname[1] und die Dateiendung ist $championname[2] .
Wie würde denn das mit dem Kodieren gehen? Könnte man so auch jeden Anfangsbuchstaben groß machen?
Beitrag zuletzt geändert: 7.5.2012 18:01:56 von ultimate-bravery -
Das Kodieren wäre auch wieder etwas ungeschickt, wenn neben dem Leerzeichen und Apostroph noch mehr Sonderzeichen hinzukommen. Vorallem auch der Dateinamenübersicht wegen.
Ich würde das kombiniert mit einem Ausnahmearray lösen.
Also etwa in der folgenden Art:
$ausnahmen = array( 'dr_mundo' => 'Dr. Mundo', 'cho_gath' => 'Cho'gath', ); if ($ausnahmen[$championname[0]) { echo $ausnahmen[$championname[0]; } else { echo ucwords(str_replace('_', ' ', $championname[0])); }
Beitrag zuletzt geändert: 7.5.2012 18:06:10 von euphoria -
Meine Variante funktioniert jetzt auch... Hatte nur das [0] vergessen^^
-
Das funktioniert zwar, ist aber nicht wirklich gut gelöst.
Ich würde Dir meine Lösung empfehlen ;) -
Was ist daran denn nicht gut gelöst?
Du meinst es ist effektiver das ganze in der folgenden Art zu lösen?
$char = str_replace('_', ' ', $char); $char = str_replace('$', '\'', $char), $char = str_replace(';', '"', $char);
Dann gäb es für spezielle Helden dann lustige Dateinamen?
John "Boom" Blup -> John_;Boom;_Blup
Blup'map -> Blup$map
Beitrag zuletzt geändert: 7.5.2012 18:37:47 von euphoria -
tobiworlds schrieb:
Allein deshalb schon, weil der Code einfach kürzer ist...
Ich würde Dir meine Lösung empfehlen ;)
Sonst gäbe es noch eine Variante:
Ein sehr ähnlicher code wurde schon gepostet.....$names = array( 'cho_gath' => "Cho'Gath", 'dr_mundo' => 'Dr. Mundo', 'jarvan_iv' => 'Jarvan IV', 'lee_sin' => 'Lee Sin', 'master_yi' => 'Master Yi', 'miss_fortune' => 'Miss Fortune', 'twisted_fate' => 'Twisted Fate', 'xin_zhao' => 'Xin Zhao', 'kog_maw' => 'Kog Maw' ); if(isset($names[$championname[0]])) echo($names[$championname[0]]); else echo($championname[0]);
Das ist jedenfalls noch kürzer und schneller als die anderen Varianten. -
Vielen Dank an alle! Funktioniert jetzt...
@hackyourlife: Wenn ich deine Variante nehmen würde, wie könnte ich dann den Titel des Zufallsbildes ändern? Also um den Namen des Bildes auszugeben benutzt du ja folgendes:
if(isset($names[$championname[0]])) echo($names[$championname[0]]); else echo($championname[0]);
Aber diesen Code kann ich ja nicht in den title Tag schreiben... Oder doch?? Wenn ja wie? Oder gibt es noch eine andere Möglichkeit?
Also ich will, dass der Titel auch z.B. Cho'Gath heißt anstatt cho_gath
Liebe Grüße!
Beitrag zuletzt geändert: 8.5.2012 16:22:49 von ultimate-bravery -
ultimate-bravery schrieb:
Meinst du das so:
@hackyourlife: Wenn ich deine Variante nehmen würde, wie könnte ich dann den Titel des Zufallsbildes ändern? Also um den Namen des Bildes auszugeben benutzt du ja folgendes:
if(isset($names[$championname[0]])) echo($names[$championname[0]]); else echo($championname[0]);
Aber diesen Code kann ich ja nicht in den title Tag schreiben... Oder doch?? Wenn ja wie? Oder gibt es noch eine andere Möglichkeit?
Das wird so eingesetzt wie all die anderen hier geposteten Codes...<?php $names = array( 'cho_gath' => "Cho'Gath", 'dr_mundo' => 'Dr. Mundo', 'jarvan_iv' => 'Jarvan IV', 'lee_sin' => 'Lee Sin', 'master_yi' => 'Master Yi', 'miss_fortune' => 'Miss Fortune', 'twisted_fate' => 'Twisted Fate', 'xin_zhao' => 'Xin Zhao', 'kog_maw' => 'Kog Maw' ); ?><html> <head> <title><?php if(isset($names[$championname[0]])) echo(htmlentities($names[$championname[0]])); else echo(htmlentities($championname[0])); ?></title> </head> <body>Seite mit Titel</body> </html>
-
Nein ich meine den Bildtitel:
echo '<img src="'.$ordner."/".$bilder[$key].'" alt="Champion" width="94" height="94" title="?????????">';
Wie mache ich das? -
ultimate-bravery schrieb:
Geht genau gleich...
Nein ich meine den Bildtitel:
echo '<img src="'.$ordner."/".$bilder[$key].'" alt="Champion" width="94" height="94" title="?????????">';
Wie mache ich das?<?php $names = array( 'cho_gath' => "Cho'Gath", 'dr_mundo' => 'Dr. Mundo', 'jarvan_iv' => 'Jarvan IV', 'lee_sin' => 'Lee Sin', 'master_yi' => 'Master Yi', 'miss_fortune' => 'Miss Fortune', 'twisted_fate' => 'Twisted Fate', 'xin_zhao' => 'Xin Zhao', 'kog_maw' => 'Kog Maw' ); if(isset($names[$championname[0]])) $title = htmlentities($names[$championname[0]]); else $title = htmlentities($championname[0]); echo("<img src=\"$ordner/$bilder[$key]\" alt=\"Champion\" width=\"94\" height=\"94\" title=\"$title\">"); ?>
-
Klappt noch nicht ganz....
Also im Titel wird anstatt ü, ä und ö ein Ã... angezeigt...
Kann ich das auch irgendwie beheben oder bleibt das so?
Beitrag zuletzt geändert: 8.5.2012 18:17:00 von ultimate-bravery -
ultimate-bravery schrieb:
Und das steht auch so im HTML-Quelltext...
Also im Titel wird anstatt ü, ä und ö ein Ã... angezeigt...
Das liegt an der Seitencodierung... wenn du alles in UTF-8 speicherst und per HTTP-Header das dem Client auch mitteilst solltest du das Problem beheben können.
Ansonsten müsstest du
verwenden, das codiert dann beispielsweisehtmlentities
zuä
was dann wieder vom Zeichensatz unabhängig ist.ä
Schau nochmal im HTML-Quellcode der Seite (im Browser)... stehen dort die falschen Zeichen oder nur sowas wie ä ? (wobei ich mir das codierte hier nicht vorstellen kann)
Beitrag zuletzt geändert: 8.5.2012 19:24:28 von hackyourlife -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage