[英]PHP if/elseif statement not working as intended
我正在嘗試使 if/elseif 語句在 php 中工作,並且一切似乎都工作得很好,除了如果“locid”為空或不存在,我想顯示不同的查詢。 有人可以幫我弄清楚代碼有什么問題嗎?
基本上, if(empty($locid)) 語句不起作用。 該頁面顯示為空白。
這是代碼:
if (isset($_GET['locid'])) {
$locid = $_GET['locid'];
if (empty($locid)) {
$selectloc = "SELECT * FROM locations;";
} elseif ($locid == 'all') {
$selectloc = "SELECT * FROM locations;";
} elseif ($locid == 'veterinary') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Veterinary';";
} elseif ($locid == 'store') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Store';";
} elseif ($locid == 'shelter') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Shelter';";
} elseif ($locid == 'other') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Other';";
} else {
$selectloc = "SELECT * FROM locations;";
}
}
您應該啟用錯誤報告。
基本上,
if(empty($locid))
語句不起作用。 該頁面顯示為空白。
頁面顯示為空白應該敲響了合乎邏輯的警鍾。
問題是,如果$_GET['locid']
未設置,那么您的查詢仍然期望$selectloc
包含未定義的 SQL 字符串(沒有錯誤報告,意味着沒有錯誤 = 白/空白頁)。
// default to this first, let the conditions overwrite it.
$selectloc = "SELECT * FROM locations;";
if (isset($_GET['locid'])) {
$locid = $_GET['locid'];
if ($locid == 'veterinary') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Veterinary';";
} elseif ($locid == 'store') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Store';";
} elseif ($locid == 'shelter') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Shelter';";
} elseif ($locid == 'other') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Other';";
}
}
也可以寫成:
<?php
// default to this first, append the constraints
$selectloc = "SELECT * FROM locations WHERE 1=1";
if (isset($_GET['locid'])) {
$locid = $_GET['locid'];
if ($locid == 'veterinary') {
$selectloc .= " AND location_cate='Veterinary'";
} elseif ($locid == 'store') {
$selectloc .= " AND location_cate='Store'";
} elseif ($locid == 'shelter') {
$selectloc .= " AND location_cate='Shelter'";
} elseif ($locid == 'other') {
$selectloc .= " AND location_cate='Other'";
}
}
您的if else構造存在邏輯缺陷。
首先,您檢查是否設置了GET
變量,如果是,請輸入if語句。 但是,當您輸入語句時,檢查內部沒有意義的空變量是沒有意義的,該變量不會為空。
因此,您應該將您的空邏輯移動到補充您的isset()的 else 語句中,因為邏輯將是變量已設置或未設置(即空)。
<?php
if (isset($_GET['locid'])) {
$locid = $_GET['locid'];
if ($locid == 'all') {
$selectloc = "SELECT * FROM locations;";
} elseif ($locid == 'veterinary') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Veterinary';";
} elseif ($locid == 'store') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Store';";
} elseif ($locid == 'shelter') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Shelter';";
} elseif ($locid == 'other') {
$selectloc = "SELECT * FROM locations WHERE location_cate='Other';";
} else {
$selectloc = "SELECT * FROM locations;";
}
} else {
$selectloc = "SELECT * FROM locations;";
}
?>
如果 id 僅因大小寫而異,則可以大大簡化代碼:
$locids = [ 'veterinary', 'store', 'shelter', 'other' ];
$whereClause = '';
$locid = $_GET['locid'] ?? null;
if (in_array($locid, $locids)) {
$locationCate = ucfirst($locid);
$whereClause = "WHERE location_cate='$locationCate'";
}
$selectloc = "SELECT * FROM locations $whereClause;";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.