11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)
  • Q:

    Bijdrager
    NeXT

    Prefilled form in php negeren bij validatie

    Hallo,

    Ik kom hier niet uit een probleem omdat twee functionaliteiten elkaar in de weg zitten. Wie kan mij op weg helpen?

    Het probleem is als volgt:
    Ik gebruik voor op een website een eenvoudig contactformulier. Wanneer je hier je naam en mailadres invult wordt deze verzonden via een php script. Ik gebruik onderstaande code om lege velden op te vangen om te voorkomen dat er lege berichten worden verzonden. Tot zover logisch en simpel.

    Nu maak ik voor hetzelfde formulier ook gebruik van een javascript dat een pre-filled waarde opgeeft die verdwijnt wanneer je er met je muis op klikt. Er staat bijvoorbeeld in de eerste regel van het formulier “Naam”. Wanneer je er op klikt verdwijnt “Naam” en kan je je eigen naam invullen. Het probleem is alleen dat de validatie voor ingevulde velden niet werkt omdat er via het Javascript al “Naam” staat ingevuld. Op zich logisch maar hoe kan ik deze invulling negeren zodat “Naam” ook als leeg veld wordt herkent? Het liefst in een oplossing zoals de code hieronder. Dan kan ik deze zo overnemen. De woorden die dus geblokt moeten worden zijn “Naam” en “E-mail”. Dat zijn de vooraf ingevulde velden.

    Ik heb zelf al veel gezocht en kwam wat oplossingen tegen als scheldwoord blockers of spam blockers. Maar niks dat werkt icm een php contactformulier.

     
    if (!$_POST['naam'] )
    {
    die('Uw informatie aanvraag kan pas verzonden worden nadat u alle velden heeft ingevuld. Keer via uw browser terug naar de website en probeer het opnieuw...');
    }
     

    Bijdrager
    computer space

    Je moet de vooringevulde waarde niet onder “value” stoppen, maar onder “placeholder”. Dan is je POST waarde gewoon leeg. Placeholder is gewoon een standaard HTML ding, daar is geen Javascript voor nodig.

    Probeer ook de “die” functie te vermijden. Dat geeft wel heel brakke User experience.
    Maak liever een pagina met HTTP redirect die alle reeds ingevulde waarden weer opnieuw invult en bijvoorbeeld een waarschuwing toevoegt op de relevante plaatsen. Bijvoorbeeld door tijdens de check de correcte waarden in een sessie-array-variabele te stoppen, en deze in te lezen bij het regenereren van het formulier.


    Bijdrager
    NeXT

    Klopt maar ik wil wel dat het vooringevulde woord automatisch verdwijnt wanneer je er op klikt en weer terugkomt als je niks invult. Daar is het javascript wel nuttig voor.

    Bedankt voor je snelle reactie! Ik ga het meteen even testen en laat je weten of het is gelukt!


    Bijdrager
    NeXT

    Je hebt helemaal gelijk betreft die brakke experience. Als dat beter zou kunnen heeft dat mijn voorkeur maar dan zou ik een stuk dieper php in moeten. Daar ben ik minder thuis.


    Bijdrager
    computer space

    Dat doet placeholder al. Typ je een letter, zie je die letter, wis je die weer, komt de placeholder weer terug.


    Bijdrager
    NeXT

    Het is gelukt! Dank je wel voor je snelle en eenvoudige oplossing!:)
    Placeholder in plaats van value was inderdaad de oplossing.

    Je hebt gelijk betreft het javascript. Toch werkt het met dit script net iets mooier. De tekst verdijnt al bij het aanlikken van het formulier. Zonder script icm placeholder verdwijnt het pas wanneer je begint met typen.

    Bedankt voor het meedenken!


    Bijdrager
    computer space

    Ja, klopt, ik probeer de basis in non-JS goed te hebben, en van daaruit te gaan opleuken.
    Ik heb trouwens mijn sessie-tip meteen zelf toegepast. Bedacht het net ter plekke, maar mijn eigen formulieren werden hier en daar nog steeds gewist bij foute input. Nu blijft het goede staan!


    Bijdrager
    NeXT

    Ik ga er ook mee aan de slag. Het meenemen van de ingevulde vensters komt denk ik op hetzelfde neer als wat je doet wanneer je formulieren over meerdere pagina’s (stappen) verdeelt?

    Met welke “if” koppel jij dan terug naar een HTML pagina en hoe neem je de ingeulde waarden mee? “sessie-array-variabele”? Kan je mij kort op weg helpen?


    Bijdrager
    Domtoren

    Kijk even na met welke browsers placeholder werkt. Het werkt niet met Internet Explorer 9 en eerder en dat is nogal een grote groep gebruikers. bron


    Bijdrager
    Domtoren
     
    if (!$_POST['naam'] OR $_POST['naam'] == "Naam" )
    {
    die('Uw informatie aanvraag kan pas verzonden worden nadat u alle velden heeft ingevuld. Keer via uw browser terug naar de website en probeer het opnieuw...');
    }
     
     

    Waarbij ik aanteken dat je beter eerst wat veiligheidscontroles op $_POST kunt doen voor je die gebruikt.


    Bijdrager
    computer space

    Precies, bijvoorbeeld:
    $naam=substr(filter_var($_POST[“naam”], FILTER_SANITIZE_STRING),0,30);
    Dat kuist de string op rare tekens die bijvoorbeeld een database kunnen corrumperen, en hakt m wat korter als ie te lang wordt.

11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.