如何通过在php中使用switch/case来获取多个GET参数?
我很新的编程,目前正在研究视频游戏数据库thingy。我被困在一个我想用“GET”方法筛选条目的地方。这一切工作正常,直到我想搜索多个参数为主要问题是要通过我的开关/案例陈述多个倍。因此,这里的代码:如何通过在php中使用switch/case来获取多个GET参数?
$columnName = NULL;
$searchValue = NULL;
switch ($_GET) {
case isset($_GET['name']):
$columnName = "games.name";
$searchValue = $_GET['name'];
break;
case isset($_GET['developer']):
$columnName = "developer.name";
$searchValue = $_GET['developer'];
break;
case isset($_GET['device']):
$columnName = "devices.name";
$searchValue = $_GET['device'];
break;
case isset($_GET['company']):
$columnName = "company.name";
$searchValue = $_GET['company'];
break;
case isset($_GET['medium']):
$columnName = "medium.name";
$searchValue = $_GET['medium'];
break;
default:
break;
}
if ($columnName !== null && $searchValue !== null) {
$selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'";
}
变量$ selectStatement是我的数据库条目的选择语句,但我认为这不会有助于它张贴在它的全部。
在此先感谢。
编辑:
我很惊讶,我只是一个几分钟后,有这么多的答案,太感谢你了! 但我试过每一个你的答案,没有一个真正为我工作。例如,如果我现在搜索两个参数,它只能识别最后一个参数。 在这个例子中 http://localhost/index.php?developer=ubisoft&medium=disc
那只能说明我的媒介,而不是开发者...
if语句多个条件或不使用break语句(不推荐)
工作演示,您应该使用静态GET值:https://eval.in/868873
if ($_GET) {
if(isset($_GET['name']))
{
$columnName[] = "games.name";
$searchValue[] = $_GET['name'];
}
if(isset($_GET['developer']))
{
$columnName[] = "developer.name";
$searchValue[] = $_GET['developer'];
}
if(isset($_GET['device']))
{
$columnName[] = "devices.name";
$searchValue[] = $_GET['device'];
}
if(isset($_GET['company']))
{
$columnName[] = "company.name";
$searchValue[] = $_GET['company'];
}
if(isset($_GET['medium']))
{
$columnName[] = "medium.name";
$searchValue[] = $_GET['medium'];
}
}
遍历columnName
$selectStatement = '';
if ($columnName !== null && $searchValue !== null) {
$length = count($columnName);
for ($i=0; $i < $length; $i++) {
if ($i == 0)
$selectStatement .= " WHERE " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";
else
$selectStatement .= " AND " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";
}
}
echo $selectStatement;
为?developer=ubisoft&medium=disc
输出:
WHERE developer.name LIKE '%ubisoft%' AND medium.name LIKE '%disc%'
还添加了带有静态GET参数的演示链接 –
为什么要使用开关/ case语句?它适合在元素集中搜索一个元素。只要使用if语句。它看起来像如下:
$columns = array();
if(isset($_GET["column1"])) {
$columns []= $_GET["column1"];
}
if(isset($_GET["column2"])) {
$columns []= $_GET["column2"];
}
$columnsString = implode(",", $columns);
// You will get string like "column1,column2"
// And you can make the same thing with your WHERE statements
交换机是不理想用于您的情况。
你可以有一个IF ELSE条件
if (isset($_GET['name'])){
$columnName = "games.name";
$searchValue = $_GET['name'];
}
elseif(isset($_GET['developer'])) {
$columnName = "developer.name";
$searchValue = $_GET['developer'];
}
elseif(){
}
and so on....
另一种方法是你可以有一个数组来映射你的参数列名。
$_GET['type'] --> this can be your name, developer, medium, device, company...
$_GET['value'] --> your value for name or developer or medium....
$mapping = [
'name' => 'games.name',
'developer' => 'developer.name',
'device' => 'device.name',
'medium' => 'medium.name'
];
$columnName = $mapping[$_GET['type']];
$searchValue = $_GET['value'];
$selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'";
使用多个'if'语句而不是'switch' – ArtOsi
我想如果你不使用“break”,那么它会检查每个参数。但是,您将需要更改值和列值以包含所有参数。 –
@MrKiwey更新了我的答案,请检查 –