Можно ли выйти из блока if и перейти в else?

Приветствую. Вот примерно такой код.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }

if(!empty($_GET["data"])){
//выполняем sql-запрос к БД
//если запрос вернул пустую строку, т.е. null, переходим в блок else
} else{
//какой-то код
}
 

Вот, пожалуйста, привожу код.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }

switch(!empty($_GET["hash"])){
case true:
$res = $mysqli->query("SELECT `answer_id` FROM `for_friends` WHERE `uid`=".$user_id." AND `frid`=".$_GET["hash"]." ORDER BY `id` LIMIT 1");
$row = $res->fetch_assoc();
if($row==null) break;
$y = array(0=>$row["answer_id"][0],1=>$row["answer_id"][1],2=>$row["answer_id"][2]);
default:
$x = array(1,2,3,4,5,6);
$rand = array_rand($x,3);
foreach($rand as $rand_key){
$y[] = $x[$rand_key];
}
}
$res = $mysqli->query("SELECT `id`,`answer` FROM `answers` WHERE `id` IN(".$y[0].",".$y[1].",".$y[2].")");
while($row = $res->fetch_assoc()){
$arr["response"][] = [$row["id"],$row["answer"]];
}
 

Выводит ошибку "Fatal error: Call to a member function fetch_assoc() on a non-object in".
Работает в том случае, если я выношу код из "default" за пределы конструкции switch. Пробовал ставить в default exit - ни какой реакции.

1 ответов


Не знаю как с if/else, но со switch возможно.


switch(empty($_GET["data"])){
    case true:
         if(if_query_not_null) break;
    default:
         do_something();
}
 
как-то так...

Но что-то мне подсказывается, что что-то спроектировали неправильно.

Нет.

Можно например так::


$f_empty = false;           // флажок пустой строки.
if(!empty($_GET["data"])){
         //выполняем sql-запрос к БД
         
         //если запрос вернул пустую строку, то
         $f_empty = true;
}
if(empty($_GET["data"]) || $f_empty ){
         //какой-то код
}
 

1. Оформите "какой-то код" как функцию и вызывайте ее в обоих блоках.
2. Заведите булеву переменную, присваивайте ей нужное значение. Проверяйте ее состояние после.


$isCorrectData = false;
if(!empty($_GET["data"])){
    //выполняем sql-запрос к БД и если запрос вернул НЕ пустую строку
    $isCorrectData = true;
}

if (!$isCorrectData) {
    //какой-то код
}