kostenloser Webspace werbefrei: lima-city


Variablen überprüfen und Ausgabewert ändern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. 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
  5. Nur dass bei mir auch noch der Default - also der unveränderte Name eingeplant ist :thefinger:

    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!
  6. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  7. e******a

    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
  8. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Meine Variante funktioniert jetzt auch... Hatte nur das [0] vergessen^^
  9. Das funktioniert zwar, ist aber nicht wirklich gut gelöst.
    Ich würde Dir meine Lösung empfehlen ;)
  10. e******a

    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
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tobiworlds schrieb:
    Ich würde Dir meine Lösung empfehlen ;)
    Allein deshalb schon, weil der Code einfach kürzer ist... ;-)

    Sonst gäbe es noch eine Variante:
    $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]);
    Ein sehr ähnlicher code wurde schon gepostet..... ;-)
    Das ist jedenfalls noch kürzer und schneller als die anderen Varianten.
  12. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    @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?
    Meinst du das so:
    <?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>
    Das wird so eingesetzt wie all die anderen hier geposteten Codes...
  14. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Nein ich meine den Bildtitel:

    echo '<img src="'.$ordner."/".$bilder[$key].'" alt="Champion" width="94" height="94" title="?????????">';


    Wie mache ich das?
  15. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Nein ich meine den Bildtitel:

    echo '<img src="'.$ordner."/".$bilder[$key].'" alt="Champion" width="94" height="94" title="?????????">';


    Wie mache ich das?
    Geht genau gleich...
    <?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\">");
    ?>
  16. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Also im Titel wird anstatt ü, ä und ö ein Ã... angezeigt...
    Und das steht auch so im HTML-Quelltext...
    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
    htmlentities
    verwenden, das codiert dann beispielsweise
    ä
    zu
    &auml;
    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 &auml; ? (wobei ich mir das codierte hier nicht vorstellen kann)

    Beitrag zuletzt geändert: 8.5.2012 19:24:28 von hackyourlife
  18. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!