Правильное условие для оператора if PHP

Изучаю PHP. Не могу понять, как правильно составить условие. Обработчик получает по GET 1 или 2 переменные phone (номер телефона) или name (имя владельца телефона). Как правильно обработать условие: Если пришел только номер то вывести только номер, если пришли и номер и имя то вывести и номер и имя. Сейчас, когда я отправляю и номер и имя, то сразу обрабатывается 1 условие, и PHP выводит, будто пришел только номер телефона:

<?php
include_once 'db.php';

if (isset($_GET['phone'])){
    echo "only phone";
}elseif (isset($_GET['phone']) && isset($_GET['name'])){
    echo "get phone and name";
}

Ответы (4 шт):

Автор решения: Rikky

Вот верная формулировка:

<?php

    include_once 'db.php';

    if (isset($_GET['phone']) && isset($_GET['name'])) {
        echo "get phone and name";        
    } else if (isset($_GET['phone'])) {
        echo "only phone";
    } else if (isset($_GET['name'])) {
        echo "only name";
    } else {
        echo "no get params";
    }

?>
→ Ссылка
Автор решения: Salohiddin Yoqubov

желательно одновременно проверять"isset" и"empty". Если вы просто проверяете "isset", то условие выполняется, даже если оно у вас пустое. и "empty" проверяет, есть ли что-то внутри него или нет

if (isset($_GET['phone']) AND !empty($_GET['phone'])){
    echo "only phone";
}elseif (isset($_GET['phone'])  AND !empty($_GET['phone']) AND isset($_GET['name'])  AND  !empty($_GET['name'])){
    echo "get phone and name";
}
    ?>
→ Ссылка
Автор решения: Dmitry Uchaikin

Смотря что Вы собираетесь делать с этими данными:
Например. отобразить сразу:

 <?php
  echo (isset($_GET['name'])) ? $_GET['name'] : '';
  echo (isset($_GET['phone'])) ? $_GET['phone'] : '';
 ?>

... или использовать позже... :

<?php
$name = (isset($_GET['name'])) ? $_GET['name'] : '';
$phone = (isset($_GET['phone'])) ? $_GET['phone'] : '';
// ... ещё много кода ...
echo $name;
echo $phone;
?>

Могут ли быть ещё какие-то входные данные?:

<?php
 foreach ($_GET as $key => $value) {
      // Что-то делаем с данными
 }
?>
→ Ссылка
Автор решения: uberchel

С утверждение об эквивалентности isset и empty абсолютно не согласен, ибо следуя из названия Empty - проверяет существование переменной и пустоту, в отличие от Isset которая проверяет только существование переменной, как то так.

Следую из этого, код будет примерно следующим, добавил маломальскую фильтрацию:

if (!empty($_POST)) {
    $result = array();
    if (!empty($_POST['phone'])) {
        $result[] = preg_replace('#[^0-9-\(\)\s\+]+#iS', '', strip_tags($_POST['phone']));
        if (!empty($_POST['name'])) {
           $result[] = preg_replace('#[^a-zа-я\s]+#iS', '', strip_tags($_POST['name']));
        }
    }
    // Действия с массивом $result
}
→ Ссылка