Avatar billede gedekid Nybegynder
22. februar 2013 - 09:50 Der er 2 kommentarer

GET form bruger gammel parameter ved ny indtastning

Hej eksperter,

Jeg har et lille problem der er tæt på at drive mig ud i vanvid.
Jeg har en side hvor man kan indtaste at man ønsker X antal af nogle forskellige produkter. Så klikker man næste og indtastningen ryger så via formen ud som GET parametre og man bliver sendt videre til en anden side hvor man så kan indtaste mål. Mit problem er så at hvis man f.eks. trykker "forrige trin" og i en eller flere felter, ændrer antallet fra f.eks. 7 til 4 og "sender" formularen igen, så ryger der en ekstra parameter i adresse linjen, i stedet for at opdatere parameteren.

Jeg har f.eks. et felt der hedder "udluftninger".
Den kommer så første gang i URLen med &udluftninger=7

og når jeg så ændrer tallet så kommer der i starten af URLen &udluftninger=4, men &udluftninger=7 er stadig i URLen

Jeg har google mig frem til funktionen addURLParameter:

---

function addURLParameter($url, $paramName, $paramValue) {
    $url_data = parse_url($url);
           
    if(!isset($url_data["query"]))
    $url_data["query"]="";

    $params = array();
    parse_str($url_data['query'], $params);
    $params[$paramName] = $paramValue;
   
    $url_data['query'] = http_build_query($params);
   
    return build_url($url_data);
}


function build_url($url_data) {
    $url="";
   
    if(isset($url_data['host'])) {
        $url .= $url_data['scheme'] . '://';
        if (isset($url_data['user'])) {
            $url .= $url_data['user'];
                if (isset($url_data['pass'])) {
                    $url .= ':' . $url_data['pass'];
                }
            $url .= '@';
        }
        $url .= $url_data['host'];
        if (isset($url_data['port'])) {
            $url .= ':' . $url_data['port'];
        }
    }
    $url .= $url_data['path'];
    if (isset($url_data['query'])) {
        $url .= '?' . $url_data['query'];
    }
    if (isset($url_data['fragment'])) {
        $url .= '#' . $url_data['fragment'];
    }
    return $url;
}

---

Den forsøger jeg at bruge sådan:

foreach($_GET as $key => $value) {            addURLParameter("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", $key, $value);
}

Men det hjælper ikke en dyt. Den fjerner automatisk den nye &udluftninger=4 og benytter dermed stadig &udluftninger=7 som er den gamle værdi.

En var_dump af $url_data giver mig:

array(4) { ["scheme"]=> string(4) "http" ["host"]=> string(22) "www.domæne.dk" ["path"]=> string(19) "/ny/formhandler.php" ["query"]=> string(314) "vent_45=&udluftninger=4&udluftning_fald=&udluftning_ventitegl=&tagfod=fuglegitter&chimney_afstand_tagrende=&udluftninger=7&tagfod=fuglegitter&afslutning_sten=dv&topsten=utop&angle_1=45&mainhouse=1&house=1&rooftype=mu&lang=dk&rooftiletype=1&rid=1&producent=h&newpage=inputdims&next=N%C3%A6ste+trin+%C2%BB" }

Er der en der kan se / ved hvad jeg gør fuldstændig galt!
Avatar billede gedekid Nybegynder
22. februar 2013 - 09:52 #1
Hov

En var_dump af $url_data giver mig:

array(4) {
["scheme"]=> string(4) "http"
["host"]=> string(22) "www.domæne.dk"
["path"]=> string(19) "/ny/formhandler.php"
["query"]=> string(314) "vent_45=&
udluftninger=4
&udluftning_fald=
&udluftning_ventitegl=
&tagfod=fuglegitter
&chimney_afstand_tagrende=
&udluftninger=7
&tagfod=fuglegitter
&afslutning_sten=dv
&topsten=utop
&angle_1=45
&mainhouse=1
&house=1
&rooftype=mu
&lang=dk
&rooftiletype=1
&rid=1
&producent=h
&newpage=inputdims
&next=N%C3%A6ste+trin+%C2%BB" }
Avatar billede erikjacobsen Ekspert
22. februar 2013 - 15:49 #2
Brug nu POST og GET rigtigt.

Det der kommer fra en <form> sender du med POST til en side, der gemmer hvad der nu skal gemmes, og som redirecter (som er en GET) til den side der viser brugeren, hvad der nu skal bruges.
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