如何在php中检索多个url参数

时间:2017-05-09 18:55:27

标签: php

我的网址中有4个参数。我从我给出的url中检索url参数。使用每个参数我都会改变目录的路径并获得不同的图像。

我的示例网址如下所示:

www.sample.com?cat=section1&language=de&prices=pl

代码正在运行,但它是一个spagheti代码。

是否有解决方案可以减少DRY?如何检索多个url参数?

if(isset($_GET["cat"])) {
switch ($cat) {
case 'section1':
if(isset($_GET["language"])) {
        $language = htmlspecialchars($_GET["language"]);
        if($language == "de") {
            if(isset($_GET["prices"])) {
                $prices = htmlspecialchars($_GET["prices"]);
                if($prices == "pl"){
                    $files=glob('pages/section1/dp/low/*.jpg');
                }
                else {
                    $files=glob('pages/section1/dn/low/*.jpg');
                }   
            }
            else {

                    $files=glob('pages/section1/dn/low/*.jpg');
            }
        }
        elseif ($language == "en") {
            if(isset($_GET["prices"])) {
                $prices = htmlspecialchars($_GET["prices"]);
                if($prices == "pl"){
                        $files=glob('pages/section1/ep/low/*.jpg');
                }
                else {
                        $files=glob('pages/section1/en/low/*.jpg');
                }   
            }
            else {
                    $files=glob('pages/section1/en/low/*.jpg');
            }   
        }
        elseif ($language == "cz") {
            if(isset($_GET["prices"])) {
                $prices = htmlspecialchars($_GET["prices"]);
                if($prices == "pl"){
                        $files=glob('pages/section1/cp/low/*.jpg');
                }
                else {
                        $files=glob('pages/section1/cn/low/*.jpg');
                }   
            }
            else {
                    $files=glob('pages/section1/cn/low/*.jpg');
            }
        }
        else {
                $files=glob('pages/section1/cn/low/*.jpg');
        }
    }
    else {
            $files=glob('pages/section1/dn/low/*.jpg');
    }
    break;
case 'section2':
    //the same like in section 1, path is .../section2/...
    break;
case section3:
    //the same like in section 1, path is .../section3/...
    break;
default:
    //the same like in section 1
    break;
}
else {
    //the same like in section 1
}

路径d =德语,e =英语,c =捷克语,p =价格,n = noprices

2 个答案:

答案 0 :(得分:0)

只需进行检查,您就可以缩短/删除许多if if语句:

  $lang_code = $language[0];

你有第一个字母,你可以对每个GET参数做同样的事情。 所以你可以在:

中使用它
  $files=glob('pages/section1/'.$lang_code.'p/low/*.jpg');

你可以为其他一切做同样的事情。

P.s。:不要忘记清理任何用户输入,即:

  $language=mysqli_real_escape_string($conn, $_GET['language']);

答案 1 :(得分:0)

我可能会这样做:

<?php
    $allowedCat = ['section1', 'section2'];
    $allowedLanguage = ['pl', 'en', 'cz'];
    $allowedPrice = ['pl', '??'];

    $cat = (isset($_GET["cat"])) ? $_GET["cat"] : null;
    $language = (isset($_GET["language"])) ? $_GET["language"] : null;
    $prices = (isset($_GET["prices"])) ? $_GET["prices"] : null;

    if (!in_array($cat, $allowedCat)) throw new \Exception('Invalid `cat`');
    if (!in_array($language, $allowedLanguage)) throw new \Exception('Invalid `language` option.');
    if (!in_array($prices, $allowedPrice)) throw new \Exception('Invalid `price` option.');

    $someVar1 = ($prices === 'pl') ? 'p' : 'n';
    $someVar2 = $language[0];

    $files = glob("pages/{$cat}/{$someVar1}{$someVar2}/low/*.jpg");

认为应该是自我解释的。真的翻译一对一。不确定如何指定其他price选项......