PHP - send-script için url adresi

5 Cevap php

I'm creating pagging for some data. For example, I have a page:

http://example.com/news.php?type=bla&smth=bla

Ben başka sayfalara bağlantılar içeren bir haber listesi var vardır. Ilk sayfaya link:

http://example.com/news.php?type=bla&smth=bla&page=1

İşte sayfaların bağlantılarını oluşturur komut şudur:

print '<a href="?'.$_SERVER['QUERY_STRING'].'&page=1"><<</a>';

Ama başka sayfalara tıkladıktan sonra linki URL çok büyük ve bu gibi görünüyor:

http://example.com/news.php?type=bla&smth=bla&page=1&page=2&page=1&page=3

Bunu nasıl değiştirebilirim?

5 Cevap

Basit şunları yapmaktır:

$params = $_GET;     // make a copy of the querystring params
$params['page'] = 1; // will replace any existing 'page' parameter
echo '<a href="?'.http_build_query($params)'">Page 1</a>';

The alternative http_build_str does not handle inner arrays, therefor, i suggest the following:

function http_build_str_inner($query, $prefix, $arg_separator,&$args) {
    if (!is_array($query)) {
        return null;
    }
    foreach ($query as $key => $val) {
        $name = $prefix."[".$key."]";
        if (!is_numeric($name)) {
            if(is_array($val)){
                http_build_str_inner($val,$name,$arg_separator,$args);
            }else{
                $args[] = rawurlencode($name).'='.urlencode($val);
            }
        }
    }   
}

function http_build_str($query, $prefix='', $arg_separator='') {
    if (!is_array($query)) {
        return null;
    }
    if ($arg_separator == '') {
        $arg_separator = ini_get('arg_separator.output');
    }
    $args = array();
    foreach ($query as $key => $val) {
        $name = $prefix.$key;
        if (!is_numeric($name)) {
            if(is_array($val)){
                http_build_str_inner($val,$name,$arg_separator,$args);
            }else{
                $args[] = rawurlencode($name).'='.urlencode($val);
            }
        }
    }
    return implode($arg_separator, $args);
}

Enjoy ...

Every time you run that script a page parameter will be appended to the query string. For instance when you get to page one the query string will be:

http://site.com/news.php?type=bla&smth=bla

ve sorgu dizesi sayfasına geldiğinizde olacak

http://site.com/news.php?type=bla&smth=bla&page=1

ve böylece herkes sayfa için gitmek olduğunu.

Ben bunun yerine bir dizi parametre alır ve bir sorgu dizesi olarak biçimlendirir ve sonra gerektiği gibi bunları değiştirmek bir işlevi yazma öneririm.

So çizgisinde bir şey:

<?php

$parameters = array(
  'type' => 'bla',
  'smth' => 'bla',
  'page' => 1,  // Of course, logic up front to change the value of this
);

print print '<a href="?' . format_url_parameters($parameters) .'>Link</a>';

// format_url_parameters producing a valid query string here

Ayrıca sadece kullanabilirsiniz

print '<a href="http://'. $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'].'?page=1"><<</a>';

Bu mutlak bir URL'yi her zaman üretir.