Может ли кто-нибудь помочь мне с этим кодом? На моем сайте нет результата.
<?php
if (isset($_GET['id']) ? $product['valid2'] : ''==1) {
echo "Yes";
} elseif (isset($_GET['id']) ? $product['valid2'] : ''==0) {
echo "No";
}
Последняя часть каждого троичного выражения не имеет смысла. Это должна быть строка, а не выражение.
@Hamid Ahmadi В базе данных необходимо запросить, присвоен ли идентификатору 1 или 0. Если идентификатор имеет значение 0, веб-сайт должен отображать «Нет», а если значение равно 1, веб-сайт должен отображать «Да».
Из ваших комментариев кажется, что вы просто хотите проверить, установлен ли идентификатор или что ему не присвоено значение 0.
Этого можно добиться, просто проверив его существование, а затем приведя значение к логическому типу. Это присвоит значение > 0 true и 0 false.
$id = filter_input(INPUT_GET, 'id');
$idIsSet = (bool) $id;
if (!$idIsSet) {
// Id is not set so do something to handle this.
echo "No";
die();
}
// The Id is set so you can do whatever you want with the Id.
echo "Yes";
Это хорошая идея, но как мне указать функции взять запись «valid2» из таблицы с соответствующим идентификатором?
Что вы пытаетесь сделать с $product['valid2']
? Вы можете получить к нему доступ в любой момент во время оператора if, поскольку он находится в той же области, что и ваш пример?
Я решил это с помощью этой функции:
<?php
$v2 = isset($_GET['id']) ? $product['valid2'] : '';
if ($v2==1) {
echo "Yes";
} elseif ($v2==0) {
echo "No";
}
?>
Спасибо за все ответы!
В соответствии с правилами приоритета оператора в php (которые могут меняться в разных версиях php), свободное «сравнение» (==
) имеет более высокий приоритет, чем «тройное» (? :
).
Это означает, что часть свободного сравнения оценивается до проверки isset()
.
Также важно указать, что из php8 ''==0
оценивается как false
, а в версиях под php8 это же выражение оценивается как true
. Ресурс: https://www.php.net/manual/en/migration80.incompatible.php
В общем, ваши выражения if
и elseif
проходят проверку на истинность/ложность.
isset($_GET['id'])
истинно, значение $product['valid2']
оценивается как истинное/ложное.isset($_GET['id'])
ложно, значение свободного сравнения оценивается как истинное/ложное.Без глубокого знания вашего проекта может быть прямым, правильным и удобочитаемым изложить логику следующим образом.
echo isset($_GET['id']) && $product['valid2'] == 1 ? 'Yes' : 'No';
Это не предназначено для дублирования логики вашего кода, а для его улучшения и обеспечения того, чтобы вы всегда получали результат да/нет.
Что именно ты хочешь сделать?