2010-05-23 10 views
8

Ich versuche, eine Variable auf meiner Seite zu erhalten, um das Ergebnis eines Schalters, den ich habe.PHP Get Variable auf den gleichen Wert des Schalters

Dies ist der Code:

$payment_method = switch ($cardtype) { 
case "visa" : echo "VSA"; break; 
case "mastercard" : echo "MSC"; break; 
case "maestro" : echo "MAE"; break; 
case "amex" : echo "AMX" ; break; 
default : echo "Please specify a payment method!"; break; 
}; 

Wie kann ich $ PAYMENT_METHOD bekommen das Ergebnis dieser gleichen ????

Bisher erhielt ich einen Fehler:

Parse error: syntax error, unexpected T_SWITCH in /var/www/account/credits/moneybookers/process.php on line 65 
+0

möglich Duplikat [php Probleme mit Variablen Kodierung] (http://stackoverflow.com/questions/2875567/php-troubles-with-coding-variables) –

+0

@col. Schrapnell: lol, die gleiche Frage vom selben Benutzer% -) – zerkms

+0

Nicht ganz das Gleiche. Er fragt jetzt nach der variablen Zuweisung, nicht nach echo. Aber das ist der Grund, warum all diese Codes schlecht sind: Er kopiert es einfach, ohne es zu verstehen. –

Antwort

5

Sie den Wert zuweisen soll innerhalb der Schalter:

switch ($cardtype) { 
    case "visa": 
     $payment_method = "VSA"; 
    break; 
    case "mastercard": 
     $payment_method = "MSC"; 
    break; 
    case "maestro": 
     $payment_method = "MAE"; 
    break; 
    case "amex": 
     $payment_method = "AMX"; 
    break; 
    default: 
     echo "Please specify a payment method!"; 
    break; 
}; 
2

Sie können nicht das switch Konstrukt diese Art und Weise nutzen. Sie müssten $payment_method innerhalb der case Teile zuweisen.

In Ihrem Fall, da Sie sowieso echo ing sind, können Sie einfach $payment_method = entfernen und es sollte funktionieren.

Was wäre viel, viel einfacher, aber das ganze Zeug in ein Array setzt:

$payment_methods = array(
    "visa" => "VSA", 
    "mastercard" => "MSC", 
    "maestro" => "MAE", 
    "amex" => "AMX" 
); 

if (!array_key_exists($cardtype, $payment_methods)) 
echo "Please specify a payment method!"; 
else 
echo "Your method: ".$payment_methods[$cardtype]; 
2

Sie tun sollten:

$payment_method = ''; 

switch ($cardtype) { 
    case "visa" : $payment_method = "VSA"; break; 
    case "mastercard" : $payment_method = "MSC"; break; 
    case "maestro" : $payment_method = "MAE"; break; 
    case "amex" : $payment_method = "AMX" ; break; 
} 

if (strlen($payment_method)) 
{ 
    echo $payment_method; 
} 
else 
{ 
    echo "Please specify a payment method!"; 
} 
+0

Standard: $ payment_method = "Bitte eine Zahlungsmethode angeben!"; // Mit dieser Implementierung ist es unmöglich zu bekommen, ob die Zahlungsmethode gültig ist oder nicht. – zerkms

+1

@zerkms: rechts, feste Haupt, bitte beachten Sie Ihre Down-Abstimmung. Danke –

+0

@Wed Logic: behoben ;-) btw, er wird mit diesem Code benachrichtigt, wenn $ cardtype ungültig ist – zerkms

8

tun auf diese Weise:

$types = array('visa' => 'VSA', 'mastercard' => 'MSC', 'maestro' => 'MAE', 'amex' => 'AMX'); 
if (isset($types[$cardtype])) { 
    $payment_method = $types[$cardtype]; 
} else { 
    echo 'Please specify a payment method!'; 
} 
5

Arrays verwenden!

$types = array("visa"  => "VSA", 
       "mastercard" => "MSC", 
       "maestro" => "MAE", 
       "amex"  => "AMX"); 

$type = @$types[$cardtype] or echo "Please specify a payment method!"; 
2

Für Ihre Anwendung, ein assoziatives Array wird die beste Lösung sein. Um Ihre Frage jedoch zu beantworten, können Sie Ihren eigenen Schalter/Fall aus bauen?

Betreiber
var card = 'amex'; //however you retrieve that value 

var method = card == 'visa' ? 'VSA' : card == 'mastercard' ? 'MSC' : card == 'maestro' ? 'MAE' : card == 'amex' : 'AMX' : null; //default value is null 

// store error msgs elsewhere in the code, to ease translation/alteration 
var errs = { 
'ENG', {'Please specify a payment method', '...', '...', '...'}, 
'ESP', {'Favor, indique la forma de pago', '...', '...', '...'}, 
'DEU', {'Bitte geben Sie eine Zahlungsmethode', '...','...','...'} 
} 

// alert the appropriate error message, in the current language 

var currentLang = 0; //however you set that value 
if(!method) alert(errs[currentLang][0]); 
+1

solltest du den ternary operator nicht so verwenden. Lesbarkeit ist oberstes Gebot und in diesem Fall ist ein Switch der beste Weg zu gehen. – wlf

1

Wenn Sie wollen Ihren Code nicht ändern (wie wenn Sie sehr lange Schalter haben), können Sie Output Buffering verwenden.

<?php 
ob_start(); 
switch ($cardtype) { 
case "visa" : echo "VSA"; break; 
case "mastercard" : echo "MSC"; break; 
case "maestro" : echo "MAE"; break; 
case "amex" : echo "AMX" ; break; 
default : echo "Please specify a payment method!"; break; 
}; 
$payment_method = ob_get_clean(); 
?> 

ob_start() Ausgabepufferung starten (die auch Ausgangs stoppt) und ob_get_clean() wird es enden, Rückkehr alles hallte während ob Laufen.

Wenn also zum Beispiel $cardtype Visum ist, entspricht $ payment_method VSA.

Ich hoffe, es hilft.

Note: This might not be a good solution, if possible, please, use solution from any other answer. Pekka's answer is really good one, try his.