[PHP/HTML] Dynamische option select met php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Ik wil aan de hand van een dropdown list de bezoeker de mogenlijkheid geven om te kiezen waar hij wilt zoeken.

Opzich heb ik al het een en ander uitgesloten en weet ik exact waar het mis gaat.

[code=php]
<p>
<span class="nobr">
<form action="<?php
if (selected == 1) {
echo "zoeken_in_blog.php";
}
else {
echo "zoeken_in_video.php";
}
?>" method="get">
<select name="selected">
<option selected value="0">Kies...</option>
<option value="1">Blog</option>
<option value="2">Video</option>
</select>
Zoek

<input alt="Snelzoeken" type="text" name="q" value="" />
<input alt="Zoekveld" type="submit" value="Zoek" />
</form>
</span>
</p>
[/code=php]

Welke selectie ik ook maak, het if...else code blok zal altijd "zoeken_in_video.php" aanspreken.
Hij slaat dus de if over en zal altijd denken dat else dan maar goed moet wezen.

Ik selecteer binnen het de lus niet de gekozen optie
Maar hoe roep ik binnen php dan de gekozen optie ?

Iemand die mij misschien wat verheldering hierover kan geven?

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

zoals de syntax highlighting al keurig aangeeft is 'selected' in de php context geen variable.
Als het goed is krijg je ook een warning: use of undefined constant (oid)

Ik denk dat je $_GET['selected'] moet hebben ;)

Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
TheRookie schreef op dinsdag 13 januari 2009 @ 15:08:
zoals de syntax highlighting al keurig aangeeft is 'selected' in de php context geen variable.
Als het goed is krijg je ook een warning: use of undefined constant (oid)

Ik denk dat je $_GET['selected'] moet hebben ;)
it did the trick, thnx :)

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Ik kan je aanraden om (tijdens het developen)
PHP:
1
error_reporting(E_ALL);
bovenin je script te zetten.
De resulterende warning had je al een eind in de goede richting kunnen helpen

Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Het script wilt het ene moment wel op een gekozen woord zoeken, en op een ander moment beland ik gewoon op mijn 404 pagina :S

foutcode zonder iets geselecteerd te hebben:

[code=html]
<form action="<br />
<b>Notice</b>: Undefined index: selected in <b>/storage/...../zoekblog.php</b> on line <b>4</b><br />
zoeken_in_video.php" method="get">
[code=html]

[ Voor 40% gewijzigd door Zakkenwasser op 13-01-2009 15:26 ]

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Dit valt gewoon onder debuggen hoor. Undefined indexes betekent dat je die var daar voor het eerst gebruikt, zonder dat er eerst een waarde aan is gehangen. PHP weet het dan ook niet en waarschuwt je gewoon dat er een mogelijke fout in zit.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 19:48

Cyphax

Moderator LNX
MrJey schreef op dinsdag 13 januari 2009 @ 15:22:
[...]

Het script wilt het ene moment wel op een gekozen woord zoeken, en op een ander moment beland ik gewoon op mijn 404 pagina :S

foutcode zonder iets geselecteerd te hebben:

[code=html]
<form action="<br />
<b>Notice</b>: Undefined index: selected in <b>/storage/...../zoekblog.php</b> on line <b>4</b><br />
zoeken_in_video.php" method="get">
[code=html]
Dat is zelfs nieteens een echte waarschuwing, er staat "Notice" voor. Wel iets om wat mee te doen, dan kan je van die bugs voorkomen waar je anders lang naar moet zoeken.

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Zonder iets geselecteerd te hebben zal $_GET['selected'] inderdaad niet gevuld zijn ;)

Deze notice kan je weer voorkomen door om je huidige if statement (bijvoorbeeld)
PHP:
1
2
3
4
5
6
if(isset($_GET['selected']) && is_int($_GET['selected'])){
// je code
} else {
// nog geen selectie gemaakt, of een niet-int selectie
  echo "de default php die je wil gebruiken als er nog niets is geselecteerd";
}
te zetten

@hieronder:
vandaar mijn opmerking "tijdens developen" :P
Desalniettemin is het wel verstandig om dit soort notices te voorkomen, omdat (zoals al eerder gezegd) dit vervelende zoektochten naar bugs kan voorkomen.

[ Voor 21% gewijzigd door TheRookie op 13-01-2009 15:51 ]


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
TheRookie schreef op dinsdag 13 januari 2009 @ 15:41:
Zonder iets geselecteerd te hebben zal $_GET['selected'] inderdaad niet gevuld zijn ;)

Deze notice kan je weer voorkomen door om je huidige if statement (bijvoorbeeld)
PHP:
1
2
3
4
5
6
if(isset($_GET['selected']) && is_int($_GET['selected'])){
// je code
} else {
// nog geen selectie gemaakt, of een niet-int selectie
  echo "de default php die je wil gebruiken als er nog niets is geselecteerd";
}
te zetten
De code werkt wel, maar op het moment van een verandering van een selectie, voert hij alsnog de default uit.

Het live veranderen van een form action na het selecteren wilt niet, komt dit omdat php te beperkt hierin is?

Selecteer ik blog dan krijg ik:
"zoeken_in_blog.php?selected=1&q=overdatum"

Selecteer ik video dan krijg ik:
"zoeken_in_blog.php?selected=2&q=overdatum"

[ Voor 77% gewijzigd door Zakkenwasser op 13-01-2009 16:04 ]

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

MrJey schreef op dinsdag 13 januari 2009 @ 15:47:
Het live veranderen van een form action na het selecteren wilt niet, komt dit omdat php te beperkt hierin is?
Nee, dat komt vooral omdat je het hele concept met betrekking tot serverside en clientside niet helemaal begrepen hebt.

- request komt binnen bij apache (of andere server)
- apache geeft het door aan php
- php genereert een bak html
- apache stuurt dit terug naar de client
- browser op de client geeft de boel weer
- browser voert eventueel wat javascript uit

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Janoz schreef op dinsdag 13 januari 2009 @ 16:07:
[...]

Nee, dat komt vooral omdat je het hele concept met betrekking tot serverside en clientside niet helemaal begrepen hebt.

- request komt binnen bij apache (of andere server)
- apache geeft het door aan php
- php genereert een bak html
- apache stuurt dit terug naar de client
- browser op de client geeft de boel weer
- browser voert eventueel wat javascript uit
Ik had dat heel even over het hoofd gezien.

php code wordt inderdaad door de server gemaald, en uitgespuugd in de browser, wil je dit verder manipuleren dan moet dat met ajax of javascript.

Desondanks heb ik dit wat omslachtig aangepakt.
Em inmiddels met php alleen "zoeken_in_blog.php" aangepast wat hij moet doen zodra hij een selected = 2 / selected = 1 binnen krijgt.

Toch bedankt!

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]

Pagina: 1