Checken of er een variabele in url zit
Mijn zondag is voor het grootste deel gegaan naar het uitpuzzelen van het volgende:
Ik heb meerdere pagina's:
index.php, shop.php en contact.php (en nog veel meer, maar die zijn ff weggelaten)
Het gaat om een webshop die in het nederlands en engels kan. Er staan twee linkjes bovenaan de pagina:
<a href="?language=nl¤cy=EUR">Nederlands</a>
<a href="?language=en¤cy=USD">Engels</a>
Dit werkt prima bij een pagina zoals index.php of contact.php. Maar als men bij shop.php op één van de twee talen klikt, gaat het fout.
Dan krijg je bijvoorbeeld als url:
http://www.mijnsite.nl/shop.php?pid=23&cat=8?language=nl¤cy=EUR
Het vraagteken voor language moet dan dus een & zijn.
Ik kan niet standaard op shop.php het volgende doen:
<a href="&language=nl¤cy=EUR">Nederlands</a>
<a href="&language=en¤cy=USD">Engels</a>
Als ik dat doe dan blijven de variabelen $pid en $cat niet behouden in de url. Je krijgt dan dus shop.php&language=nl¤cy=EUR
Ik hoop dat het een beetje duidelijk is, ik vind het moeilijk uit te leggen. Als er vragen zijn hoor ik het graag. Ook oplossingen zie ik natuurlijk heeel graag tegemoet :p
Gewoon zien wat de vorige waren... en die erin zetten
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Matthias R
Code (php)
dat zou moeten werken volgens mij.
Maar als ik me niet vergis, haalt php_self de Get's niet mee terug..
die haalt gwn index.php / home.php /.. toch?
Gewijzigd op 01/01/1970 01:00:00 door Matthias R
Niet dat ik weet, ik werk er niet echt vaak mee.
kan je dit stukje uitleggen?
De rest wijst zichzelf lijkt mij.
geniaal dat een dergelijke functie bestaat!!
Maar, zou onderstaand voorbeeld werken in dit geval?
Er zit alleen nog een klein foutje in:
Als je een paar keer wisselt van taal, dan krijg je dit:
shop.php?cPath=21&language=en¤cy=USD&language=nl¤cy=EUR&language=en¤cy=USD&language=nl¤cy=EUR&language=en¤cy=USD&language=en¤cy=USD&language=nl¤cy=EUR&language=en¤cy=USD&language=en¤cy=USD&language=en¤cy=USD&language=en¤cy=USD
Iemand een idee hoe ik ervoor kan zorgen dat er niet steeds een nieuwe variabele in de url komt, maar dat gewoon de variabele wordt vervangen? dus 'nl' wordt 'en' en 'eur' wordt 'USD' en ook andersom??
Gewijzigd op 01/01/1970 01:00:00 door Anne
Alléén als die $_GET-waarden bestaan. Zo niet dan gaat het fout.
http_build_query kan je volgens mij wel een url maken.
Dan moet je $_GET aan je eigen array mergen (array_merge) zodat die waarde maar een keer voor kan komen.
Met Dan moet je $_GET aan je eigen array mergen (array_merge) zodat die waarde maar een keer voor kan komen.
Amai dat gaat ver :p
Lijkt mij juist makkelijker, dat je gewoon even een array'tje met waarden kan geven aan die functie en dat die dan leuk d'r even een url van bakt.
Let overigs ook op met $_SERVER['PHP_SELF'], die kan gevaarlijk zijn.
Edit:
Matthias schreef op 26.07.2009 19:24:
Jeps,
geniaal dat een dergelijke functie bestaat!!
geniaal dat een dergelijke functie bestaat!!
$_SERVER['QUERY_STRING'] is geen functie, dat is gewoon een waarde van een array.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$get = (isset($_GET)) ? $_GET : array();
foreach($get as $key => $value)
{
if($key == 'language' or $key == 'currency')
{
unset($_GET[$key]);
}
}
$var = '?';
if(count($_GET) > 0)
{
foreach($_GET as $key => $value)
{
$var .= $key . '=' . $value . '&';
}
}
echo 'shop.php' . $var . 'language=nl¤cy=EUR';
?>
$get = (isset($_GET)) ? $_GET : array();
foreach($get as $key => $value)
{
if($key == 'language' or $key == 'currency')
{
unset($_GET[$key]);
}
}
$var = '?';
if(count($_GET) > 0)
{
foreach($_GET as $key => $value)
{
$var .= $key . '=' . $value . '&';
}
}
echo 'shop.php' . $var . 'language=nl¤cy=EUR';
?>
Je geeft aan een URL te kunnen maken http_build_query en vervolgens array_merge eraan koppelen. Ik heb het hele verhaal doorgelezen op php.net achter deze twee functies, maar ik zou niet weten hoe ik dit doe met betrekking tot mijn 'probleem'...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$data = array('pid' => 23, 'cat' => 8, 'language' => 'nl', 'currency' => 'EUR'); // Dit willen we in de url krijgen.
$data = array_merge($_GET, $data); // Voor als er nog data in de url staat die je wilt bewaren. Zie php.net voor volgorde
$url = http_build_query($data); // Url maken.
var_dump($data, $url); // Zie php.net/var_dump
/* Levert:
["blabla"]=>
string(4) "test"
["testtest"]=>
string(5) "blaat"
["cat"]=>
int(8)
["pid"]=>
int(23)
["language"]=>
string(2) "nl"
["currency"]=>
string(3) "EUR"
}
string(84) "blabla=test&testtest=blaat&cat=8&pid=23&language=nl¤cy=EUR"
*/
?>
$data = array('pid' => 23, 'cat' => 8, 'language' => 'nl', 'currency' => 'EUR'); // Dit willen we in de url krijgen.
$data = array_merge($_GET, $data); // Voor als er nog data in de url staat die je wilt bewaren. Zie php.net voor volgorde
$url = http_build_query($data); // Url maken.
var_dump($data, $url); // Zie php.net/var_dump
/* Levert:
["blabla"]=>
string(4) "test"
["testtest"]=>
string(5) "blaat"
["cat"]=>
int(8)
["pid"]=>
int(23)
["language"]=>
string(2) "nl"
["currency"]=>
string(3) "EUR"
}
string(84) "blabla=test&testtest=blaat&cat=8&pid=23&language=nl¤cy=EUR"
*/
?>
Edit: blabla en testtest komen dus uit de $_GET. Let wel op dat je nooit zomaar $_GET, $_POST of $_REQUEST moet gebruiken. Als je die echt gaat gebruiken, bijvoorbeeld in een db stoppen maak in dat geval dan gebruik van mysql_real_escape_string.