• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Variablen an URL... vorgehensweise?

Zeitdasssichwasdreht

Neues Mitglied
Hallo! :)

Mir ist klar, das man Variablen einfach mit ? bzw. weitere Variablen mit & an die URL anhängen kann.
Mir ist ebenfalls klar, das man diese mit $_GET abrufen kann.

Allerdings habe ich jetzt ein Problem.
Ich möchte meine index.php so aufrufen können:
index.php?kat=2
index.php?page=3
index.php?kat=2&page=3
index.php?page=3&kat=2
(bzw. mit anderen Werten).

auf einer Fehlerbehebung hab ich mich durchgegoogelt, und bin zu diesem Ergebnis gekommen:
PHP:
 <a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page=1" class="page">1</a>
Nun, wenn ich mich dann durch die Seiten und Kategorien drücke, kommt nachher so eine URL raus:

'http://localhost/time/index.php?page=2&page=3&page=4&kat=1&page=2&kat=5'

Ist ja auch irgendwie logisch, wenn das Script einfach immer eine Variable anhängt.
Aber schön ist das nicht.

Gibt's da Wege wie ich das beheben kann?

Liebe Grüße
 
Weil dieser Thread gerade noch mal an anderer Stelle verlinkt wurde:

Ich würde eher mit $_GET arbeiten statt mit $_SERVER['QUERY_STRING'].

Code:
<a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page=1" class="page">1</a>

Ich würde im Prinzip alles anders machen. ;)

- PHP_SELF ist böse! Potentielles Cross Site Scripting (XSS)! | Technik, Gothic und Anderes (Escaping fehlt: htmlspecialchars)
- &page=1 müsste &amp;page=1 heißen (Escaping fehlt: htmlspecialchars)
- URL-Encoding von Parametern fehlt sicherlich auch.
- Was ist bei einem leeren Query-String?

Würde es von der Idee her so machen, also den gesamten URL/URI ganz neu zusammenbauen.

PHP:
<?php

function escape($s)
{
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

function getRootUrl()
{
    return rtrim(dirname($_SERVER['SCRIPT_NAME']), '/');
}

function url($path, array $params = array())
{
    $queryPart = '';

    if (count($params) !== 0) {
        $queryPart = http_build_query($params);
    }

    $fullUri = getRootUrl();

    $fullUri .= $path;

    if ($queryPart !== '') {
        $fullUri .= '?' . $queryPart;
    }

    return $fullUri;
}

?>



<a href="<?=escape(url('/test/index.php', array('kat' => 3, 'page' => 1)))?>">Link</a>

Das liefert eine Ausgabe wie:

Code:
<a href="/path/to/root/test/index.php?kat=3&amp;page=1">Link</a>

Um nun noch etwaige bestehende Werte für kat zu übernehmen:

PHP:
<?php
$params = array();
if (isset($_GET['kat'])) {
    $params['kat'] = $_GET['kat'];
}
$params['page'] = 1;
?>

<a href="<?=escape(url('/test/index.php', $params))?>">Link</a>

Ist nicht so schwierig, wie es auf den ersten Blick vielleicht aussieht.
 
Zurück
Oben