Checken of er een variabele in url zit
Beste allemaal,
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
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
Wat je kan doen is:
Gewoon zien wat de vorige waren... en die erin zetten
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.
Kan ook ja :p
Maar als ik me niet vergis, haalt php_self de Get's niet mee terug..
die haalt gwn index.php / home.php /.. toch?
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.
@santhe
kan je dit stukje uitleggen?
kan je dit stukje uitleggen?
Als je bijv. shop.php?a=100&b=200 hebt dan zit er in $_SERVER['QUERY_STRING'] a=100&b=200
De rest wijst zichzelf lijkt mij.
De rest wijst zichzelf lijkt mij.
Jeps,
geniaal dat een dergelijke functie bestaat!!
Maar, zou onderstaand voorbeeld werken in dit geval?
geniaal dat een dergelijke functie bestaat!!
Maar, zou onderstaand voorbeeld werken in dit geval?
@SanThe, onwijs bedankt! Precies wat ik bedoelde!!
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??
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.
Met 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.
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
Hoezo? Wat is daar dan zo moeilijk aan?
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:
$_SERVER['QUERY_STRING'] is geen functie, dat is gewoon een waarde van een array.
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:
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.
Beetje ingewikkeld geworden maar het werkt wel.
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';
?>
Bedankt Karl!!
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'...
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'...
Misschien maakt dit voorbeeld het een en ander duidelijk:
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.
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.




