Avatar billede Mik2000 Professor
26. januar 2013 - 16:57 Der er 10 kommentarer og
1 løsning

Dynamisk tilføje get værdi til adresselinje

Hej

Jeg har en side

side.php

Jeg skal dynamisk tilføje en værdi til adresselinjen, f.eks. ?vaerdi=1

Den del har jeg styr på.
Problemet er at nogle gange er der allerede værdier, og så skal ? i stedet være &
Da værdien tilføjes dynamisk, skal systemet selv vide om det er ? eller &

Findes der en simpelt måde at finde ud af om der allerede er værdier eller hvordan håndteres det smartest?
Avatar billede lclemens Nybegynder
26. januar 2013 - 17:02 #1
Mon ikke du leder efter denne funktion:

http://php.net/manual/en/function.http-build-query.php
Avatar billede olebole Juniormester
26. januar 2013 - 17:21 #2
<ole>

Eller du kan bruge noget i stil med:

function addVar($url, $name, $value) {
    $url .= (strpos($url, '?')!==false ? '&' : '?');
    return $url.$name.'='.urlencode($value);
}

echo addVar('http://domain.dk?foo=bar', 'baz', 'foobar');

/mvh
</bole>
Avatar billede Fnugus Nybegynder
26. januar 2013 - 23:03 #3
Jeg vil tro, at man burde kunne gøre noget i stil med

If(isset($_GET))
    // der er allerede værdier, brug &
Else
    // der er ingen værdier i forvejen, brug ?
Avatar billede olebole Juniormester
26. januar 2013 - 23:48 #4
#3: Den vil altid bruge '&', da $_GET array'et altid er sat. I stedet kunne man:

if (empty($_GET)) {
    // Brug '?'
} else {
    // Brug '&'
}

- og med funktionen fra #2:

function addVar($url, $name, $value) {
    $url .= empty($_GET) ? '?' : '&');
    return $url.$name.'='.urlencode($value);
}
Avatar billede olebole Juniormester
26. januar 2013 - 23:49 #5
Ups ... en slutparentes for meget  =)

function addVar($url, $name, $value) {
    $url .= empty($_GET) ? '?' : '&';
    return $url.$name.'='.urlencode($value);
}
Avatar billede Mik2000 Professor
27. januar 2013 - 02:00 #6
Hej

Den i #2 er supergod

Jeg har arbejdet lidt videre med den
$parameters er de nye parametre der skal ændres eller tilføjes
$para er de parametre der er medsendt i url i forvejen uden spørgsmålstegn foran.

Det hele virker som sådan undtagen det med at opdaterer eksisterende.

Understående uddrag af koden tjekker fint om det nye parameter findes i de eksisterende.
Men der hvor der så står // UDSKIFT VARIABEL med den nye, skal der være noget kode, som udskifter dem

Dvs.
$para kunne være abc=123&dce=456&qwe=987
$p_key kunne være dce ($p_value kunne være 777)

Når $p_key så er fundet i $para, så den skifte værdien efter = til $p_value og på den måde opdaterer parameteret

Så med ovenstående eksempel skulle den returnerer en linje a la
abc=123&dce=777&qwe=987

Håber det giver mening.
Uddrag af den kodedel der skal skifte er herunder

if (strpos($para, $p_key)!== false) {
    // UDSKIFT VARIABEL med den nye
}


Herunder er den fulde kode

function url_add_replace_parameters($parameters, $url, $para){
    foreach($parameters as $p_key => $p_value) {
        $url .= (strpos($url, '?')!==false ? '&' : '?'); //if/else i simpel udgave
            if (strpos($para, $p_key)!== false) {
                // UDSKIFT VARIABEL med den nye
            } else {
                $url = $url.$p_key.'='.urlencode($p_value);
            }
    }
    return $url;
}
Avatar billede Mik2000 Professor
27. januar 2013 - 14:49 #7
Havde egentlig ikke behov for at skifte ud kunne jeg se.

Så brugte Oles fra #2

Så point til Ole - har selv lavet et svar, for mener Ole plejer at skrive han ikke samler på point. Men hvis du vil have dem, så er det selvfølgelig dine Ole :)
Avatar billede olebole Juniormester
27. januar 2013 - 18:31 #8
Du har helt ret. Du accepterer bare selv dit svar  =)

Du kunne også prøve en lidt anden approach:

function add2query($str, $key, $val) {
    $val = urlencode($val);
    $q = preg_replace("#\b".$key."=.*?(&|$)#", $key.'='.$val, $str);
    return $q===$str ? $str.'&'.$key.'='.$val : $q;
}

$query = $_SERVER['QUERY_STRING'];
// Tilføjer en ny variabel
$query = add2query($query, 'wxz', '777');
// Sætter ny værdi på bestående variabel
$query = add2Query($query, 'dce', '888');

echo 'http://domain.dk/side.php?'.$query;[/div]
Avatar billede olebole Juniormester
27. januar 2013 - 18:32 #9
function add2query($str, $key, $val) {
    $val = urlencode($val);
    $q = preg_replace("#\b".$key."=.*?(&|$)#", $key.'='.$val, $str);
    return $q===$str ? $str.'&'.$key.'='.$val : $q;
}

$query = $_SERVER['QUERY_STRING'];
// Tilføjer en ny variabel
$query = add2query($query, 'wxz', '777');
// Sætter ny værdi på bestående variabel
$query = add2Query($query, 'dce', '888');

echo 'http://domain.dk/side.php?'.$query;
Avatar billede Mik2000 Professor
27. januar 2013 - 20:00 #10
Tak for de sidste svar også :)
Avatar billede olebole Juniormester
27. januar 2013 - 20:26 #11
You're welcome  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester