beginnersvraag over formulieren
Ik wil graag de mogelijkheid tot een ja,nee vraag voor bevestigen in mijn programmaatjes hebben.
Ik had die in een extra form geprogrammeerd.
Maar wanneer ik die run lijkt het alsof de waarden van de POSTs van het eerste formulier niet onthouden worden, Kan dat kloppen? (omdat ik dan weer in de input mogelijkheid van het eerste form kom.)
Vooral voor bij het wijzigen of verwijderen van gegevens leek het me wel handig om eerst de gegevens te tonen, en daarna om bevestiging vragen met ja/nee vraag.
Ik hoop dat ik duidelijk ben in mijn uitleg.
En ik heb op dit moment even geen idee hoe ik het probleem met eerst gegevens tonen en daarna bevestigen zou kunnen oplossen.
Zijn er andere manieren om daar mee om te gaan?
Hieronder voorbeeld code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
if($_POST["knop"] != "Verzenden") {
?>
<form method="POST" >
Naam : <input type="text" name="naam" "></p>
<p>
<input type="submit" value="Verzenden" name="knop"></p>
</form>
<?php
} else {
echo $_POST["naam"];
if( !$_POST["keuze"] ){
?>
<form method="POST" >
Naam wijzigen ?
<input type="submit" value="Ja" name="keuze">
<input type="submit" value="Nee" name="keuze">
</form>
<?php
} else {
echo $_POST["keuze"];
}
}
?>
if($_POST["knop"] != "Verzenden") {
?>
<form method="POST" >
Naam : <input type="text" name="naam" "></p>
<p>
<input type="submit" value="Verzenden" name="knop"></p>
</form>
<?php
} else {
echo $_POST["naam"];
if( !$_POST["keuze"] ){
?>
<form method="POST" >
Naam wijzigen ?
<input type="submit" value="Ja" name="keuze">
<input type="submit" value="Nee" name="keuze">
</form>
<?php
} else {
echo $_POST["keuze"];
}
}
?>
Gewijzigd op 29/12/2010 09:29:49 door Ellen P
waarom maak je er dan niet een grote <form> van?
Maar ik wel sowieso graag weten hoe je iets dergelijks aanpakt. Want dit soort dingen in 2 stappen heb je toch wel vaker behoefte aan lijkt me.
Gewijzigd op 28/12/2010 18:30:42 door Ellen P
Gewijzigd op 28/12/2010 21:02:08 door - Ariën -
- Aar - op 28/12/2010 18:34:57:
Overigens controleer je of een formulier is ingevuld op deze manier:
Soieso controleer je niet of een formulier is ingevuld maar of het formulier is gesubmit.
Bovendien zou je het inderdaad zo kunnen doen maar mijn voorkeur gaat uit naar de manier waarop ik het hieronder laat zien. Als er namelijk twee submit's aanwezig zijn op dezelfde pagina en je submit een van de twee dan worden ze allebij uitgevoerd.
Het is naar mijn mening beter om het zo te doen.
Code (php)
<form action="" method="post">
<input type="submit" name="ja" value="Ja" />
<input type="submit" name="nee" value="Nee" />
</form>
Gewijzigd op 28/12/2010 18:55:38 door Mike Smit
Even een vraag. Je zegt, je controleert of een formulier is gesubmit. Is dat wat jij doet in je voorbeeld met isset(), dus of die variabelen gezet zijn?.
Bedankt voor de reacties.
Maar jammer genoeg gaan die voorbij aan mijn probleem.
Mijn probleem heeft er mee te maken dat ik binnen 1 php-programma om input in een formulier, en daarna een bevestiging wil vragen.
Stel je wilt een item verwijderen. Je vraagt de id van dat item. Zoekt item op in de database. Toont gekoppelde gegevens. En stelt de Janee vraag of dit item verwijderd moet worden.
Hoe doe je dat dan in PHP?
Voorzover ik zie kan in alleen input van gebruikers krijgen via formulieren. Dus ook voor een JA/Nee vraag. Maar blijkbaar kan binnen een php programma maar 1 formulier posten in plaats van 2 of meer.
Hoe moet ik dat dan doen. Want ik had ook al de input en post van het ID.
Of is er een andere manier om dit te hanteren die mij volkomen ontgaat misschien?
Gewijzigd op 28/12/2010 19:08:20 door Ellen P
Overige toelichting/mogelijkheden:
-----------------------------------------------------------------
Je waarschuwt de gebruiker allereerst dat hij of zij op het punt staat om een record uit de database te verwijderen.
Je plaats onder de waarschuwing een checkbox welke moet worden aangevinkt voordat de submit om het record te verwijderen word enabled (de submit moet disabled zijn).
Wanneer de gebruiker de checkbox aanvinkt kun je met javascript de button enabled maken. Vervolgens kan de gebruiker klikken op verwijderen.
Een andere optie is het plaatsen van twee links onder de waarschuwing:
- Ik weet het zeker
- Annuleren
Wanneer de gebruiker op "Ik weet het zeker" klikt stuur je hemd oor naar een pagina welke aan de hand van de meegestuurde $_GET het record gaat verwijderen (verwijder.php?id=[ID]).
Wanneer de gebruiker op "Annuleren" klikt stuur je hem of haar terug naar de vorige pagina.
Ik hoop je zo voldoende te hebben geholpen, wanneer er nog vragen zijn kun je deze uiteraard stellen.
Mike Smit
Gewijzigd op 28/12/2010 19:17:04 door Mike Smit
Javascript ken ik niet. En PHP ben ik dus net mee bezig. Laat ik het daar maar bij houden. PHP vind ik op dit moment al moeilijk genoeg.
Misschien een heel domme vraag. Maar hoe stuur je hem terug naar vorige pagina?
Ik snap hoe ik via een formulier submit door kan sturen. En de optie die je aangeeft om de gebruiker zelf op een link te laten klikken. Had ik nog niet aan gedacht dus dat geeft een mogelijkheid.
Wanneer je niet weet waar de bezoeker vandaan komt kun je hem door middel van een van deze scripts terugsturen:
Gewijzigd op 28/12/2010 19:44:15 door Mike Smit
En als javascript uit staat? ;)
Daar dacht ik net ook aan ik heb mijn post al gewijzigd. :)
Jouw opties kunnen, maar je kan hem ook gewoon hardcoded erin zetten.
Hoe bedoel je hardcoded? Heb ik dat al niet als optie aangediend?
Zet je script tussen code tags: [code.] [/code.] <- zonder de puntjes.
Kijken of een formulier word verzonden:
Code (php)
Nu heb jij het probleem dat je meerdere formulieren hebt. Dan zou ik er zoiets van maken (regel 2 vorige code vervangen):
Je kan ook een if else statement tusen regel 3 en 5 maken zoals dit:
Code (php)
Als je dan weet hoe die velden heten kunnen ze zo afgehandeld worden:
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
Bij dit laatste kan je dan later door middel van een foreach loop doorheen lopen om de errors weer te geven.
Gewijzigd op 29/12/2010 09:12:36 door Milo S
- Aar - op 28/12/2010 18:34:57:
Overigens controleer je of een formulier is verstuurd op deze manier:
Ik wil graag weten waarom dit beter is.
Graag motiveren, want bij mijn script werkt het in principe. En het idee van testen van de POST komt uit het leerboek PHP5 van Arjan Burger en Wouter Tengeler. Is dat dan niet een kwestie van smaak misschien?
Een kwestie van de juiste opbouw.
Ellen P op 29/12/2010 11:04:29:
Graag motiveren, want bij mijn script werkt het in principe. En het idee van testen van de POST komt uit het leerboek PHP5 van Arjan Burger en Wouter Tengeler. Is dat dan niet een kwestie van smaak misschien?
Die (leer)boeken ken ik; ben er ook mee begonnen om php te leren. Achteraf blijken ze leuk/interessant als een soort 1e inleiding, want naar mijn idee staat er veel onjuiste/onvolledige informatie in. Zo werken ze bij query's doorgaans met select * en die() ipv het selecteren van benodigde velden en een nette foutafhandeling. Zelfde voor het controleren of een formulier 'gepost' is.
Overigens: iets kan (in principe) wel werken, maar daarmee is niet gezegd dat het goed is. Mogelijk een toevalstreffer dat het nu goed gaat, maar als je later verder gaat/uitbreid, is er een kans dat het dan niet (meer) goed gaat.
Ellen P:
Graag motiveren, want bij mijn script werkt het in principe. En het idee van testen van de POST komt uit het leerboek PHP5 van Arjan Burger en Wouter Tengeler. Is dat dan niet een kwestie van smaak misschien?
Het werkt misschien wel maar dat zegt niet dat het goed is. PHP heeft 1 heel groot nadeel: Het grijpt in om een script toch goed te laten werken.
En waarom request_method beter is dan isset is omdat sommige versie's van browsers geen waarde van de submit knop meesturen. Dan zal die isset dus nooit werken.
Wouter J op 29/12/2010 11:48:55:
.. omdat sommige versie's van browsers geen waarde van de submit knop meesturen ..
Er hoeft niet altijd op submit geklikt te worden. Veel eenvoudige formulieren verzenden ook bij een 'enter'. En als dat gebeurt werkt het testen op de submitknop niet. En if($_SERVER['REQUEST_METHOD']=="POST") werkt altijd.
Blijkbaar is het leerboek dat ik gebruik niet zo goed. Weet iemand leerboeken voor een beginner die wel goed zijn.
Het is wel handig dat in een dergelijk boek, ook dit soort zaken gemotiveerd wordt.
Want alleen als ik het begrijp onthoud ik het.