首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP无法从URL获取参数

问PHP无法从URL获取参数
EN

Stack Overflow用户
提问于 2014-04-27 20:16:21
回答 1查看 2.7K关注 0票数 1

由于一些奇怪的原因,我无法从URL中得到价值

代码语言:javascript
复制
$URL=localhost/supplies/cartridges/?Brand%5B%5D=HP

这里我要检查get,但是这个返回一个空数组

代码语言:javascript
复制
 public function getGetparameters(){
    $get=$_GET;
    var_dump($get);
}

var_dump返回下一步:

代码语言:javascript
复制
array(0) { }

我不明白为什么这样

代码语言:javascript
复制
$URL=$_SERVER['REQUEST_URI'];
    $parsedURL=parse_url($URL);
    $URLQ=$parsedURL['query'];
    echo $URLQ;

返回

代码语言:javascript
复制
Brand%5B%5D=HP

不幸的是,我需要使用get参数,所以我坚持了一点:

生成get的代码:

代码语言:javascript
复制
<form action="" method="get"><h4>Brand:</h4><div class="input-control checkbox">
              <label>
              <input name="Brand[]" type="checkbox" value="HP">
                <span class="check"></span>HP</label>
              </div>
               <button type="submit" class="bg-darkCobalt" style="box-shadow: 0 0 3px 0 #000000; color: #ffffff"><i class="icon-list on-left fg-white"></i>Filter</button>
    </form>

我只想把Brand[]换成品牌,但稍后我会添加更多的品牌,我需要同时维护这些品牌,所以这不是解决方案

当我被要求粘贴整堂课的时候,就是这样。PS:对不起俄文/乌克兰文:)

代码语言:javascript
复制
class CatalogHandler extends generalRenderer{
public function getCatalogName(){
    $URL=$_SERVER['REQUEST_URI'];
    $parsedURL=parse_url($URL);
    $URLPath=$parsedURL['path'];
    $array = explode('/',$URLPath);
    $rev = array_reverse($array);
    $catalog = $rev[1];
    return $catalog;
}
public function getGetparameters(){
    var_dump($_GET);
}



public function renderTitleAndMetaAndSetHeader($newSQL){
    while($row=$this->fetchArray($newSQL)){
        echo "<title>".$row['Title']." ".$this->setSuffix."</title>
             <meta name='description' content='".$row['Desc']."'/>
             <meta name='keywords' content='".$row['KeyWord']."'/>
        ";
        $this->setHeader($row['Title']);
    }
}
public function getCatalogJS($path,$catalogname){
    echo "<script type='text/javascript' src='".$path."js/".$catalogname.".js'></script>";
}
public function getFilters($newSQL,$SQL){
    echo "<div class='grid'> <div class='row'><div class='span3 padding10 border'>
                    <form action='' method='get'>";
    $this->getBrands($newSQL);
    $this->getTypes($SQL);
    echo "<div class='clearfix'></div>
    <button type='submit' class='bg-darkCobalt' style='box-shadow: 0 0 3px 0 #000000; color: #ffffff'><i class='icon-list on-left fg-white'></i>Фильтровать</button>
    </form>
    </div>";
}
public function checkedBrandAndFilter($row){
    if(!empty($_GET['Brand'])&&in_array('HP',$_GET['Brand'])){
        echo "checked='checked'";
    }
    else{
        echo "";
    }
}
public function checkedTypeAndFilter($row){
    if(!empty($_GET['Type'])&&in_array($row['Type'],$_GET['Type'])){
        echo "checked='checked'";
    }
    else{
        echo "";
    }
}
public function getBrands($newSQL){
    echo "<h4>Brand:</h4>";
    while($row=$this->fetchArray($newSQL)){
        echo "<div class='input-control checkbox'>
              <label>
              <input name='Brand[]' type='checkbox' value='".$row['Brand']."'";
               if(!empty($_GET['Brand'])&&in_array('HP',$_GET['Brand'])){
                    echo "checked='checked'";
               }
                else{
                    echo "checked=''";
                    echo $_GET['Brand'];
                }
              echo "/>
                <span class='check'></span>".$row['Brand']."</label>
              </div>
        ";
    }
}
public function getTypes($SQL){
    echo "<h4>Тип:</h4>";
    while($row=$this->fetchArray($SQL)){
        echo "<div class='input-control checkbox'>
              <label>
              <input name='Type[]' type='checkbox' value='".$row['Type']."'
               ".$this->checkedTypeAndFilter($row)."/>
                <span class='check'></span>".$row['Type']."</label>
              </div>
        ";
    }
}
public function getProductNameModelAndLink($row){
    echo "<a href='".$row['Brand']."-".$row['Model']."'><h4>".$row['Brand']." ".$row['Model']."</h4></a>";
}
public function getProductIMG($row){
    echo "<a href='".$row['Brand']."-".$row['Model']."'>
                <img class='span2 shadow' src='".$row['IMGPath']."' alt='".$row['Brand']." ".$row['Model']." купить и провести сервисное обслуживание в Житомире и области'/>
          </a>";
}
public function getBrand4Tech($row){
    if(isset($row['Brand'])){
    echo "Производитель: ".$row['Brand']." / ";
    }
    else{
    }
}
public function getModel4Tech($row){
    if(isset($row['Model'])){
        echo "Модель: ".$row['Model']." / ";
    }
    else{
    }
}
public function getType4Tech($row){
    if(isset($row['Type'])){
        echo "Тип: ".$row['Type']." / ";
    }
    else{
    }
}
public function getCode4Tech($row){
    if(isset($row['Code'])){
        echo "Код: ".$row['Code']." / ";
    }
    else{
    }
}
public function getProductTechInfo($row){
    $this->getBrand4Tech($row);
    $this->getModel4Tech($row);
    $this->getType4Tech($row);
    $this->getCode4Tech($row);
}
public function renderProducts($SQL,$catalogname){
    echo "<div class='span9'>";
    while($row=$this->fetchArray($SQL)){
        $this->getProductNameModelAndLink($row);
        $this->getProductIMG($row);
        echo "<div class='span7'>";
        $this->getProductTechInfo($row);
        $this->renderPrice($row);
        $this->getBuyButton($catalogname,$row);
        $this->renderStock($row);
        echo "</div>";

                    echo "<div class='clearfix'></div>";
    }
    echo "</div></div></div>";
}
}

这就是它的使用方式:

代码语言:javascript
复制
<?php
include('CatalogHandler.php');
include('DBconfig.php');

$config = new DBconfig('localhost','setuser','a11235813b','setua');
$con=mysqli_connect('localhost','setuser','a11235813b','setua');
$catalog = new CatalogHandler($config);
$catalogname=$catalog->getCatalogName();

$catalog->openConnection();
$query="SELECT * FROM metaandtitlecatalogs WHERE Cat='".$catalogname."'";
$query4brands="SELECT DISTINCT(Brand) AS Brand FROM ".$catalogname;
$query4types="SELECT DISTINCT(Type) AS Type FROM ".$catalogname;
$query4catalog="SELECT * FROM ".$catalogname;

$catalog->startHead('../../');
$catalog->getGetparameters();
$result = mysqli_query($con,$query);
$result4brands=mysqli_query($con,$query4brands);
$result4types=mysqli_query($con,$query4types);
$result4catalog=mysqli_query($con,$query4catalog);

$catalog->renderTitleAndMetaAndSetHeader($result);
$catalog->getGenCSS('../../');
$catalog->getGenJS('../../');
$catalog->getJS4Filters('../../');
$catalog->getCatalogJS('../../',$catalogname);
$catalog->closeHead();
$catalog->getTopBarAndStartBody('../../');
$catalog->getHeader();
$catalog->getFilters($result4brands,$result4types);
$catalog->renderProducts($result4catalog,$catalogname);
$catalog->getGetparameters();
?>

更新:我在/setua//中有一个脚本,从/setua//*重定向到catalogues.php。在供应品定义要连接的MySQL表之后的路径。如果我将表单操作指定为

代码语言:javascript
复制
 $_SERVER['PHP_SELF']

它重定向到URL /setua/Catues.php,这样就失去了到所需DB的连接。但是,得到的参数是识别的,OK。但是,一旦以操作形式指定了URL /setua/supplies/*,就会丢失GET参数

错误找到了,如果您使用的是$_GET,那么它只能从初始页面工作到下一个页面,除非您手动将GET变量添加回任何重定向。听起来,您要将表单提交到一个重定向到其他地方的页面,该页面会释放$_GET变量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-27 20:39:03

我认为这是可行的:(将name="Brand[]"改为name="Brand")

代码语言:javascript
复制
<form action="" method="get">
    <h4>Brand:</h4>
    <div class="input-control checkbox">
        <label>
            <input name="Brand" type="checkbox" value="HP">
            <span class="check"></span>HP
        </label>
    </div>
    <button type="submit" class="bg-darkCobalt" style="box-shadow: 0 0 3px 0 #000000; color: #ffffff"><i class="icon-list on-left fg-white"></i>Filter</button>
</form>

然后:

代码语言:javascript
复制
public function getGetparameters() {
    $get = $_GET;
    var_dump($get);  //Should get you brand => HP
};

更新:如果您必须坚持使用name="Brand[]"

确保您的表单位于某个位置,您的action标记是空白的,这是奇怪的。

代码语言:javascript
复制
<form action="catalogs.php" method="get">
    <h4>Brand:</h4>
    <div class="input-control checkbox">
        <label>
            <input name="Brand[]" type="checkbox" value="Apple">
            <span class="check"></span>Apple
        </label>
        <label>
            <input name="Brand[]" type="checkbox" value="HP">
            <span class="check"></span>HP
        </label>
    </div>
    <button type="submit" class="bg-darkCobalt" style="box-shadow: 0 0 3px 0 #000000; color: #ffffff"><i class="icon-list on-left fg-white"></i>Filter</button>
</form>

然后,在catalogs.php上:

代码语言:javascript
复制
public function getGetparameters() {
    $get = $_GET;
    print_r($get); 
    /* Will result with the following if only HP was checked off
    Array
    (
        [Brand] => Array
            (
                [0] => HP
            )
    )
    */
    /* Will result with the following if both checked off
    Array
    (
        [Brand] => Array
            (
                [0] => Apple
                [1] => HP
            )
    )
    */
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23328467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档