Как я могу использовать if / then / else в этом контексте? - PullRequest
2 голосов
/ 01 марта 2012

У меня проблема с использованием операторов if/then/else.

Вот мой контекст:

$email = trim($_POST['email']);
$name = trim($_POST['name']);
$lname = trim($_POST['lname']);
$order = trim($_POST['order']);
$tel = trim($_POST['tel']);
$comments = trim($_POST['comments']);
$op ="0000-0000-0000";
$om ="mail@mail.com";
$bronze = "180 EGP/yr";
$silver ="280 EGP/yr";
$gold ="350 EGP/yr";
$plat ="420 EGP/yr";
$free ="EGP/yr";


if ($order == 'bronze') {
    echo "Please notice that your order will cost $bronze";
}

Теперь, как мне сделать это снова с $silver?И так далее, как для silver, gold, plat и free или даже если я хочу добавить больше.

Ответы [ 8 ]

7 голосов
/ 01 марта 2012

Вы можете использовать структуру switch ... case.

Но если вам приходится делать довольно простые вещи, вы можете даже много рефакторинг, используя ассоциативные массивы .

Пример:

$minerals = array(
  'gold' => array(
    'color' => 'yellow',
    'cost' => 350
  ),
  'silver' => array(
    'color' => 'gray',
    'cost' => 280
  )
);

// check order type
if (!isset($minerals[$order]))
  die("Unsupported mineral type ".$order.".");

echo "Please notice that your order will cost "
  . $minerals[$order]['cost'] . " EGP/yr.";
2 голосов
/ 01 марта 2012

Думаю, вам стоит взглянуть на оператор switch , это позволит вам выполнять различные действия в зависимости от значения $order.

1 голос
/ 01 марта 2012

Оператор переключения действительно лучше подходит для этой ситуации:

<?php
$email = trim($_POST['email']);
$name = trim($_POST['name']);
$lname = trim($_POST['lname']);
$order = trim($_POST['order']);
$tel = trim($_POST['tel']);
$comments = trim($_POST['comments']);
$op ="0000-0000-0000";
$om ="mail@mail.com";
$bronze = "180 EGP/yr";
$silver ="280 EGP/yr";
$gold ="350 EGP/yr";
$plat ="420 EGP/yr";
$free ="EGP/yr";


switch ($order) {
  case  'bronze':
    echo "Please notice that your order will cost $bronze";
    break;
  case  'silver':
    echo "Please notice that your order will cost $silver";
    break;
  case  'gold':
    echo "Please notice that your order will cost $gold";
    break;
  case  'plat':
    echo "Please notice that your order will cost $plat";
    break;
  case  'free':
    echo "Please notice that your order will cost $free";
    break;
  default:
    echo "Please choose a service package.";
    break;
}
1 голос
/ 01 марта 2012

Очень уродливый способ сделать это было бы так:

echo 'Please notice that your order will cost '.$$order;

Однако я не рекомендую вам делать это таким образом, поскольку это может привести к множеству ошибок и угроз безопасности.

Я бы сделал это с массивом:

$plan = array(
    'bronze' => '180 EGP/yr',
    'silver' => '280 EGP/yr',
    'gold'   => '350 EGP/yr',
    'plat'   => '420 EGP/yr',
    'free'   => 'EGP/yr'
);

if(!array_has_key($order, $plan))){
    die('unknown plan');
}else{
    echo 'Please notice that your order will cost '.$plan[$order];
}

Таким образом, очень легко добавлять новые планы, даже динамически или из базы данных.

1 голос
/ 01 марта 2012
<?php

if($order == "bronze")
{
   echo "Please notice that your order will cost $bronze";
}
else if($order == "silver")
{
   echo "Please notice that your order will cost $silver";
}
...
?>

Самый простой поиск в Google принес бы вам это .

0 голосов
/ 01 марта 2012

Надеюсь, это поможет

<?php
$key=0;
switch ($order) {
    case "bronze":
         $key=$bronze; 
          break;
    case "silver":
          $key=$silver;
           break;
    case "gold":
          $key=$gold;
          break;
    default:
         $key=1;
          break;
}

echo"Please notice your order will cost $key amount";
?>
0 голосов
/ 01 марта 2012

Ты это имел ввиду?

if ( $gold == 'something' ) {
    echo "Please notice that your order will cost $bronze";
}

if ( $silver == 'something' ) {
    echo "Please notice that your order will cost $bronze";
}
0 голосов
/ 01 марта 2012

Вы можете сделать это, используя переменную :

if(!isset($$order)) {
    die("Invalid order type");
}

$cost = $$order;
echo "Please notice that your order will cost $cost";

См. Это в действии .

Это будет работать правильно для любого количества типов заказов, без необходимости повторного их указания, а также обнаружит недопустимый тип.

ПРЕДУПРЕЖДЕНИЕ: Однако с этим связана проблема безопасностиподход, как правильно указывает Другой Кодекс;пользователь может использовать это, создав специальные значения для $order, которые позволят вашему скрипту раскрыть содержимое любой переменной, что может быть довольно существенной утечкой информации.

Предпочтительно: theто же самое может быть достигнуто более стандартным способом, если вы используете массив для типов заказов, и у этого решения нет проблем безопасности:

$types = array(
    'bronze' => '180 EGP/yr',
    'silver' => '280 EGP/yr',
    // etc
);

if(!isset($types[$order])) {
    die("Invalid order type");
}

echo "The cost will be ".$types[$order];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...