Checken of er een variabele in url zit

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Anne

Anne

26/07/2009 18:12:00
Quote Anchor link
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&currency=EUR">Nederlands</a>
<a href="?language=en&currency=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&currency=EUR

Het vraagteken voor language moet dan dus een & zijn.

Ik kan niet standaard op shop.php het volgende doen:
<a href="&language=nl&currency=EUR">Nederlands</a>
<a href="&language=en&currency=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&currency=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
 
PHP hulp

PHP hulp

26/12/2024 01:44:48
 
Matthias R

Matthias R

26/07/2009 18:19:00
Quote Anchor link
Wat je kan doen is:
Gewoon zien wat de vorige waren... en die erin zetten

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="?pid=<?php echo $_GET['pid']; ?>&cat=<?php echo $_GET['cat']; ?>&language=en&currency=USD">Engels</a>
Gewijzigd op 01/01/1970 01:00:00 door Matthias R
 
Stefan

Stefan

26/07/2009 18:21:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<a href="<? echo $_SERVER['PHP_SELF']; ?>&language=nl&currency=EUR">Nederlands</a>
<a href="<? echo $_SERVER['PHP_SELF']; ?>&language=en&currency=USD">Engels</a>


dat zou moeten werken volgens mij.
 
Matthias R

Matthias R

26/07/2009 18:22:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door Matthias R
 
Stefan

Stefan

26/07/2009 18:23:00
Quote Anchor link
Niet dat ik weet, ik werk er niet echt vaak mee.
 
- SanThe -

- SanThe -

26/07/2009 18:27:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if($_SERVER['QUERY_STRING'] != '')
{

    $var = '?' . $_SERVER['QUERY_STRING'] . '&';
}

else
{
   $var = '?';
}

echo 'shop.php' . $var . 'language=nl&currency=EUR';
?>
 
Matthias R

Matthias R

26/07/2009 18:42:00
Quote Anchor link
@santhe
kan je dit stukje uitleggen?
 
- SanThe -

- SanThe -

26/07/2009 18:46:00
Quote Anchor link
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.
 
Matthias R

Matthias R

26/07/2009 19:24:00
Quote Anchor link
Jeps,
geniaal dat een dergelijke functie bestaat!!
Maar, zou onderstaand voorbeeld werken in dit geval?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="?pid=<?php echo $_GET['pid']; ?>&cat=<?php echo $_GET['cat']; ?>&language=en&currency=USD">Engels</a>
 
Anne

Anne

26/07/2009 19:46:00
Quote Anchor link
@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&currency=USD&language=nl&currency=EUR&language=en&currency=USD&language=nl&currency=EUR&language=en&currency=USD&language=en&currency=USD&language=nl&currency=EUR&language=en&currency=USD&language=en&currency=USD&language=en&currency=USD&language=en&currency=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
 
- SanThe -

- SanThe -

26/07/2009 19:53:00
Quote Anchor link
Alléén als die $_GET-waarden bestaan. Zo niet dan gaat het fout.
 

26/07/2009 19:57:00
Quote Anchor link
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.
 
Matthias R

Matthias R

26/07/2009 20:02:00
Quote Anchor link
Amai dat gaat ver :p
 

26/07/2009 20:04:00
Quote Anchor link
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:
Matthias schreef op 26.07.2009 19:24:
Jeps,
geniaal dat een dergelijke functie bestaat!!

$_SERVER['QUERY_STRING'] is geen functie, dat is gewoon een waarde van een array.
Gewijzigd op 01/01/1970 01:00:00 door
 
- SanThe -

- SanThe -

26/07/2009 20:20:00
Quote Anchor link
Beetje ingewikkeld geworden maar het werkt wel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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&currency=EUR';
?>
 
Anne

Anne

26/07/2009 20:22:00
Quote Anchor link
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'...
 

26/07/2009 20:37:00
Quote Anchor link
Misschien maakt dit voorbeeld het een en ander duidelijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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&currency=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.
Gewijzigd op 01/01/1970 01:00:00 door
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.