Взимане на 2 или повече букви с една заявка и разделяне в if

ludasam

Registered
Имам таблица със следните полета:
`n_id`
`n_user`
`n_level`
`n_rank`

Опитах по следния начин да взема level на даден потребител:
$test = mysql_fetch_array(mysql_query("SELECT `n_level` FROM `n_member` WHERE `n_user`='{$user}' AND `n_level` LIKE '%c%';"));
$level = $test['n_level'];
echo $level;

и си работи, обаче искам ако имам в таблица `level` cd

като напиша
PHP:
if($level == "c") {
echo "Имаш достъп C";
} else {
echo "Нямаш достъп";
}

if($level == "d"){
echo "Имаш достъп D";
} else {
echo "Нямаш достъп";
}

Тоест , ако дори двете букви ги има в `level` да ги разделя и след това да ги сложа в IF. Ако имам само една буква то , автоматично пак да си я взима.
В горната заявка, взимам само c, и ако сложа кода за проверка със %cd% , то няма да ми работи и нито един от тези if-ве.
PHP:
if($level == "c") {
echo "Имаш достъп C";
} else {
echo "Нямаш достъп";
}

if($level == "d"){
echo "Имаш достъп D";
} else {
echo "Нямаш достъп";
}

Предполагам бях ясен какъв ми е въпроса :)
 
Еми сложи 2 LIKE-a

[sql]
WHERE `filed` LIKE '%c%' OR `filed` LIKE '%d%'
[/sql]

нещо такова не пробва ли ?


[sql]
SELECT `n_level` FROM `n_member` WHERE `n_user`='{$user}' AND (`n_level` LIKE '%c%' OR `n_level` LIKE '%d%')
[/sql]

мисля, че така трябва да стане.
 
Да опитах така, но пак взима двата левела тоест - cd и когато погледна дали има достъп дадения потребител, няма как да има , защото левела е "cd", а на мен левелите ми трябват за двата if по отделно, а няма смисъл да правя втора колона и след това да вадя резултата от там.

Не съм сигурен дали, ще е най-добрия начин, но ако ги вкарам в масив и след това в един forech да ги изкарам "разделени" някак си дали ще стане :?
 
Ами да в случая ще е най-добре да ги изкараш и да ги разделиш.

А би ли обяснил, с каква цел са и 4 в едно поле ? Това не са ли някакви нива на достъп ?
 
relax4o каза:
Ами да в случая ще е най-добре да ги изкараш и да ги разделиш.

А би ли обяснил, с каква цел са и 4 в едно поле ? Това не са ли някакви нива на достъп ?

Да нива на достъп са.
c - обикновен потребител
d - вип потребител
и т.н.

Но да предположим, че оставя само "cd", имам на две места където ще трябва да ги използвам по отделно и заради това си играя по-този начин.

Опитах така:
$level[] = $test2['n_level'];
$level= explode(" ", $level);
$level_a = array();
foreach ($level AS $level_b) {
$level_a[] = "$level_b";
}
$level_c = impode(" ", $level_a);
echo "$level_c";

но получавам грешки , като:
Warning: explode() expects parameter 2 to be string, array given in /home/2pac/public_html/control.php on line 148

Warning: Invalid argument supplied for foreach() in /home/2pac/public_html/control.php on line 150

Fatal error: Call to undefined function impode() in /home/2pac/public_html/control.php on line 153
 
Я пробвай следното нещо

[sql]
SELECT `n_level` LIKE '%c%' AS `level_c`, `n_level` LIKE '%d%' AS `level_d` FROM `n_member` WHERE `n_user`='{$user}'
[/sql]

Възможно е да получиш и грешка, но все пак...

EDIT: Ако не получиш грешка е вероятно да получиш стойности 0 или 1 (false или true). За това проверявай полетата $row['level_c'] == 1 (за другото по същия начин)
 
Тогава може би ще е трябвало да ползваш in_array() или array_key_exists(), но не знам по какъв начин ти е връщало полето.


Другия вариант е да взимаш цялата стойност на полето и да я проверяваш със strstr() или strpos() за определените букви.
 

Back
Горе