/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
replace value i querystring?
Fra : Jesper Brunholm


Dato : 06-02-02 10:52

Jeg har et stort behov for at kunne kalde en side med samme sæt
parametre i querystringen, MEN ændre en enkelt af dem.

til det formål har jeg lavet en lille funktion:

# setVal tager et variabelnavn og giver det en medsendt værdi i den
URI-string som medsendes
function setVal($var, $vaerdi, $rside){
#tager var-navn, værdi og rside fx setVal("&u2",$u2,$rside)
# NB! tager pt kun int-værdier!
if (!stristr($rside, $var)){ # hvis variablen ikke findes
$rside .= "$var=$vaerdi";
} else {
$rside = ereg_replace("($var=[[:digit:]]{1,3})", "$var=$vaerdi", $rside);
}
return $rside;
}

men - den er ikke særligt god fordi jeg ikke er ret god til regex (jeg
har lidt svært ved at fange syntaksen og jeg synes ikke at tingene gør
som jeg forventer ud fra dokumentationen - og ja - jeg tester på lukkede
sider hvor der ikke er andet til at påvirke.)

Den kan pt kun finde ud af det hvis værdien er et tal - jeg ville gerne
kunne arbejde med bogstavværdier også... Egentlig er funktionen simpel:
find strengen "&varNavn=**" og udskift stjernerne - dvs alt indtil næste
"&" med den medsendte værdi...

Jeg håber at nogen vil hjælpe mig - jeg er kørt lidt fast

Det er på siderne
<http://cepheus.nat.sdu.dk/IT-Vest/kurser.php?id=6&k=1&Sem=FS2002&p=2>

venligst

Jesper Brunholm


 
 
Thomas Lindgaard (06-02-2002)
Kommentar
Fra : Thomas Lindgaard


Dato : 06-02-02 11:22

Davs

> Jeg har et stort behov for at kunne kalde en side med samme sæt
> parametre i querystringen, MEN ændre en enkelt af dem.
>
> til det formål har jeg lavet en lille funktion:
>
> # setVal tager et variabelnavn og giver det en medsendt værdi i den
> URI-string som medsendes
> function setVal($var, $vaerdi, $rside){
> #tager var-navn, værdi og rside fx setVal("&u2",$u2,$rside)
> # NB! tager pt kun int-værdier!
> if (!stristr($rside, $var)){ # hvis variablen ikke findes
> $rside .= "$var=$vaerdi";
> } else {
> $rside = ereg_replace("($var=[[:digit:]]{1,3})", "$var=$vaerdi",
$rside);
> }
> return $rside;
> }
>
> men - den er ikke særligt god fordi jeg ikke er ret god til regex (jeg
> har lidt svært ved at fange syntaksen og jeg synes ikke at tingene gør
> som jeg forventer ud fra dokumentationen - og ja - jeg tester på lukkede
> sider hvor der ikke er andet til at påvirke.)
>
> Den kan pt kun finde ud af det hvis værdien er et tal - jeg ville gerne
> kunne arbejde med bogstavværdier også... Egentlig er funktionen simpel:
> find strengen "&varNavn=**" og udskift stjernerne - dvs alt indtil næste
> "&" med den medsendte værdi...
>
> Jeg håber at nogen vil hjælpe mig - jeg er kørt lidt fast
>
> Det er på siderne
> <http://cepheus.nat.sdu.dk/IT-Vest/kurser.php?id=6&k=1&Sem=FS2002&p=2>
>
> venligst
>
> Jesper Brunholm


Du får lige et svar, som slet ikke har noget med noget at gøre... det har i
hvert fald ikke noget med ereg at gøre. Jeg har lavet (er ved at lave) en
klasse, som skal kunne gøre det samme.

Du laver et url-object ved at skrive $bla = new cURL(en url med nogle
options), og så kan du expande den i vildskab, f.eks.
$bla->expand("Hej=fætter") eller med vilkårligt mange argumenter
$bla->expand("Hej=fætter", "har=du", "det=godt", "Farvel=fætter").

class cURL
{
var $theURL;


//
Constructor ----------------------------------------------------------------
------------
function cURL($URL = "")
{
$this->theURL = $URL;
}


// Methods the extend or contract the
link ------------------------------------------------
function expand()
{
// Seperate the url from the querystring and make an assoc. array from
the querystring
$url = strtok($this->theURL, "?");
$querystring = strtok("?");

$exploded_querystring = explode("&", $querystring);

$querystring_array = array();
foreach ($exploded_querystring as $expansion)
{
$key = strtok($expansion, "=");
$value = strtok("=");
$querystring_array[$key] = $value;
}

// Run through the expansions and update
$expansion_array = func_get_args();
foreach ($expansion_array as $expansion)
{
$key = strtok($expansion, "=");
$value = strtok("=");
$querystring_array[$key] = $value;
}

// Create the new url
$i = 0;
while ( list($key, $value) = each($querystring_array) )
{
$url .= (( $i++ == 0 ) ? "?" : "&").$key."=".$value;
}

return $url;
}

function contract()
{

}


// Get
function -------------------------------------------------------------------
--------
function get()
{
return $this->theURL;
}

function self()
{
global $QUERY_STRING;

$url = new cURL($this->get());
$exploded_querystring = explode("&", $QUERY_STRING);
foreach ($exploded_querystring as $expansion)
{
$url = new cURL($url->expand($expansion));
}

return $url->get();
}
}

Funktionen til at fjerne en option fra url'en mangler, men metoden expand
gør vist det du gerne vil... men det er jo meget kode i forhold til din
løsning :)



Jesper Brunholm Scha~ (06-02-2002)
Kommentar
Fra : Jesper Brunholm Scha~


Dato : 06-02-02 15:30

> > Jeg har et stort behov for at kunne kalde en side med samme sæt
> > parametre i querystringen, MEN ændre en enkelt af dem.

Th Lindgaard skrev
> Du får lige et svar, som slet ikke har noget med noget at gøre... det har
i
> hvert fald ikke noget med ereg at gøre. Jeg har lavet (er ved at lave) en
> klasse, som skal kunne gøre det samme.

ja - men som du skriver så er det godt nok meget kode til formålet - jeg har
haft det der med at parse elementerne ud i et array oppe og vende i
tankerne, men blev enig med mig selv om at det er smartere og nok mere
effektivt med replacement af en value

Men tak for buddet

mvh

Jesper



Thomas Lindgaard (06-02-2002)
Kommentar
Fra : Thomas Lindgaard


Dato : 06-02-02 16:18

Hej igen Jesper (denne gang ikke pr. mail)

Selv tak, ingen årsag og ingen undskyldning nødvendig :)

Lige en hurtig ide... kan du ikke gøre noget i retning af det her:

$rside = ereg_replace("($var=[^&]*)", "$var=$vaerdi", $rside);
eller
$rside = ereg_replace("($var=[\w]*)", "$var=$vaerdi", $rside);

Det virker med garanti ikke ;) men ideen er at matche på "$var=" efterfulgt
af noget som ikke er "&" eller at matche på word characters. Det burde gøre
det af med dit integer-problem...

Men det er ikke afprøvet (eller sikkert heller ikke syntaktisk korrekt).

Mvh. Thomas



Jesper Brunholm (07-02-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 07-02-02 16:59

Thomas Lindgaard wrote:

> Lige en hurtig ide... kan du ikke gøre noget i retning af det her:
>
> $rside = ereg_replace("($var=[^&]*)", "$var=$vaerdi", $rside);
> eller
> $rside = ereg_replace("($var=[\w]*)", "$var=$vaerdi", $rside);


hmmm - jo - sikkert - det vil i hvert fald være en god start når jeg
skal omskrive funktionen - takker!

venligst

Jesper


Søg
Reklame
Statistik
Spørgsmål : 177505
Tips : 31968
Nyheder : 719565
Indlæg : 6408554
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste