2010-05-23 17 views
8
interruptor

Estoy tratando de obtener una variable en mi página para igualar el resultado de un cambio que tengo.PHP Obtener variable al mismo valor de

Este es el código:

$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; 
}; 

¿Cómo puedo obtener $ PAYMENT_METHOD para igualar el resultado de esta ????

Hasta ahora Recibo un error:

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

posible duplicado de [Problemas php con variables de codificación] (http://stackoverflow.com/questions/2875567/php-troubles-with-coding-variables) –

+0

@Col. Metralla: jajaja, la misma pregunta del mismo usuario% -) – zerkms

+0

No es exactamente lo mismo. Está pidiendo la asignación variable ahora, no eco. Pero es por eso que todos estos códigos son malos: simplemente lo copia/rocía sin comprender. –

Respuesta

5

Debe asignar el valor dentro la Cambiar:

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

no puede utilizar el switch constructo de esta manera. Debería asignar $payment_method dentro de las piezas case.

En su caso, dado que usted es echo ing de todos modos, puede simplemente eliminar $payment_method = y debería funcionar.

¿Cuál sería mucho, mucho más fácil, sin embargo, está poniendo todas las cosas en una matriz:

$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

que debe hacer:

$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

predeterminado: $ payment_method = "¡Por favor, especifique un método de pago!"; // con esta implementación será imposible obtener el método de pago válido o no. – zerkms

+1

@zerkms: derecho, fijo principal, por favor considere su voto abajo. Gracias –

+0

@Wed Logic: corregido ;-) por cierto, recibirá un aviso con este código, cuando $ cardtype es inválido – zerkms

8

lo hacen de esta manera:

$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

¡Usar matrices!

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

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

Para su aplicación, un arreglo asociativo será la mejor solución. No obstante, para responder a su pregunta , puede crear su propio interruptor/caja fuera de? operadores

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

. No debe utilizar el operador ternario de tal forma. La accesibilidad es primordial y en este caso un cambio es la mejor manera de hacerlo. – wlf

1

Si no desea cambiar su código (como si tiene interruptor de muy largo), puede utilizar Output Buffering.

<?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() comenzará búfer de salida (que también dejará de salida) y ob_get_clean() pondrá fin, volviendo todo lo que se hizo eco mientras ob ejecución.

Entonces, por ejemplo, si $cardtype es visa, $ payment_method será igual a VSA.

Espero que ayude.

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.

Cuestiones relacionadas