Gå til innhold

Spørsmål om Forms og Required fields


Anbefalte innlegg

Hei, jeg har et skjema som jeg skulle hatt fikset litt på. Jeg må ha det slik at alle feltene i skjemaet, untatt 'Kommentar' må fylles ut for at registreringen skal virke.

 

Noen som kan hjelpe meg ? :)

 

Selve skjemaet er laget i html men behandles av et php-script som lager en flat 'database-fil':

 

<form action="form-send.php" method="post">
   <table width="100%" border="0" cellspacing="0" cellpadding="5">
   <tr valign="top"> 
     <td width="20%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*Fullt navn</font></td>
     <td> <input type="text" name="name"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*Adresse</font></td>
     <td> <input type="text" name="address"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*Poststed</font></td>
     <td> <input type="text" name="city"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*Postnummer</font></td>
     <td> <input type="text" name="zip"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*Fødselsdato (dd.mm.åååå)</font></td>
     <td> <input type="text" name="birthdate"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*Telefonnummer</font></td>
     <td> <input type="text" name="phone"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">*E-post</font></td>
     <td> <input type="text" name="email"></td>
   </tr>
   <tr valign="top"> 
     <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Kommentar</font></td>
     <td> <textarea name="comments" cols="40" rows="5" id="comments"></textarea></td>
   </tr>
   <tr> 
     <td colspan="2"><div align="center"> 
         <input type="submit" name="Submit" value="Send inn">
         <input name="Reset" type="reset" id="Reset" value="Nullstill skjema">
       </div></td>
   </tr>
 </table>
</form>

 

PHP:

<?
// skriv resultat til fil

$fp = fopen("resultat.txt", "a"); 
fwrite($fp, $_POST['name'] . "," . 
 	$_POST['address'] . "," . 
 	$_POST['city'] . "," . 
 	$_POST['zip'] . "," .
 	$_POST['birthdate'] . "," .    
 	$_POST['phone'] . "," .
   $_POST['email'] . "," . 
 	$_POST['comments'] . "," . 
 	date("d-M-Y") . "\n");
fclose($fp);

// send skjema via e-post
$recipient = "[email protected]";
$subject = "Emne";
$forminfo = 
($_POST['name'] . "\r" .
$_POST['address'] . "\r" .
$_POST['city'] . "\r" .
$_POST['zip']  . "\r" .
$_POST['birthdate'] . "\r" .
$_POST['phone']  . "\r" .
$_POST['email'] . "\r" .
$_POST['comments'] . "\r\n" .
date("d-M-Y") . "\r\n\n");

$formsend = mail("$recipient", "$subject", "$forminfo", "From: $email\r\nReply-to:$email");
?>
<!-- end form-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Registrert medlemskap</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5">
 <tr> 
   <td> <p align="left">Takk for innmeldingen ! Følgende informasjon er sendt :</p>
<p><? echo nl2br($forminfo); ?></p>
 </tr>
</table>
</body>
</html>

Endret av JarleW
Lenke til kommentar
Videoannonse
Annonse

En mulig løsning er å teste alle variablene for innhold, og hvis noe ikke stemmer - gi brukeren beskjed via et javascript-alert (lettere å vise som eksempel enn å tweake designet ditt :))

 

Edit midtveis i kodingen: siden du ikke laster samme side på nytt, men printer ut en helt ny siden uten registreringsskjemaet, byr denne løsningen på problemer. Uansett lar jeg valideringsrutinene stå som planlagt, så kanskje du kan dra nytte av det. Tanken bak javascript-greiene var å loope gjennom alle feilmeldingene og printe de ut i en alert(). Eks: alert('Feil1\nFeil2\netc'); i head-avsnittet på siden med formet.

 

<?php
// validerer diverse input
if (empty(trim($_POST['name']))) {
 $error['navn'] = "Du må oppgi et navn.";
}
if (empty(trim($_POST['address']))) {
 $error['addr'] = "Du må oppgi en adresse.";
}
if (empty(trim($_POST['city']))) {
 $error['poststed'] = "Du må oppgi et poststed.";
}
if (!is_numeric(trim($_POST['zip'])) || strlen(trim($_POST['zip'])) != 4) {
 $error['postnr'] = "Du oppga et ugyldig postnummer.";
}
if (!is_numeric(trim($_POST['phone'])) || strlen(str_replace(" ", "", $_POST['zip'])) != 8) {
 $error['tlf'] = "Du oppga et ugyldig telefonnr.";
}
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email'])) {
 $error['tlf'] = "Du oppga en ugyldig e-post adresse.";
}

// denne kan valideres på mange måter, alt etter som hva du ønsker
// jeg sjekker her kun om den er tom
if (empty(trim($_POST['birthdate']))) {
 $error['bursdag'] = "Du må fylle inn din fødselsdato.";
}

// sjekker om vi fant en feil - hvis så, send brukeren tilbake og avslutt parsing
if (isset($error)) {
 Header("Location: http://url.til.formet.ditt.no/");
 exit;
}

// under dette avsnittet følger din opprinnelige kode

 

Jeg har ikke testet denne koden på noen måte, men det er jo egentlig ganske plankekjøring å validere en brukers input. Det er bare vanvittig kjedelig, men nødvendig :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...