[PHP] Variabelen in URL veranderen tussen andere variabelen

Pagina: 1
Acties:
  • 398 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een complex probleem met een stuk code wat ik gemaakt heb.

Doormiddel van wat if's zorg ik dat er bepaalde HTML zichtbaar is op de pagina, om deze if's te zetten gebruik ik waarden in de URL.

Voorbeeld:

code:
1
?var1=ja


Nu wil ik meer dingen in de pagina laten zien, doormiddel van queries en if's.

code:
1
?var1=ja&var2=rood&var3=doorzichtig


De variabelen 2 en 3 haal ik door een query uit de database en laat ze zien in de HTML en echo ze ook in een hyperlink zodat ik de waarde kan veranderen.

Doorzichtig naar blank bijvoorbeeld.

Het probleem is dat ik op deze manier alleen de laatste variabele kan veranderen, en dus weer opnieuw moet beginnen. van var1 tot en met var3. Of ik zal hele rare hyperlinks moeten gaan maken die nooit "flexibel" met elkaar zijn en dus een vaste volgorde zullen hebben waar $var2 niet weg kan vallen bijvoorbeeld.

Ik wil dus doormiddel van een hyperlink $var1 of $var3 kunnen veranderen terwijl $var2 altijd zo blijft.

Ik zal de waarden moeten getten en weer terug moeten plaatsen zoals ze waren.

Als ik zo vrij mag zijn om even wat hersenspinsels neer te zetten lijkt het me dat ik een functie zou moeten hebben die die $varX die je wil veranderen POST naar een andere functie die alle $varX GET, de var die je wil vervangen vervangt en dan alles weer naar de browser terug post.

Ik kan niet uitvinden hoe ik simpel:

code:
1
?var1=ja&var2=rood&var3=doorzichtig


kan veranderen in:

code:
1
?var1=nee&var2=rood&var3=doorzichig



Het lijkt zo makkelijk :?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je kunt hier denk ik beter sessies voor gebruiken. Het enig alternatief is je hele $_GET array doorlopen met foreach, iedere keer wanneer je een link toont.

Voor iedere link dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$link = 'hiernaartoe.php';
$first = true;
foreach($_GET as $key => $value) {
  if($key == 'var1') $add = 'var1=nee';
  else $add = $key . '=' . $value;
  if($first) {
    $link .= '?' . $add;
    $first = false;
  }
  else $link .= '&' . $add;
}
$link = rawurlencode($link);

[ Voor 52% gewijzigd door GlowMouse op 27-02-2007 22:16 ]


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
begin eens met de beestjes een naam te geven,
dus geen var1, en var2, maar 'pagina zien', 'kleur' en 'tekenmethode' (om maar wat te noemen)

wat je dan gewoon kan doen is zoiets:

<a
PHP:
1
href="blaat.php?paginazien=<?=$paginazien?>&amp;kleur=<?=$kleur?>&amp;methode=<?=methode?>">linkje</a>

dan maakt het geen drol uit of de variable gezet is of niet, in het ergste geval krijg je zo'n linkje

code:
1
?paginazien=&kleur=&methode=

maar dit werkt gewoon prima


edit:
hoe haal jij trouwens je vars op?
gewoon dmv $_GET['varnaam'] hoop ik?

dus niet dmv zoiets ranzigs?:
PHP:
1
2
3
4
foreach ($var in $_GET) {
$i++;
$blaat{$i} = $var;
}

[ Voor 16% gewijzigd door BasieP op 27-02-2007 22:15 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sessies zou het mooiste zijn, ben ik mee bezig geweest maar dat is niet echt haalbaar omdat wanneer iemand de pagina verlaat, de sessie blijft bestaan. Ik heb iets in de code geprobeerd te plaatsen ergens dat eerst de sessie verwijderd werd en dat je dan weer de rest van de code ging gebruiken, maar dit werkte helaas niet.

@BasieP: Ja, dat is opzich geen gek idee, maar zo zal je altijd alle URL's in je pagina aan moeten passen als je er iets bij wil plaatsen. Geen gek idee opzich.

Ik get de vars inderdaad zoals je in de "nette code" aangeeft.

Acties:
  • 0 Henk 'm!

  • N3oC
  • Registratie: Juni 2006
  • Laatst online: 19-09 16:56
Met sessies kan je aangeven waneer deze moeten verlopen(session destroy).
Maar hoe/wat had je dan geprobeerd met sessies? Daar kan echt heeeeel veel mee!

https://www.linkedin.com/in/coenversluis || http://www.judovianen.nl


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Het probleem is dat ik op deze manier alleen de laatste variabele kan veranderen, en dus weer opnieuw moet beginnen. van var1 tot en met var3.
Opnieuw beginnen met wat? Bedoel je dat je een string opbouwt en de variabelen achterelkaar plakt?
Of ik zal hele rare hyperlinks moeten gaan maken die nooit "flexibel" met elkaar zijn en dus een vaste volgorde zullen hebben waar $var2 niet weg kan vallen bijvoorbeeld.

Ik wil dus doormiddel van een hyperlink $var1 of $var3 kunnen veranderen terwijl $var2 altijd zo blijft.
Bedoel je zoiets?
PHP:
1
2
3
4
5
6
7
// Kopie van $_GET maken
$_temp = $_GET;

$_temp['var1'] = 'nieuwe';
$_temp['var3'] = 'waarde';

$url_query = http_build_query( $_temp );
De functie http_build_query bestaat pas vanaf PHP5. In de reacties staan een aantal alternatieve functie voor PHP4.

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
N3oC schreef op dinsdag 27 februari 2007 @ 23:08:
Met sessies kan je aangeven waneer deze moeten verlopen(session destroy).
Maar hoe/wat had je dan geprobeerd met sessies? Daar kan echt heeeeel veel mee!
Ik had geprobeerd bij het verzenden van een form op die pagina in de functie 2 variabelen te registeren. Dit werkte prima, maar hoe kom ik van die sessie af als ik de pagina sluit. Wat ik gedaan had, te ranzig voor woorden maar goed om te testen, was ergens in een if die je altijd op die pagina zag zodra je hem bij URL zou openen de sessie verwijderen en dan bij de form weer registeren en er voor zorgen dat het if gedeelte waar het destroyen in stond dan niet zag of geparsed werd in de code na het verzenden.

Dat sessie verhaal moet ik nog nader bekijken, het was gisteren gewoon te laat hiervoor, maar je hebt gelijk... je kunt er heel veel mee.
Icelus schreef op dinsdag 27 februari 2007 @ 23:23:
[...]
Opnieuw beginnen met wat? Bedoel je dat je een string opbouwt en de variabelen achterelkaar plakt?
Ja, daar komt het wel op neer, tenzij ik de variabele zoals eerder aangegeven gewoon leeg laat in de URL, dan zou het weinig uit maken.
[...]
Bedoel je zoiets?
PHP:
1
2
3
4
5
6
7
// Kopie van $_GET maken
$_temp = $_GET;

$_temp['var1'] = 'nieuwe';
$_temp['var3'] = 'waarde';

$url_query = http_build_query( $_temp );
De functie http_build_query bestaat pas vanaf PHP5. In de reacties staan een aantal alternatieve functie voor PHP4.
Hier moet ik me echt over inlezen, PHP4 of 5 maakt weinig uit, kan beide gebruiken, niet in taal 5 trouwens, maar op de server.

Acties:
  • 0 Henk 'm!

  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 20-09 15:34
Even kijken of ik het snap hoor:

je hebt in je $_GET het volgende:
PHP:
1
2
3
$_GET['var1'] == 'ja'
$_GET['var2'] == 'rood'
$_GET['var3'] == 'doorzichtig'


en nu wil je een linkje maken naar een bepaalde pagina, en daar

PHP:
1
?var1=nee&var2=rood&var3=doorzichig


aan meegeven?

Dan bouw je die link toch gewoon als volgt op?

PHP:
1
  <a href="www.eenwebsite.nl/eenpagina.php?var1=<? echo $waardevoorvar1; ?> &.......">


of snap ik nou gewoon niet wat je bedoelt?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat heb ik nu ook gedaan.

Het is ranzig denk ik, maar het werkt, ik kijk de code later na.

Ik heb voor iedere variabele, omdat ik deze ook weer in de pagina print, een

PHP:
1
if(!empty($var)) { echo "$var"; } else { echo "wat anders"; }


lijn gemaakt, het zijn er redelijk wat, maar het werkt wel.

Op deze manier kan je in de adresbalk doen wat je wil en tevens heb je geen probleem met url's in je pagina.

Ik ben geen master PHP-er, maar het werkt en zo kom ik vast wel verder. De code zal ik eens schoonmaken en meer met functies gaan werken, ik denk dat de pagina hier VEEL schoner van wordt ;)

Het kan wat lastig uitleggen zijn, dit komt omdat ik niet de PHP-wijsneus uit wil gaan hangen en bang ben verkeerde termen in de groep te gooien. Het is van mijn kant goed bedoeld, en van jullie kant ook, maar soms hbe ik liever dta mensen me vragen een "ranzig" voorbeeld te geven en verbeterd te worden dan te posten en als n00b gezien te worden.

Niet dat dat n00b me nu zoveel uitmaakt (we vallen om te leren opstaan), staat zo stom op het forum :)

[ Voor 26% gewijzigd door Verwijderd op 28-02-2007 02:02 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Even snel een scriptje getikt, hoop dat het (ongeveer) werkt:
PHP:
1
2
3
4
5
isset($_GET['var1']) ? $var1 = $_GET['var1'] : $var1 = "nee";
isset($_GET['var2']) ? $var2 = $_GET['var2'] : $var2 = "groen";
isset($_GET['var3']) ? $var3 = $_GET['var3'] : $var3 = "15";

print '<a href="index.php?var1='.$var1.'&var2='.$var2.'&var3='.$var3.'">klikkie</a>';

Zoiets?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...

Pagina: 1