Avatar billede dizzim Nybegynder
19. august 2004 - 22:34 Der er 16 kommentarer og
1 løsning

Hvordan splitter man en URL op, eller overskriver en parameter?

Jeg har lavet denne funktion:

$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] ;

echo "<a href='$url&subid=$id'>$name</a>";

($id bliver hentet fra en database... det samme gælder $name...)

Men problemet er bare at hvis man trykker mere end een gang så tilføjer den bare endnu en &subid=x istedet for at overskrive den gamle... Jeg kunne forstille mig det ville give en del problemer så jeg ville bare høre om der er en måde jeg kan få den til at "overskrive" subid'en i stedet for at tilføje den bagefter?
Avatar billede dennismp Nybegynder
19. august 2004 - 22:42 #1
parse_url kan dele en url op forskellige dele (scheme, user, password, host, path, query) .. Det kan nok hjælpe dig.
Avatar billede dizzim Nybegynder
19. august 2004 - 22:43 #2
k.. kan du forkllidt nærmere?
(du skal da arbejde lidt for pointene ;)
Avatar billede dennismp Nybegynder
19. august 2004 - 22:43 #3
måske noget i stil med:
$p = parse_url($_SERVER['REQUEST_URI'']);
$url='http://'.$_SERVER['HTTP_HOST']. $p['path'] . '&subid='.$id;
Avatar billede dennismp Nybegynder
19. august 2004 - 22:44 #4
hovsa

$url='http://'.$_SERVER['HTTP_HOST']. $p['path'] . '?subid='.$id;
Avatar billede dennismp Nybegynder
19. august 2004 - 22:47 #5
jeg laver lige et ordenligt eksempel :)
Avatar billede dizzim Nybegynder
19. august 2004 - 22:48 #6
k.. du kan se hvad der sker her www.construction.1go.dk/index.php?pageid=1
Avatar billede sone Nybegynder
19. august 2004 - 22:53 #7
Hvis du med sikkerhed ved hvilke parametre som kan forekomme i URL'en, så kan du opbygge den "manuelt" hver gang:
  $url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].'?param1='.$_GET['param1'].'&subid='.$subid;

Hvis det er variabelt, så kan generere parameter-strengen ud fra $_GET arrayet:
$_GET['subid'] = $subid; // overskriver eller opretter subid
$params = '?';
foreach ($_GET as $key->$value) {
  $params .= $key.'='.urlencode($value);
}
Avatar billede sone Nybegynder
19. august 2004 - 22:54 #8
lille rettelse:
$params .= $key.'='.urlencode($value).'&';
Avatar billede dennismp Nybegynder
19. august 2004 - 22:54 #9
<?php

// Decode URL
$params = array();
$urlsplit = parse_url($_SERVER['REQUEST_URI']);
if( isset( $urlsplit['query'] ) ) {
    $pairs = explode('&',$urlsplit['query']);
    foreach($pairs as $single) {
        list($name,$value) = explode('=',$single);
        $params[urldecode($name)] = urldecode($value);
    }
}
else {
    $params = array();
}

// Ret i url, tilføj fx subid

$params['subid'] = 42;

// Saml URL igen
$query = array();
foreach($params as $name => $value)
    $query[] = urlencode($name) . '='.urlencode($value);
$url='http://'.$_SERVER['HTTP_HOST'].$urlsplit['path'].'?'.join('&',$query);
print $url;
?>
Avatar billede dennismp Nybegynder
19. august 2004 - 22:56 #10
Ah sone, smart.

Eksempel omskrevet :-)

<?php

// Decode URL
$params = array();
$urlsplit = parse_url($_SERVER['REQUEST_URI']);

// Ret i url, tilføj fx subid

$_GET['subid'] = 42;

// Saml URL igen
$query = array();
foreach($_GET as $name => $value)
    $query[] = urlencode($name) . '='.urlencode($value);
$url='http://'.$_SERVER['HTTP_HOST'].$urlsplit['path'].'?'.join('&',$query);
print $url;
?>

(nu er de næsten ens)
Avatar billede dizzim Nybegynder
19. august 2004 - 23:04 #11
tak til jer begge to..
af en eller anden grund kom der noget med cgi bin da jeg prøvede sonnes metode, men da den inspirerede til dennismp's final ting må i vel dele pointene.. hvis i vil...
anbyways.. lig et svar og pointene er dine dennis...
Avatar billede dennismp Nybegynder
19. august 2004 - 23:04 #12
Sikken en gang hø; ignorer mine indlæg.
Avatar billede dennismp Nybegynder
19. august 2004 - 23:07 #13
$urlsplit = parse_url($_SERVER['REQUEST_URI']);
$_GET['subid'] = 42;

// Saml URL igen
$query = array();
foreach($_GET as $name => $value)
    $query[] = urlencode($name) . '='.urlencode($value);
$url='http://'.$_SERVER['HTTP_HOST'].$urlsplit['path'].'?'.join('&',$query);
print $url;

Sådan. Jeg vil gerne dele med sone - hans idé med at bruge $_GET direkte er lidt mere elegant end at gøre det manuelt.
Avatar billede sone Nybegynder
20. august 2004 - 08:07 #14
Man kunne stryke parse_url (da det er en lidt dyrere funktion) til fordel for $_SERVER['SCRIPT_NAME']
Avatar billede sone Nybegynder
20. august 2004 - 08:07 #15
stryge...
Avatar billede dennismp Nybegynder
20. august 2004 - 10:16 #16
Sone vel du have din del af de points jeg fik?
Avatar billede sone Nybegynder
20. august 2004 - 13:44 #17
ja, så skidt...
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