Ter illustratie de onderstaande simplistische code
Ik heb een eenvoudig formulier met een veld 'naam' dat verplicht in te vullen is. Is het ingevuld, dan gaat men naar de tweede stap. Is het veld leeg, dan blijft men op dezelfde pagina ( met redirect ) en kleurt het veld rood met de klasse .classCode:<?php if($_POST['submit']) { $process = true; // ingevuld of niet if(!$_POST['name']){ $process = false; $_SESSION['fill-name'] = true; }else{ unset($_SESSION['fill-name']); } // redirect if($process){ header('Location: stap_2.php'); }else{ header('Location: stap_1.php'); } } ?> <form method="post"> <input type="text" name="name" value="" class="<?php if($_SESSION['fill-name']){ echo 'error'; } ?>" /> <input type="submit" name="submit" value="verwerk" /> </form>
Ik werk met een header redirect naar dezelfde pagina om de popup bij het vernieuwen na een post te voorkomen. Om het veld toch rood te laten kleuren gebruik ik een sessie. Het idee is uitgewerkt en operationeel. Ik heb echter mijn twijfels of dit niet beter gemaakt kan worden? Zelf dacht ik aan javascript om de velden te valideren, maar dat kan men uitzetten ... dus niet ideaal lijkt mij ... iemand een beter idee dan wat ik momenteel doen?
- Voorkomen van popup bij vernieuwen na post van formulier
-
04-12-2014, 17:21 #1
- Berichten
- 940
- Lid sinds
- 15 Jaar
Voorkomen van popup bij vernieuwen na post van formulier
-
In de schijnwerper
Website Of Webshop Laten Maken? Strakke WordPress Sites door Web & Design V.A. €650,-Freelance / WerkGratis hulp bij het uitzoeken van jouw backlinks!AdvertentieruimteBlogplaatsing Lifestyle website 50.000 bezoekers p/m (DR 44, DA 35, PA 43)LinkpartnersOpzoek naar extra werkzaamheden tarief -> €18,50 per uurFreelance / Werk -
04-12-2014, 17:50 #2Particulier
- Berichten
- 1.477
- Lid sinds
- 16 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Je zou het met jQuery kunnen oplossen :)
Zo doe ik het zelf ook altijd.
-
04-12-2014, 19:11 #3
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Bedankt voor uw reactie. Met jQuery zou het inderdaad lukken ... maar als men dan Javascript gaat uitzetten, dan kan men zonder validatie naar de volgende stap gaan? Of begrijp ik het verkeerd?
-
04-12-2014, 19:16 #4Particulier
- Berichten
- 1.477
- Lid sinds
- 16 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Je kunt met PHP het veld toch ook valideren, zonder naar de volgende stap te moeten gaan. Met jQuery zou je dan stap 2 kunnen verbergen en pas weergeven wanneer stap 1 succesvol is ingevuld. Eventueel kan ik het formulier wel voor je maken.
-
04-12-2014, 19:27 #564BitsWebhosting.EU
- Berichten
- 2.092
- Lid sinds
- 17 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Ik zou het gewoon met javascript (jquery) doen. Mensen die tegenwoordig js uitzetten in de browser kunnen amper een site fatsoenlijk zien, dus het percentage dat dit daadwerkelijk doet is volgens mij te verwaarlozen.
Checken aan de php kant moet je tenslotte toch altijd doen, of het nu met js gechecked is of niet.
-
04-12-2014, 20:27 #6Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Je kunt ook dubbel controleren (javascript en daarna php) voorkomen door het formulier via AJAX naar de server te sturen en daar te controleren.
Iets in deze trend:
Javascript:
PHP Code:$("form input[type='submit']").on("click", function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: "register.php", //Op register.php controleer je dan de invoer
cache: false,
data: $("form").serialize(),
success: function (data) {
//data is wat register.php terug stuurt. Dit kan bijvoorbeeld "true" of "false" zijn.
if (data == "true") {
$("input[name='name']").addClass("error"); // invoerveld gekleurd maken
alert("De invoer is onjuist");
} else {
window.location = "gelukt.php"; //doorsturen naar andere pagina.
}
}
});
});
-
04-12-2014, 20:48 #7
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Uw code heb ik werkende ( was ook niet moeilijk vermits ik volledig copy/paste kon doen )
De enige vraag die ik momenteel heb is hoe ik de koppeling van register.php naar het script maak.
Ik kom steeds in de else uit ... hoe stel ik die data == true in op register.php? :-)
Javascript gebruik je om het makkelijk te maken voor de bezoeker (zoals in dit geval). Maar je moet altijd de invoer ook aan de serverkant controleren (php). Alles wat van de browser komt is namelijk te manipuleren en mag je niet vertrouwen.
Je kunt ook dubbel controleren (javascript en daarna php) voorkomen door het formulier via AJAX naar de server te sturen en daar te controleren.
Iets in deze trend:
Javascript:
PHP Code:$("form input[type='submit']").on("click", function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: "register.php", //Op register.php controleer je dan de invoer
cache: false,
data: $("form").serialize(),
success: function (data) {
//data is wat register.php terug stuurt. Dit kan bijvoorbeeld "true" of "false" zijn.
if (data == "true") {
$("input[name='name']").addClass("error"); // invoerveld gekleurd maken
alert("De invoer is onjuist");
} else {
window.location = "gelukt.php"; //doorsturen naar andere pagina.
}
}
});
});
-
04-12-2014, 22:07 #8
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
# EDIT
Wanneer ik in register.php simpelweg TRUE zet, dan kom ik in de IF terecht.
Kan ik ook meerdere resultaten van de register gebruiken voor meerdere velden.
Bijvoorbeeld : validmail=true - validname = true - ... die dan op de een of
andere manier gebruiken zodat ik meerdere velden kan kleuren? :-)
-
04-12-2014, 23:37 #9Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Ja je kunt alles terug sturen wat je wilt.
Als je weet hoe het moet kun je een XML genereren.
Geen idee hoe dat moet dan kun je inderdaad doen wat jij voorstelt. Er zijn legio mogelijkheden.
Je krijgt een string terug waarmee je in Javascript alles kunt doen wat je wilt.
Stuur je bijvoorbeeld dit terug:
validmail=true&validname=true
dan doe je in javascript:
PHP Code:success: function (data) {
//---------
var arr = data.split("&"); //splitten alles op het & teken
//string bijhouden om alert te laten zien
var errMessage = "";
//loop door de array
for(i=0;i<arr.length;i++){
var item = arr[i].split("="); //splitten elk array item op het = teken.
var name = item[0];
var value = item[1];
if(name == "validmail" && value =="false") {
$("input[name='mail']").addClass("error");
errMessage += "- Het e-mail adres is onjuist\n";
}
if(name == "validname" && value =="false") {
$("input[name='name']").addClass("error");
errMessage += "- De naam adres is onjuist\n";
}
}
//controleren of er een melding is anders laten zien
if(errMessage != "") alert(errMessage);
//-----
}
-
05-12-2014, 07:21 #1064BitsWebhosting.EU
- Berichten
- 2.092
- Lid sinds
- 17 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Wat ook kan:
dataType ="json" opgeven als parameter bij je ajax call en je register.php dan een json encoded array laten teruggeven:
$ret = array ('a' => true, 'b' = 'false');
echo json_encode($ret);
dan kun je in de javascript weer checken met data.a == true, data.b == false of whatever je ermee wilt doen.
-
05-12-2014, 10:46 #11
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Er zijn dus twee mogelijkheden, ofwel JSON ofwel via mijn eerste gedacht hierboven ( validmail=true&validname=true ) - Mijn eerdere idee lijkt een stuk sneller te maken dan de optie JSON - is dit ook effectief beter dan een string met de resultaten doorsturen? De string ziet men toch nergens verschijnen, of heb ik het mis?
-
05-12-2014, 14:41 #12Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: Voorkomen van popup bij vernieuwen na post van formulier
Jouw methode werkt, zonder twijfel. Er zijn zoveel methodes hoe je dit werkend kunt krijgen.
Maar een betere methode is JSON of XML.
Het probleem met jouw methode komt opspelen zodra een scheidingsteken (bijvoorbeeld "&" of "=") voorkomt in de naam van de variabele.
Met XML of JSON heb je dat probleem niet. Mocht je weten hoe je in PHP een JSON of XML string terug kunt sturen dan zou ik daar zeker de voorkeur aan geven.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic