2011-01-13 4 views
-2

Это часть кода я работаю над:PHP множественным если ... ELSEIF заявление

if($access == 2) 

{ 

    if ($permre['pages'] == indi_add)// 
     {echo "show page";} 

    if ($permre['pages'] == mass_add)// 
     {echo "show page";} 

    if ($permre['pages'] == export)// 
     {echo "show page";} 

} 

elseif ($access == 0) 

{ 

    if ($permre['pages'] == indi_add)// 
     {echo "dont show page";} 

    if ($permre['pages'] == mass_add)// 
     {echo "dont show page";} 

    if ($permre['pages'] == export)// 
     {echo "dont show page";}** 

} 

Я создаю страницу, где при выполнении условия, такие как $access == 2 выполняется оно имеет несколько значений. Некоторые значения включают в себя: indi_add, mass_add и export. Затем я хочу использовать эти значения для создания 3 условий, как показано выше.

Однако при выполнении этого кода выполняется только первый оператор if, а остальные нет. Есть ли место, где я могу сделать php проверять операторы 3 if сразу и выполнить запрошенное действие?

Добавление, я не могу использовать if(condition1 && condition2 && condition3), так как существует вероятность того, что одно из условий может не выполняться.

Итак, как мне выполнить выполнение всех утверждений, даже если первое утверждение является истинным или ложным? Я фактически получаю такие значения, как indi_add, mass_add и экспорт из базы данных phpmyadmin. Запрос выглядит примерно так:

«выберите страницы из доступа, где доступ = 2».

Из-за вышеприведенного запроса я получаю значения страниц, упомянутые выше. Эхо-страница - всего лишь пример. В моем фактическом кодировании, если утверждение для access == 2, если оно истинно, результатом является то, что определенная страница будет активирована. Я пытаюсь сделать что-то вроде контроля доступа. Кроме того, за сценой уровень доступа для каждой страницы может быть изменен администратором. Поэтому указанный выше запрос может приносить разные результаты при каждом изменении уровня доступа. Я надеюсь найти способ, которым я могу выполнять условия if, когда они верны.

+0

Вы используете отредактированный отступ или предыдущий, где выписываются высказывания эха? – Dave

+0

srry для того, чтобы быть noob, но что вы имеете в виду под отредактированным отступом ... – neelima

+0

[Заменить условный полиморфизм] (http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism) – Gordon

ответ

3

Вы говорите, что «имеет несколько значений». У чего имеется? потому что этот блок:

if ($permre['pages'] == indi_add)// {echo "show page";} 
if ($permre['pages'] == mass_add)// {echo "show page";} 
if ($permre['pages'] == export)// {echo "show page";} 

Будет иметь только 1 удар. Var. $permre['pages'] может иметь только одно значение. Другое значение каждый раз, когда вы запускаете скрипт, true, но за запуск он не может иметь «indi_add» AND «mass_add» одновременно.

Также: wat is indi_add. Не должно быть "indi_add", если это строка или $indi_add, если это переменная?

+0

indi_add, mass_add и export are значения, которые я получу, когда я запрошу его из базы данных mysql под полями. – neelima

+0

Но если они являются значениями (строки?), Вы хотите добавить к ним '' '! Ваше сравнение будет бесполезным в противном случае. Кроме того, один var (ваш' $ permre ['page'] ') может по-прежнему иметь только 1 значение. Таким образом, вы каждый раз будете запускать 1 из ваших ifs. – Nanne

+0

, так что это означает, что я не могу запустить все значения? – neelima

2

Я хотел бы использовать переключатель вместо всех, если это statments

switch ($i) { 
    case 0: 
     echo "i equals 0"; 
     break; 
    case 1: 
     echo "i equals 1"; 
     break; 
    case 2: 
     echo "i equals 2"; 
     break; 
} 
0

я бы что-то вроде этого:

switch($access) { 
    case 2: 
    switch($premre['pages']) { 
     case "indi_add": 
     case "mass_add": 
     case "export": 
     echo "show page"; 
     break; 
    } 
    break; 
    default: 
     echo "not show page"; 
     break; 
} 

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

Edit: например, с добавлением кода в каждом конкретном случае по требованию OP

switch($access) { 
    case 2: 
    switch($premre['pages']) { 
     case "indi_add": 
     echo "something happens here when indi_add is run"; 
     doSomething(); //Runs a function for indi_add 
     break; 
     case "mass_add": 
     echo "something happens here when mass_add is run"; 
     doSomethingElse(); //Runs another function for indi_add 
     break; 
     case "export": 
     echo "show page for export"; 
     break; 
    } 
    break; 
    default: 
     echo "not show page"; 
     break; 
} 
+0

хм .... но дело в том, что, поскольку im делает тип show/hide для каждого значения diff ... это не будет эхом. Это будет фактически другой результат для каждого значения. поэтому общее эхо не поможет мне ... как будто indi_add появляется, когда access = 2, это будет ссылка url на страницу ... то же самое для других 2 значений, которые будут связаны с 2 разными url links ... – neelima

+0

srry смотрел на коды ... не читал msg под тегами ... плохо попробуйте метод then..thank u для ответа ...: D – neelima

+0

причина для эха заключается в том, что вы использовали что в вашем примере вы можете добавить любой код, который вы хотите для каждого случая, или тот же код для нескольких случаев, как я сделал в примере. Я также сделал дефо lt, что означает, что все случаи, когда доступ - это нечто иное, чем 2, не будут отображаться на странице, но при необходимости вы можете добавить к нему разные случаи. – Sondre

0

Возможно, я неправильно, но одна переменная не может иметь несколько значений.

Это может, однако, содержать несколько значений, если они закодированы каким-либо образом.В этом конкретном случае вы, вероятно, ищете битмаски/флаги.

Сначала определим «ценности», убедившись, что не перекрываться шаблоны битов (если это не разрешено в вашей системе ценностей):

define('indi_add', 0x0001); 
define('mass_add', 0x0002); 
define('export', 0x0004); 

Теперь вы можете объединить их в переменной с помощью оператора ИЛИ |:

$permre['pages'] = indi_add | mass_add; 

Наконец, использование побитовое И оператор &, чтобы проверить, если переменная содержит один из флагов:

if ($permre['pages'] & indi_add)// 
    {echo "show page";} 

if ($permre['pages'] & mass_add)// 
    {echo "show page";} 

if ($permre['pages'] & export)// 
    {echo "show page";} 
Смежные вопросы