problemen met een invulformulien op een website

Status
Niet open voor verdere reacties.

tvanden

Gebruiker
Lid geworden
27 jan 2014
Berichten
34
Ik heb een invulformulier op een website. Wanneer dit formulier wordt ingevuld kan men mij een e-mail sturen met die gegevens.
Dat werkt prima maar wanneer een bepaald veld niet ingevuld is werkt het niet meer. De gebruiker zou dan een bericht moeten krijgen dat er een veld niet is ingevuld.
Kan iemand me helpen om het script aan te passen?

Dit is het script van het formulier:

HTML:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>form.htm</title>
</head>

<?=$message?>
<form id="FormName0" action="../send.php" method="post" name="FormName0">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font size="5">Register your friends and family at Sansofé</font></p>

</form>
<p><font color="#FF0000"><i><font size="5">* Must Complete !!!!!</font></i><?=$message?>
</font></p>
<form id="FormName" action="send.php" method="post" name="FormName">
<table border="0" cellspacing="2" cellpadding="0">
<tr><td align="left"><label for="EmailFrom">Your E-mail</label></td>
<td><input id="EmailFrom" type="text" name="EmailFrom" size="50"></td></tr>
<tr><td align="left" valign="top"><label for="owner"><font size="2">*</font> Owner</label></td>
<td valign="top"><input id="owner" name="owner" type="text" size="50" maxlength="255"></td></tr><tr>
	<td align="left" valign="top"><label for="apartment">* Apartment</label></td>
<td valign="top"><input id="apartment" name="apartment" type="text" size="3" maxlength="255"></td></tr><tr>
	<td align="left" valign="top"><label for="block">* Block</label></td>
<td valign="top"><input id="block" name="block" type="text" size="3" maxlength="255"></td></tr><tr>
	<td align="left" valign="top"><label for="names_friends_and_family">* Names friends and family</label></td>
<td valign="top"><textarea id="names_friends_and_family" name="names_friends_and_family" rows="1" cols="90"></textarea></td></tr><tr>
	<td align="left" valign="top"><label for="arrival_date">* Arrival date (DD/MM/YYYY)</label></td>
<td valign="top"><input id="arrival_date" name="arrival_date" type="text" size="25" maxlength="255"></td></tr><tr>
	<td align="left" valign="top"><label for="departure_date">* Departure date (DD/MM/YYYY)</label></td>
<td valign="top"><input id="departure_date" name="departure_date" type="text" size="25" maxlength="255"></td></tr><tr>
	<td align="left" valign="top"><label for="comments">Comments</label></td>
<td valign="top"><textarea id="comments" name="comments" rows="1" cols="60"></textarea></td></tr><tr>
<td align="left"></td>
<td><input type="submit" name="submitButtonName" value="Send E-mail"></td>
</tr>
</table>
</form>

<body bgcolor="#00FFFF">

<p><font size="4">Only</font><font size="4"> when you completed all the fields 
indicated with a star (*) you will receive a message that the mail has been 
sent.<br>
If you cannot send this register list you can manually send an email to the webmaster 
(see contacts in the menu)<br>
&nbsp;</font></p>
</body>
</html
 
Laatst bewerkt door een moderator:
goed voorbeeld of niet volgende site eens in source bekijken om de opmaak van html5 te zien
http://v03.djdb.be/users/Register/
dus ook volgende eens bekijken
http://php.net/manual/en/function.filter-input.php
kan er ongeveer zo uitzien de ctype_alnum is iets veroudert en zou eruitkunnen gaan dus vermijden (kan je ook met filter oplossen)
PHP:
            $username=(isset($_POST['username'])&& ctype_alnum($_POST['username']))?filter_input(INPUT_POST, 'username'):'';
            $email=filter_input(INPUT_POST, 'email');
            $password=(isset($_POST['paswd'])&& isset($_POST['paswd2']))?filter_input(INPUT_POST, 'paswd2'):'';
volgende lijn behoord niet tot mijn favorieten
bij sommige apache installaties word enkel de <?php aanvaard
PHP:
<?=$message?>

dus ik stel voor dat je boven die lijn plaatst

<?php
$message='hello world';

?>

ik stel ook voor dat je onder de lijn startend met <?=

<?php
if(isset($_POST)){
$message='u hebt nog niets verstuurd';
}else{
$message='ik heb iets ontvangen maar ik doe er nog niets mee';
}
print $message;
?>

nu wat toont je scherm extra laat het me weten?
 
zet het aub even tussen code-tags hier.
Welke foutmelding krijg je precies, en wanneer?
 
ScreenHunter_139 Jul. 15 22.51.jpg

Zo ziet het formulier er uit.
Alles werkt goed wanneer alle velden met een ster volledig worden ingevuld. Bij het verzenden krijgt de verzender het bericht dat de e-mail werd verstuurd.
Maar ... wanneer iemand een veld met een ster vergeet in te vullen krijgt die persoon een blanko scherm i.p.v. een bericht "please complete the fields"
Kan iemand mijn script aanpassen en toesturen want ik ken er niets van.
 
De validatie zit in je PHP-code. Dus laat die (ge-anonimiseerd) eens zien tussen code/php UBB tags.

Zet ook je code van je formulier tussen deze tags voor betere leesbaarheid.

Los van je probleem is je formulier ook best antiek qua opbouw. Tabellen voor plaatsbepaling en ordening is al vele jaren NOT-DONE. CSS is the way to go.
 
Laatst bewerkt:
Dit is de script van de sent.php.
Alleen mijn e-mailadres heb ik gewijzigd.
Hopelijk kan je helpen.
Groetjes
Theo

HTML:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>send.php</title>
</head>

<body>
<?php
$EmailFrom = $_POST['EmailFrom'];
$owner = trim($_POST['owner']);
$apartment = trim($_POST['apartment']);
$block = trim($_POST['block']);
$names_friends_and_family = trim($_POST['names_friends_and_family']);
$arrival_date = trim($_POST['arrival_date']);
$departure_date = trim($_POST['departure_date']);
$comments = trim($_POST['comments']);

/// Validate

$message = "<h2>Error!</h2><h4>You need to fill in the following:</h4><ul>";

if($owner == ""){$message .= "<li><b>Owner</b> Not completed!"; $fail = "Y";}

if($apartment == ""){$message .= "<li><b>Apartment</b> Not completed!"; $fail = "Y";}

if($block == ""){$message .= "<li><b>Block</b> Not completed!"; $fail = "Y";}

if($names_friends_and_family == ""){$message .= "<li><b>Names friends and family</b> Not completed!"; $fail = "Y";}

if($arrival_date == ""){$message .= "<li><b>Arrival date</b> Not completed!"; $fail = "Y";}

if($departure_date == ""){$message .= "<li><b>Departure date</b> Not completed!"; $fail = "Y";}

if($fail == "Y")

{

$message .= "</ul>";

include("form.htm");

die();

}

$EmailTo = "mailadres@xxx.be";

$validationOK=true;

if (trim($EmailFrom)=="") $validationOK=false;

if (!$validationOK) {

  echo "Error! E-mail was not sent. Please check your code.";

  exit;

}

$Body = "";

$Body .= "Owner:\n$owner\n\n";

$Body .= "Apartment:\n$apartment\n\n";

$Body .= "Block:\n$block\n\n";

$Body .= "Names friends and family:\n$names_friends_and_family\n\n";

$Body .= "Arrival date:\n$arrival_date\n\n";

$Body .= "Departure date:\n$departure_date\n\n";

$Body .= "Comments:\n$comments\n\n";


$Subject = "From $EmailFrom";
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

if ($success){ echo "Success! Your e-mail was sent!";}
else{  echo "Error! Your e-mail was not sent!";}
?>

</body>

</html>

</body>

</html>
 
Laatst bewerkt door een moderator:
Zet het even tussen php-tags door je bericht te wijzigen. Dat leest makkelijker.
PHPknopje in werkbalk op forum.
 
Laatst bewerkt:
PHP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>send.php</title>
</head>

<body>
<?php
$EmailFrom = $_POST['EmailFrom'];
$owner = trim($_POST['owner']);
$apartment = trim($_POST['apartment']);
$block = trim($_POST['block']);
$names_friends_and_family = trim($_POST['names_friends_and_family']);
$arrival_date = trim($_POST['arrival_date']);
$departure_date = trim($_POST['departure_date']);
$comments = trim($_POST['comments']);

/// Validate

$message = "<h2>Error!</h2><h4>You need to fill in the following:</h4><ul>";

if($owner == ""){$message .= "<li><b>Owner</b> Not completed!"; $fail = "Y";}

if($apartment == ""){$message .= "<li><b>Apartment</b> Not completed!"; $fail = "Y";}

if($block == ""){$message .= "<li><b>Block</b> Not completed!"; $fail = "Y";}

if($names_friends_and_family == ""){$message .= "<li><b>Names friends and family</b> Not completed!"; $fail = "Y";}

if($arrival_date == ""){$message .= "<li><b>Arrival date</b> Not completed!"; $fail = "Y";}

if($departure_date == ""){$message .= "<li><b>Departure date</b> Not completed!"; $fail = "Y";}

if($fail == "Y")

{

$message .= "</ul>";

include("form.htm");

die();

}

$EmailTo = "mailadres@xxx.be";

$validationOK=true;

if (trim($EmailFrom)=="") $validationOK=false;

if (!$validationOK) {

  echo "Error! E-mail was not sent. Please check your code.";

  exit;

}

$Body = "";

$Body .= "Owner:\n$owner\n\n";

$Body .= "Apartment:\n$apartment\n\n";

$Body .= "Block:\n$block\n\n";

$Body .= "Names friends and family:\n$names_friends_and_family\n\n";

$Body .= "Arrival date:\n$arrival_date\n\n";

$Body .= "Departure date:\n$departure_date\n\n";

$Body .= "Comments:\n$comments\n\n";


$Subject = "From $EmailFrom";
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

if ($success){ echo "Success! Your e-mail was sent!";}
else{  echo "Error! Your e-mail was not sent!";}
?>

</body>

</html>

</body>

</html>
 
Zelf zou ik het formulier en de afhandeling in PHP samenvoegen zonder exit of die's. Ik wil wel een opzetje maken vanavond of morgen, want dit wat je nu hebt is best ranzig te noemen. Het kan veel efficiënter!
 
het is nog niet wat het moet zijn zie ook dat ik </li> heb toegevoegd
aangepaste code niet volledig volgens de nieuwe norm met filter maar nog met een ouder voorbeeld preg_match
PHP:
<html>
    <head>
        <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>
        <title>send.php</title>
    </head>
    <body>
    <?php 
        error_reporting(E_ALL ^ E_DEPRECATED);////upgrade 2
        try{//upgrade 2
        $EmailFrom = (isset($_POST['EmailFrom']))? trim($_POST['EmailFrom']) :'';
        $owner =     (isset($_POST['owner']))?  trim($_POST['owner']):'';
        $apartment = (isset($_POST['apartment']))? trim($_POST['apartment']):'';
        $block =     (isset($_POST['block']))? trim($_POST['block']):'';
        $names_friends_and_family = (isset($_POST['names_friends_and_family']))? trim($_POST['names_friends_and_family']):'';
        $arrival_date = (isset($_POST['arrival_date']))? trim($_POST['arrival_date']):'';
        $departure_date = (isset($_POST['departure_date']))? trim($_POST['departure_date']):'';
        $comments = (isset($_POST['comments']))? trim($_POST['comments']):'';
        /// Validate
        $message ='<h2>Error!</h2><h4>You need to fill in the following:</h4><ul>';
        if ($owner == '' && $fail = 'Y') {         
            $message .= '<li><b>Owner</b> Not completed!</li>';
        }
        if ($apartment == '' && $fail = 'Y' ) {   
            $message .= '<li><b>Apartment</b> Not completed!</li>';
        }
        if ($block == '' && $fail = 'Y' ) {        
            $message .= '<li><b>Block</b> Not completed!</li>';
        }
        if ($names_friends_and_family == '' && $fail = 'Y' ) {
            $message .= '<li><b>Names friends and family</b> Not completed!</li>';
        }
        if ($arrival_date == '' && $fail = 'Y' ) {          
            $message .= '<li><b>Arrival date</b> Not completed!</li>';
        }
        if ($departure_date == '' && ValidateAs::isAdate($departure_date)  && $fail = 'Y' ) {        
            $message .= '<li><b>Departure date</b> Not completed!</li>';
        }
        if (!isset($_POST) || $fail == 'Y'  ) {//upgrade 2 waarom post check eerst komt is omdat deze meer zal voorkomen.
            $message .= '</ul>';
            include ('form.htm');// isset $_post upgrade 2 om indien de post nog niet is verstuurd het form altijd te laten tonen
            die();
        }
        $EmailTo = 'mailadres@xxx.be';
        $validationOK = true;
        if (ValidateAs::isAemail($EmailFrom))
            $validationOK = false;
        if (!$validationOK) {
            echo 'Error! E-mail was not sent. Please check your code.';
            exit;
        }
        $Body = '';
        $Body .= "Owner:\n$owner\n\n";
        $Body .= "Apartment:\n$apartment\n\n";
        $Body .= "Block:\n$block\n\n";
        $Body .= "Names friends and family:\n$names_friends_and_family\n\n";
        $Body .= "Arrival date:\n$arrival_date\n\n";
        $Body .= "Departure date:\n$departure_date\n\n";
        $Body .= "Comments:\n$comments\n\n";
        $Subject = "From $EmailFrom";
        $success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
        if ($success) {
            echo 'Success! Your e-mail was sent!';
        } else {
            echo 'Error! Your e-mail was not sent!';
        }
       }catch(Exception $e){//upgrade 2 om alle errors zichtbaar te maken 
              print "Exception" . print_r($e,true);
       }
    ?>
    <!--</body></html> removed-->
    </body>
</html>
<?php

class ValidateAs{
	/**
	 * ValidateAs::isMonth()
	 * @param mixed $String 1->12
	 * @return boolean
	 */
	static public function isMonth($String){
        return preg_match('/^(0?[1-9]{1}|1[012]{1})$/',$String);
    }
    /**
	 * ValidateAs::isYear($String) mixed  1->12
	 * @return boolean
	 */
	static public function isYear($String){
        return preg_match('^([19]|[20])[0-9]\d\d$^',$String);
    }

	static public function isDay($String){
        return preg_match('^(0[1-9]|[12][0-9]|3[01])$^',$String);
    }
    /**
     * ValidateAs::isAShortDate($String)dd-mm-yy  
     * @return boolean
     */
    static private function isAShortDate($String){                 
        return preg_match('^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])[0-9]\d\d$^',$String);
    }

    static public function getdatetype($date){
        if($this->isEUAdate($date)){
            return 'EU';
        }
        if($this->isUSAdate($date)){
            return 'US';
        }
        if($this->isEUAdate($date)){
            return 'EU';
        }
    }
    /**
    * ValidateAs::isEUAdate()
    * dd   (0[1-9]|[12][0-9]|3[01])   01->09  10->29    30->31
    * mm   (0[1-9]|1[012])            01->09  10->12
    * yyyy (19|20)\d\d)               1900 -> 2099
    * @param mixed $String dd-mm-yyyy
    * @return
    */
    public function isEUAdate($String){ 
        return preg_match('/^([012]?[0-9]{1}|[3][01])\-(0?[1-9]{1}|1[012]{1})\-(19|20){1}[0-9]{2}$/',$String);
        //return preg_match("^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-([19]|[20])[0-9]\d\d$^",$String);
    }
    static public function isAdate($String){                 
        return self::isEUAdate($String)||self::isUSAdate($String);
    }
   /**
    * ValidateAs::isUSAdate()
    * dd   (0[1-9]|[12][0-9]|3[01])   01->09  10->29    30->31
    * mm   (0[1-9]|1[012])            01->09  10->12
    * yyyy (19|20)\d\d)               1900 -> 2099
    * @param mixed $String yyyy-mm-dd 
    * @return
    */
    public function isUSAdate($String){                 
        return preg_match('^([19]|[20])[0-9]\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$^',$String);
    }
    static public function isAemail($string){//is niet meer juist extentie moet langer 
        return preg_match('/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/',$String);
            
    }
    static public function isFULLTEXT(&$text){
        return preg_match('/[A-Za-z0-9.-]/',$text);
            
    }
    static public function isnumeric($nr){
        return is_numeric($nr);
    }
    /**
     * ValidateAs::iscolor()
     * @param mixed $collor FFFFFF OR FFF
     * @return
     */
    static public function iscolor($collor){
        return preg_match('^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$',$collor);
    }
    static public function isMailheaderinject($fromstr){
        //%0D%0A HTML-equivalent =>    \r\n
        return pos($var, '%0D%0A') || pos($var, '%0D%0Abcc:');
    }
}
?>
 
Laatst bewerkt:
Ik heb dit script getest op de website en het geeft altijd een blanko blad als resultaat zonder enige verdere melding. De e-mail wordt niet verstuurd.
 
Hij heeft zijn bericht aangepast ;)
Dat bedoelt hij ;)

Een script is mij eerlijk gezegd ontschoten, maar kenikavanbis heeft al een opzet gemaakt.
Hoewel het wel overdreven is voor een beginner om classes en try-catch blokken te gebruiken. Het kan veel simpeler met een array waarin je de validatie-foutmeldingen verzamelt.
 
Laatst bewerkt:
Ja de enige verbetering die ik graag zou hebben is dat wanneer het invullen van het formulier niet volledig is er een bericht komt dat de e-mail niet kan verzonden worden. Dus liefst behoud ik mijn script met die verbetering en eventueel ook de fouten er uit halen.
 
Maar je script heeft toch al een controle op de invoer?
Je toont alleen $message niet.
 
Alles werkt goed behalve dat er bij onvolledige invoer geen melding wordt gegeven dat de invoer niet volledig is
 
dat had ik als gezien maar ik hoopte dat je het zelf zou zien
naar mijn vermoeden ligt het aan deze regels
kort gezegt de email validatie krijgt geen melding en ook geen $fail leg kort uit hoe je het zou aanpassen zodat het wel werkt .
met wat copy paste moet het je zeker lukken.

die try catch was om de errors iets duidelijker te krijgen (stel dat hij op een hosting werk die de errors maskert)
PHP:
        if (!isset($_POST) || $fail == 'Y'  ) {//upgrade 2 waarom post check eerst komt is omdat deze meer zal voorkomen.
            $message .= '</ul>';
            include ('form.htm');// isset $_post upgrade 2 om indien de post nog niet is verstuurd het form altijd te laten tonen
            die();
        }
        $EmailTo = 'mailadres@xxx.be';
        $validationOK = true;
        if (ValidateAs::isAemail($EmailFrom))
            $validationOK = false;
        if (!$validationOK) {
            echo 'Error! E-mail was not sent. Please check your code.';
            exit;
        }
plaats ook onder
//validatie
PHP:
$fail ='';
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan