php请求变量分配$\u GEt

php请求变量分配$\u GEt,php,variables,seo,Php,Variables,Seo,如果你看一看前面的问题 我正在使用Col.Shrapnel提出的解决方案,但当我将值赋给实际文件中的$\u GET而不是请求时,代码就不起作用了。它默认远离文件,就好像未设置$\u GET变量一样 我想出的代码是- if(!empty($_GET['cat'])){ $_GET['target'] = "category"; if(isset($_GET['page'])){ $_GET['pageID'] = $_GET['page']; }

如果你看一看前面的问题

我正在使用Col.Shrapnel提出的解决方案,但当我将值赋给实际文件中的$\u GET而不是请求时,代码就不起作用了。它默认远离文件,就好像未设置$\u GET变量一样

我想出的代码是-

if(!empty($_GET['cat'])){

    $_GET['target'] = "category";


    if(isset($_GET['page'])){

        $_GET['pageID'] = $_GET['page'];

    }

    $URL_query = "SELECT category_id FROM cats WHERE slug = '".$_GET['cat']."';";
    $URL_result = mysql_query($URL_query);
    $URL_array = mysql_fetch_array($URL_result);

    $_GET['category_id'] = $URL_array['category_id'];



}elseif($_GET['product']){

    $_GET['target'] = "product";


    $URL_query = "SELECT product_id FROM products WHERE slug = '".$_GET['product']."';";
    $URL_result = mysql_query($URL_query);

    $URL_array = mysql_fetch_array($URL_result);
    print_r($URL_array);

    $_GET['product_id'] = $URL_array['product_id']; 
我试图表示的原始变量字符串是

/cart.php?Target=product&product_id=16142&category_id=249
我正在尝试用代码构建查询字符串变量,包括cart.php,这样我就可以使用更干净的URL

所以我有一个产品/产品标题,带有干净的url/转到slug.php?product=slug


然后slug在数据库中搜索匹配slug的记录,并返回上面代码中的产品id。然后构建查询字符串并包含cart.php

这段代码有很多错误

1,我认为设置这样的变量

是不好的形式。 2看起来好像只有大约6行代码被实际使用

$_GET['target'] = "category";
没有使用,还有一堆其他的东西

3您要求在此处注入SQL:

$URL_query = "SELECT category_id FROM cats WHERE slug = '".$_GET['cat']."';";
如果$u GET['cat']是

'';delete * from cats
那么你的问题是

SELECT category_id FROM cats WHERE slug = '';delete * from cats;
你所有的猫都不见了

如果必须使用mysql函数,请使用


至于你的实际问题。什么不起作用?你有错误吗?我们需要更多信息

此代码有很多错误

1,我认为设置这样的变量

是不好的形式。 2看起来好像只有大约6行代码被实际使用

$_GET['target'] = "category";
没有使用,还有一堆其他的东西

3您要求在此处注入SQL:

$URL_query = "SELECT category_id FROM cats WHERE slug = '".$_GET['cat']."';";
如果$u GET['cat']是

'';delete * from cats
那么你的问题是

SELECT category_id FROM cats WHERE slug = '';delete * from cats;
你所有的猫都不见了

如果必须使用mysql函数,请使用


至于你的实际问题。什么不起作用?你有错误吗?我们需要更多信息。好的,你的代码永远不会工作。鉴于你对

/cart.php?Target=product&product_id=16142&category_id=249
您的$\u GET将按如下方式填充:

$_GET = array(
    'Target' => 'product',
    'product_id' => 16142,
    'category_id' => 249
)
然后使用以下结构:

if(!empty($_GET['cat'])){
   ... stuff part 1...
}elseif($_GET['product']){
   ... stuff part 2...
  • 查询中没有“cat”参数(因此也不会在$\u GET中),因此empty()返回true,并被否定,因此“stuff part 1”永远不会执行
  • 查询中没有“product”参数(因此也不会在$\u GET中),因此elseif为false,因此也不会执行“stuff part 2”部分
  • 至于您关于覆盖$\u GET变量的评论,您只需给它分配一个新值。但这是错误的做法$_GET(及其表亲$u POST和$u REQUEST)永远不应被覆盖。它们应被视为只读数组

    在您的应用程序中这样做可能是正确的,但是考虑GET / POST /请求不是数据可以被检索的唯一地方。可能您正在使用的某些模块/库访问
    HTTP\u QUERY\u VARS
    (已弃用),或
    $\u服务器['QUERY\u STRING']
    \u$SERVER['REQUEST\u URI']
    。它们基本上都包含相同的信息,但在PHP内部单独存储。如果修改$\u GET,然后库从其中一个备用位置检索其自己的查询变量副本,它将获得与您刚才重写的值完全不同的值,因为您只在一个位置重写了它。请记住,这些神奇的数组是在代码执行之前由PHP创建的,然后再也不会被PHP的内部结构所触及。请尝试以下操作:

    testscript.php?yo=dude:

    <?
    echo '<pre>';
    
    echo "Before:\n";
    echo "GET yo: ", $_GET['yo'], "\n";
    echo "REQUEST yo: ", $_REQUEST['yo'], "\n";
    
    $_GET['yo'] = "haha, it's not the same anymore";
    
    echo "after:\n";
    echo "GET yo: ", $_GET['yo'], "\n";
    echo "REQUEST yo: ", $_REQUEST['yo'], "\n";
    

    请注意_请求没有使用新值自动更新。现在,您得到了不一致的数据,这可能会完全破坏您的应用程序。

    好的,您的代码将永远无法工作。鉴于你对

    /cart.php?Target=product&product_id=16142&category_id=249
    
    您的$\u GET将按如下方式填充:

    $_GET = array(
        'Target' => 'product',
        'product_id' => 16142,
        'category_id' => 249
    )
    
    然后使用以下结构:

    if(!empty($_GET['cat'])){
       ... stuff part 1...
    }elseif($_GET['product']){
       ... stuff part 2...
    
  • 查询中没有“cat”参数(因此也不会在$\u GET中),因此empty()返回true,并被否定,因此“stuff part 1”永远不会执行
  • 查询中没有“product”参数(因此也不会在$\u GET中),因此elseif为false,因此也不会执行“stuff part 2”部分
  • 至于您关于覆盖$\u GET变量的评论,您只需给它分配一个新值。但这是错误的做法$_GET(及其表亲$u POST和$u REQUEST)永远不应被覆盖。它们应被视为只读数组

    在您的应用程序中这样做可能是正确的,但是考虑GET / POST /请求不是数据可以被检索的唯一地方。可能您正在使用的某些模块/库访问
    HTTP\u QUERY\u VARS
    (已弃用),或
    $\u服务器['QUERY\u STRING']
    \u$SERVER['REQUEST\u URI']
    。它们基本上都包含相同的信息,但在PHP内部单独存储。如果修改$\u GET,然后库从其中一个备用位置检索其自己的查询变量副本,它将获得与您刚才重写的值完全不同的值,因为您只在一个位置重写了它。请记住,这些神奇的数组是在代码执行之前由PHP创建的,然后再也不会被PHP的内部结构所触及。请尝试以下操作:

    testscript.php?yo=dude:

    <?
    echo '<pre>';
    
    echo "Before:\n";
    echo "GET yo: ", $_GET['yo'], "\n";
    echo "REQUEST yo: ", $_REQUEST['yo'], "\n";
    
    $_GET['yo'] = "haha, it's not the same anymore";
    
    echo "after:\n";
    echo "GET yo: ", $_GET['yo'], "\n";
    echo "REQUEST yo: ", $_REQUEST['yo'], "\n";
    

    请注意_请求没有使用新值自动更新。现在,您的数据不一致,这可能会完全破坏您的应用程序。

    您使用什么.htaccess代码来路由slug?我还没有了解到这一点。。仍然在slug.php上使用$\u GET变量进行测试。我被这件事难住了。GET任务在哪里?我在包含的代码中没有看到它。另外,使用print_r和die执行基本调试,以查看预期值是否与实际值匹配。$\u GET['product_id']=$URL_数组['product_id'];是不是要做“获取”任务。。。?我会在问题中添加更多的信息看起来你发现不重写你的slug就不行了什么。你用htaccess代码来路由slug?我还没有做到这一点。。斯蒂尔