Правильное условие для оператора 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 шт):
Вот верная формулировка:
<?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";
}
?>
желательно одновременно проверять"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";
}
?>
Смотря что Вы собираетесь делать с этими данными:
Например. отобразить сразу:
<?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) {
// Что-то делаем с данными
}
?>
С утверждение об эквивалентности 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
}