Form input onthouden
Bijv ik vul allemaal gegevens in, van naam adres telefoon enz. Maar ik vergeet mijn email.
In mijn php script wordt gekeken of alles ingevuld is. Is dit niet het geval dan geeft ie een melding en verwijst ie me met een <META HTTP-EQUIV=Refresh CONTENT='2; URL=index.php?register'> terug.
Maar dan is alle input weg. Hoe kan ik dit voorkomen?
Groetjes
"
maar zoals ik je tekst begrijp heb je dus een html pagina en een php script dat het vervolgens afhandeld? je kunt beter script boven je html zetten of includen zodat je 1 pagina hebt
door $_POST te plaatsen in je form dus value="maar zoals ik je tekst begrijp heb je dus een html pagina en een php script dat het vervolgens afhandeld? je kunt beter script boven je html zetten of includen zodat je 1 pagina hebt
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if(!isset($_POST['register'])) {
echo "<form method='post' action='index.php'>".
"<input type='hidden' name='register'>" .
"Uw naam: <input type='text' name='reg_naam'><br>" .
"Uw email: <input type='text' name='reg_email'>" .
"<input type='reset' value='Legen'> <input type='submit' value='Registeren'>" .
"</form>";
} else {
$error = "";
if($_POST['reg_naam']<>"") {
$naam = $_POST['reg_naam'];
} else {
$error = $error . "<li>Naam niet ingevuld!</li>";
}
if($_POST['reg_mail']<>"") {
$mail = $_POST['mail'];
} else {
$error = $error . "<li>Mail niet ingevuld!</li>";
}
if($error<>"") {
echo $error . "Een moment geduld aub. U wordt automatisch terug verwzen...<META HTTP-EQUIV=Refresh CONTENT='2; URL=index.php'>";
}
}
?>
if(!isset($_POST['register'])) {
echo "<form method='post' action='index.php'>".
"<input type='hidden' name='register'>" .
"Uw naam: <input type='text' name='reg_naam'><br>" .
"Uw email: <input type='text' name='reg_email'>" .
"<input type='reset' value='Legen'> <input type='submit' value='Registeren'>" .
"</form>";
} else {
$error = "";
if($_POST['reg_naam']<>"") {
$naam = $_POST['reg_naam'];
} else {
$error = $error . "<li>Naam niet ingevuld!</li>";
}
if($_POST['reg_mail']<>"") {
$mail = $_POST['mail'];
} else {
$error = $error . "<li>Mail niet ingevuld!</li>";
}
if($error<>"") {
echo $error . "Een moment geduld aub. U wordt automatisch terug verwzen...<META HTTP-EQUIV=Refresh CONTENT='2; URL=index.php'>";
}
}
?>
Maar zodra die terug is gestuurd naar index.php zijn de _POST waardes verdwenen neem ik aan?
Gewijzigd op 20/12/2012 14:51:36 door Dennis WhoCares
Het je al eens gewerkt met sessions?
- Kijk eens naar empty(). Zo kan je makkelijker kijken of een variabel leeg is. Bv:
- Waarom kopieer je de varible'en op lijn 7, 12 enz? Veel makkelijker is om gewoon de $_POST variabelen te behouden.
- Een waarde toevoegen aan een variabelen gaat zoals jij dat doet, maar kan ook simpel door .= te gebruiken.
- Je manier van errors laten zien in een <li> is netjes, maar vergeet <ul> en </ul> niet. (Waarschijnlijk gebruik je deze wel, maar is het op de code niet te zien)
- Waarom gebruik je een HTML meta refresh? Kijk eens naar header(). (location)
- Mark - op 20/12/2012 14:59:56:
Het je al eens gewerkt met sessions?
En hoe stel je dat dan voor?
Dat ik elke form input opsla in een sessie ? En op de formulier alle values een sessie waarde opgeef?
Wat als de sessie nog niet bestaat? Dan gaat ie toch foutmeldingen geven?
Kijk eens naar de jQuery validate form mogelijkheden. Wellicht dat dit je probleem oplost.
Hier een aantal tutorials.
LEDfan nvt op 20/12/2012 15:01:16:
Enkele tips die je kan opnemen in je code, deze zorgen voor minder schrijfwerk, en meer leesbaarheid. Maar beschouw het als richtlijnen, niet als de beste code.
- Kijk eens naar empty(). Zo kan je makkelijker kijken of een variabel leeg is. Bv:
- Waarom kopieer je de varible'en op lijn 7, 12 enz? Veel makkelijker is om gewoon de $_POST variabelen te behouden.
- Een waarde toevoegen aan een variabelen gaat zoals jij dat doet, maar kan ook simpel door .= te gebruiken.
- Je manier van errors laten zien in een <li> is netjes, maar vergeet <ul> en </ul> niet. (Waarschijnlijk gebruik je deze wel, maar is het op de code niet te zien)
- Waarom gebruik je een HTML meta refresh? Kijk eens naar header(). (location)
Deze code is niet exact wat in mijn script komt.
De formulier wordt uit een andere class gehaald, en aangeroepen vanuit een ander bestand dat vanuit de index wordt aangeroepen
Eigenlijk heeft het betrekking tot een beheerders pagina waar ik mijn pagina's wil beheren. Maar moet er wel een wachtwoord zijn ingevoerd (huidige wachtwoord)
Mocht deze onjuist zijn gaat hij terug naar de pagina, index.php?page=beheer&act=editpage&id - huidige id
De header optie heb ik eerder weleens gebruikt maar sinds ik het in het gehele concept heb gezet kreeg ik headers already sent foutmelding, en ben ik terug op de meta refresh tag gegaan. Deze ken ik op elk willekeurig moment terug laten komen.
Toevoeging op 20/12/2012 15:18:21:
Chris NVT op 20/12/2012 15:04:30:
@Dennis,
Kijk eens naar de jQuery validate form mogelijkheden. Wellicht dat dit je probleem oplost.
Hier een aantal tutorials.
Kijk eens naar de jQuery validate form mogelijkheden. Wellicht dat dit je probleem oplost.
Hier een aantal tutorials.
De jQuery is wel strak, alleen moet ik zoveel meer schrijfwerk doen.
Ik denk dat ik het toch maar op de sessie's houdt wat -Mark- zegt.
Gewijzigd op 20/12/2012 15:15:40 door Dennis WhoCares
Dennis WhoCares op 20/12/2012 15:04:11:
En hoe stel je dat dan voor?
Dat ik elke form input opsla in een sessie ? En op de formulier alle values een sessie waarde opgeef?
Wat als de sessie nog niet bestaat? Dan gaat ie toch foutmeldingen geven?
- Mark - op 20/12/2012 14:59:56:
Het je al eens gewerkt met sessions?
En hoe stel je dat dan voor?
Dat ik elke form input opsla in een sessie ? En op de formulier alle values een sessie waarde opgeef?
Wat als de sessie nog niet bestaat? Dan gaat ie toch foutmeldingen geven?
Dan gaat hij inderdaad foutmeldingen weergeven ja maar die moet je dan ook afhandelen net zoals je doet met $_POST. Het voordeel is dat je de gegevens voor langere tijd kunt bewaren indien gewenst.
Veel werk? Het zit in jQuery, zoveel werk is het niet om te gebruiken.
- Mark - op 20/12/2012 15:20:06:
Dan gaat hij inderdaad foutmeldingen weergeven ja maar die moet je dan ook afhandelen net zoals je doet met $_POST. Het voordeel is dat je de gegevens voor langere tijd kunt bewaren indien gewenst.
De foutmeldingen doe ik wel verbergen als t helemaal klaar is.
Ik wil ze eigenlijk niet langer bewaren dus doe ik als het formulier afgehandeld is zonder fouten, session_destroy
Alleen jammer dat ik dan weer opnieuw moet inloggen..
die validate in jQuery is leuk clientside..maar je moet nog steeds de gegevens controleren serverside...alles wat clientside gebeurt kan je niet vertrouwen...
Gebruik dan gewoon session_unset() em unset de waardes die je voor je form gebruikt.
Toevoeging op 20/12/2012 15:27:05:
Henze Berkheij op 20/12/2012 15:24:31:
die validate in jQuery is leuk clientside..maar je moet nog steeds de gegevens controleren serverside...alles wat clientside gebeurt kan je niet vertrouwen...
Als je het linkje had bekeken, zag je dat er ook een both side validation voorbeeld in staat.
of
Foutmeldingen verbergen is niet echt netjes. Gewoon er voor zorgen dat ze niet voorkomen of netjes afhandelen. Je hoeft niet de gehele session weg te gooien als je alleen de formulier gegevens wilt weggooien. Gewoon met unset() datgene verwijderen wat je niet meer nodig hebt of gewoon overschrijven met een lege waarde. Je kunt gewoon de gehele $_POST in een session zetten en als je hem niet meer nodig hebt dan doe je gewoon Ik gaat een functie maken, waar ik waardes aan meegeef,
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
checkForm($formvalues) {
$values=explode(",",$formvalues)
foreach ($values as $value) {
if($_POST[$value]<>"") {
$_SESSION[$value] = $_POST[$value];
} else {
$error = "<li>" . $value . " is niet ingevuld.</li>";
}
}
if($error<>"") {
return "Het formulier is niet juist ingevuld!" . $error;
} else {
foreach($values) {
session_unset($_SESSION[$value]);
}
return "success";
}
}
$values=explode(",",$formvalues)
foreach ($values as $value) {
if($_POST[$value]<>"") {
$_SESSION[$value] = $_POST[$value];
} else {
$error = "<li>" . $value . " is niet ingevuld.</li>";
}
}
if($error<>"") {
return "Het formulier is niet juist ingevuld!" . $error;
} else {
foreach($values) {
session_unset($_SESSION[$value]);
}
return "success";
}
}
Wat vinden jullie hiervan? (Niet getest, maar het gaat om het idee)
@-Mark-
Ik kan niet goed overweg met array's in php.. *bloost*
Gewijzigd op 20/12/2012 15:35:33 door Dennis WhoCares
Ik vind nog steeds dat de html en de php code gescheiden moeten zijn.
dus:
[phpcode]
hier handel je binnenkomende post requests af
[htmlcode]
hier kun je dan de $_POST values printen in de value attribute van de formulier elementen
Hiervoor moet je sessies niet gebruiken...
Gewijzigd op 20/12/2012 15:37:13 door No One
Hierin tegen, doet de shoutbox het wel als ik op ENTER druk, en alle andere formulier op mijn site ook.
Niet dat ik je commentaar niet waardeer hoor, nou heb ik een goed beeld voor jQuery formulieren, dank u vriendelijk.
Ik vind het gewoon vreemd dat het formulier niet doet zoals alle andere.
Het is ook echt alleen m'n login formulier en de rest doet het wel met ENTER.
Dennis WhoCares op 20/12/2012 15:53:38:
... niet wil verzenden als ik op ENTER druk. ...
Dat ligt hier aan:
if(isset($_POST['register'])) {
Hier controleer je of de gebruiker op de knop heeft gedrukt.
Wat beter is, is dit:
if($_SERVER['REQUEST_METHOD'] === 'POST') {
Daarmee controleer je of het verzoek POST is, ongeacht wat de gebruiker met de knop heeft gedaan.
(Juist oppassen dat jij !isset gebruikte, omgekeerde logica)
Gewijzigd op 20/12/2012 16:00:05 door Kris Peeters
Lol ik begrijp wat je bedoel met isset($_POST['register'])
Mijn knop het login
(deze wordt alleen gezet ($_POST['login']) Als daadwerkelijk op de knop is gedrukt.
Nou staat het if(isset($_POST['login_user'])
En nou doet ie het wel als ik op ENTER druk :D
----
Verder trouwens geen commentaar op mijn checkForm functie?
Het werkt wel :) Na een paar puntcomma's en haakjes en return aanpassingen
Gewijzigd op 20/12/2012 16:05:59 door Dennis WhoCares