PHP - uitvoer foutieve invoer op dezelfde pagina weergeven

Status
Niet open voor verdere reacties.

Tim Hovius

Gebruiker
Lid geworden
25 jan 2008
Berichten
788
Hallo, ik probeer een email formulier te maken, maar als de gebruiker bijv. geen naam invoert, moet dit op DEZELFDE pagina verschijnen met een melding.

Ik krijg dit niet voor elkaar.
Op de plaats <?php echo "$foutnaam <BR /> (en de andere) moet het bericht komen ;)

Wie heeft een oplossing?

Nu echo ik het gewoon, maar dan maakt PHP een nieuwe pagina aan :(

PHP:
<html>

<head>
<title>Contact</title>
<link rel="stylesheet" type="text/css" href="style.css">
<style type="text/css">
</style>
</head>

<body>

<?php 
if (!empty($_POST)){
	$naam = $_POST['naam'];
	$email = $_POST['email'];
	$onderwerp = $_POST['onderwerp'];
	$bericht = $_POST['bericht'];
	$headers = "Van: ".$naam." <".$email.">\r\n";
	
	if(!$naam) {
	echo "Vul uw naam in!";
	}
	
	elseif(!$email) {
	echo "Vul uw emailadres in!";
	}
	
	elseif(!$onderwerp) {
	echo "Vul uw onderwerp in!";
	}
	
	elseif(!$bericht) {
	echo "Vul uw bericht in!";
	}

	
	else {
		
		if (!mail("hier stond mijn emailadres", $onderwerp, $bericht, $headers)){ 
    		echo "Er is een fout opgetreden bij het verzenden van e-mail";	
    	}
    
   		else { 
            // succesvol verzonden, doorsturen naar bedankt-pagina
            echo "Uw bericht is verzonden";
        }
    } 
}

else { 
?> <center>
<table class="inhoud">
				<tr>
								<td class="off" onclick="location.href='index.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
								Homepagina</td>
								<td class="off" onclick="location.href='opdrachten.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
								Opdrachten boekje</td>
								<td class="off" onclick="location.href='contact.php'" onmouseover="this.className='on'" onmouseout="this.className='off'">
								Contact</td>
				</tr>
				<tr>
								<td class="tekst" colspan="3">
								<form method="post" action="">
												<table style="width: 100%" border="0">
																<tr>
																				<td valign="bottom">Naam</td>
																				<td><?php echo "$foutnaam <BR />" ?> <input name="naam" type="text" style="width: 400px"></td>
																</tr>
																<tr>
																				<td valign="bottom">E-mailadres</td>
																				<td><?php echo "$foutemail <BR />" ?> <input name="email" type="text" style="width: 400px"></td>
																</tr>
																<tr>
																				<td valign="bottom">Onderwerp</td>
																				<td><?php echo "$foutonderwerp <BR />" ?> <input name="onderwerp" type="text" style="width: 400px"></td>
																</tr>
																<tr>
																				<td valign="bottom">Bericht</td>
																				<td><?php echo "$foutbericht <BR />" ?> <textarea name="bericht" style="width: 400px; height: 150px"></textarea></td>
																</tr>
																<tr>
																				<td valign="bottom">&nbsp;</td>
																				<td><input name="Submit" type="submit" value="Verzenden"></td>
																</tr>
												</table>
								</form>
								<?php 
								} 
								?> </td>
				</tr>
</table>
</center>

</body>

</html>
 
PHP:
<?php 
if ($_SERVER['REQUEST_METHOD'] == "POST"){
    if(!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['onderwerp']) || !isset($_POST['bericht']) || !isset($_POST['headers']))
       {
              echo "Dit forumulier is verkeert verzonden"; exit;
       }
    $naam = $_POST['naam'];
    $email = $_POST['email'];
    $onderwerp = $_POST['onderwerp'];
    $bericht = $_POST['bericht'];
    $headers = "Van: ".$naam." <".$email.">\r\n";
    
$error = true;
if(trim($naam == ""))
{
$error = "<li>Uw naam is leeg</li>";
}
if(trim($email== ""))
{
$error .= "<li>Uw email is leeg</li>";
}
if(trim($onderwerp== ""))
{
$error = "<li>Uw onderwerp is leeg</li>";
}
if(trim($bericht== ""))
{
$error = "<li>Uw bericht  is leeg</li>";
} 
if (eregi("\r", $naam) || eregi("\n", $verzender)) {
	$error .="<li>Uw naam is ongeldig";
}
    
    if($error)
    {
        
        if (!mail("hier stond mijn emailadres", $onderwerp, $bericht, $headers)){ 
            echo "Er is een fout opgetreden bij het verzenden van e-mail";  
        }
    
        else { 
            // succesvol verzonden, doorsturen naar bedankt-pagina
            echo "Uw bericht is verzonden";
        }
    } 
    else
    {
         echo "<lu>".$error."</lu>";
    }
}
 
else { 
?> <center>
<table class="inhoud">
                <tr>
                                <td class="off" onclick="location.href='index.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Homepagina</td>
                                <td class="off" onclick="location.href='opdrachten.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Opdrachten boekje</td>
                                <td class="off" onclick="location.href='contact.php'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Contact</td>
                </tr>
                <tr>
                                <td class="tekst" colspan="3">
                                <form method="post" action="">
                                                <table style="width: 100%" border="0">
                                                                <tr>
                                                                                <td valign="bottom">Naam</td>
                                                                                <td><?php echo "$foutnaam <BR />" ?> <input name="naam" type="text" style="width: 400px"></td>
                                                                </tr>
                                                                <tr>
                                                                                <td valign="bottom">E-mailadres</td>
                                                                                <td><?php echo "$foutemail <BR />" ?> <input name="email" type="text" style="width: 400px"></td>
                                                                </tr>
                                                                <tr>
                                                                                <td valign="bottom">Onderwerp</td>
                                                                                <td><?php echo "$foutonderwerp <BR />" ?> <input name="onderwerp" type="text" style="width: 400px"></td>
                                                                </tr>
                                                                <tr>
                                                                                <td valign="bottom">Bericht</td>
                                                                                <td><?php echo "$foutbericht <BR />" ?> <textarea name="bericht" style="width: 400px; height: 150px"></textarea></td>
                                                                </tr>
                                                                <tr>
                                                                                <td valign="bottom">&nbsp;</td>
                                                                                <td><input name="Submit" type="submit" value="Verzenden"></td>
                                                                </tr>
                                                </table>
                                </form>
                                <?php 
                                } 
                                ?>[ </td>
                </tr>
</table>
</center>
Nou hier is ie dan :P (heb er gelijk wat veranderd voor de veiligheid)
 
Laatst bewerkt:
Dus dat $foutnaam, $foutemail kan weg dus? Of moet $error daar komen :o

Hij zegt nu ook steeds: formulier is verkeerd verzonden :S

Daarna heb ik dat POST (if(!isset($_POST['naam']) || !isset($_POST['email'........) weggehaald, zegt ie: Er is een fout opgetreden bij het verzenden van e-mail

Dus het een en ander klopt niet helemaal :)
 
Laatst bewerkt:
ik pas het wel even voor je aan.
Ik heb niet in de html gekeken

PHP:
<?php 
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    if(!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['onderwerp']) || !isset($_POST['bericht']) ||  )
       {
              echo "Dit forumulier is verkeert verzonden"; exit;
       }
	    $naam = $_POST['naam'];
	    $email = $_POST['email'];
	    $onderwerp = $_POST['onderwerp'];
	    $bericht = $_POST['bericht'];
    
		$error = true;
		if(trim($naam == ""))
		{
			$error = "<li>Uw naam is leeg</li>";
		}
		if(trim($email== ""))
		{
			$error .= "<li>Uw email is leeg</li>";
		}
		 elseif (!preg_match("/^[A-Za-z0-9._\-]+\@[A-Za-z0-9._\-]+\.[A-Za-z]{2,4}$/", $email))
		{
			 $error .="<li>Uw email aders is ongelig</li>";
		}
		if(trim($onderwerp== ""))
		{
			$error = "<li>Uw onderwerp is leeg</li>";
		}
		if(trim($bericht== ""))
		{
			$error = "<li>Uw bericht  is leeg</li>";
		} 

		if (eregi("\r", $naam) || eregi("\n", $naam)) {
		    $error .="<li>Uw naam is ongeldig";
		}
		if (eregi("\r", $email) || eregi("\n", $email)) {
		    $error .="<li>Uw email is ongeldig";
			//mogelijk een lopg maken 
		}
    
    if($error)
    {
		$headers = "Van: ".$naam." <".$email.">\r\n";
        if (!mail("hier stond mijn emailadres", $onderwerp, $bericht, $headers)){ 
            $error .= "<li>Er is een fout opgetreden bij het verzenden van e-mail<li>";  
        }
    
        else { 
            // succesvol verzonden, doorsturen naar bedankt-pagina
            echo "Uw bericht is verzonden";
        }
    } 

}
 
?> <center>
<table class="inhoud">
                <tr>
                                <td class="off" onclick="location.href='index.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Homepagina</td>
                                <td class="off" onclick="location.href='opdrachten.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Opdrachten boekje</td>
                                <td class="off" onclick="location.href='contact.php'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Contact</td>
                </tr>
                <tr>
                                <td class="tekst" colspan="3">
                                <form method="post" action="">
                                                <table style="width: 100%" border="0">
                                                                <tr>
                                                                    <td valign="bottom"> <?php if(isset($error)) { if (!$error){echo "Er zijn een paar errors<br /> <lu>".$error."</lu>";} ?></td>
                                                                                
                                                                </tr>
                                                </table>
                                </form>
   </td>
                </tr>
</table>
</center>

EDIT:
Ja ik heb het even uit mijn bloten hoofd gedaan. Ik heb het aangepast, je kan nu veilig dit script op je site zetten
 
Laatst bewerkt:
Door simpel value waarden mee te geven

Bijv:
HTML:
<input type="text" name="naam" value="<?php if(isset($naam)) { echo $naam; } ?>"
 
Na het verzenden moeten alle formulieren leeg zijn, om herhaaldelijk verzenden te voorkomen :)

Wat jij nu zegt klopt, heb zoiets er ook in verwerkt dat de naam blijft staan, alleen moet alles leeg zijn, nadat er op verzenden is gedrukt ;)
 
Laatst bewerkt:
ow op die manier
Nou als je de tekst krijgt: Email succesvol verzonden.
Dan moet je bij die tekst (in het php bestand) alle waardes die je valued op fals zettten.

if(!mail(mail))
{
error...
}
else
{
$naam = false;
$email = false;
$onderwerp = false;
}

ps. Ik heb even getest als je script veilig is. Hij is niet veilig.
Heb jij de code van mij over genomen?
 
Ik heb de script van jou niet overgenomen, omdat dit niet helemaal werkte. Maar kun je me vertellen wat er onveilig is? Dan kan ik het even aanpassen.
 
nou de hacker (scammer hoe je het wilt noemen) kan via dit formulier spam versuren.
Niet door alleen heletijd het formulier te versturen, maar door mail injectie.

Wil je even mij de errors geven?

EDIT:
Ik heb het even bij me zelf getest en de fouten eruit gehaalt
PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    if(!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['onderwerp']) || !isset($_POST['bericht']))
       {
              echo "Dit forumulier is verkeert verzonden"; exit;
       }
        $naam = $_POST['naam'];
        $email = $_POST['email'];
        $onderwerp = $_POST['onderwerp'];
        $bericht = $_POST['bericht'];
    	$emailPattern = "/^[A-Za-z0-9._\-]+\@[A-Za-z0-9._\-]+\.[A-Za-z]{2,4}$/"; //functioneler gemaakt, wil je een andere controle? pas dit dan aan
		$naamPattern = '/[^A-Za-z0-9]/';
        $error = "";
        if(trim($naam == "") || !preg_match($naamPattern, $naam))
        {
            $error = "<li>Uw naam is leeg/ongeldig</li>";
        }
        if(trim($email== "") || !eregi('^[a-z0-9\._\-]+@[a-z0-9\.\-]+\.[a-z]{2,6}$', $email) || !preg_match($emailPattern, $email) )
        {
            $error .= "<li>Uw email is leeg/ongeldig</li>";
        }
		else
		
        if(trim($onderwerp== ""))
        {
            $error .= "<li>Uw onderwerp is leeg</li>";
        }

        if(trim($bericht== ""))
        {
            $error .= "<li>Uw bericht  is leeg</li>";
        } 
 
		
    if($error == "")
    {
        $headers = "From: ".$naam." <".$email.">\r\n";
        if (!mail("admin@localhost", $onderwerp, $bericht, $headers)){ 
            $error .= "<li>Er is een fout opgetreden bij het verzenden van e-mail<li>";  
        }
    
        else { 
            // succesvol verzonden, doorsturen naar bedankt-pagina
            echo "Uw bericht is verzonden";
			 $naam = "";
			$email = "";
			$onderwerp = "";
			$bericht = "";
        }
    } 
	 
}


 
?> <center>
<table class="inhoud">
                <tr>
                                <td class="off" onclick="location.href='index.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Homepagina</td>
                                <td class="off" onclick="location.href='opdrachten.htm'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Opdrachten boekje</td>
                                <td class="off" onclick="location.href='contact.php'" onmouseover="this.className='on'" onmouseout="this.className='off'">
                                Contact</td>
                </tr>
                <tr>
                                <td class="tekst" colspan="3">
                               <form method="post" action="" name="formulier"> 
												<table style="width: 100%" border="0"> 
																<tr>
                                                                				<TD><?php if(isset($error)) { if($error != ""){ echo $error; }} ?></TD>
                                                                </tr>
                                                                <tr> 
																				<td><br> 
																				Naam</td> 
																				<td> <BR /> <input name="naam" type="text" style="width: 400px" value="<?php echo $naam; ?>"></td> 
																</tr> 
																<tr> 
																				<td><br> 
																				E-mailadres</td> 
																				<td> <BR /> <input name="email" type="text" style="width: 400px" value="<?php echo $email; ?>"></td> 
																</tr> 
																<tr> 
																				<td><br> 
																				Onderwerp</td> 
																				<td> <BR /> <input name="onderwerp" type="text" value="<?php echo $onderwerp; ?>" style="width: 400px" ></td> 
																</tr> 
																<tr> 
																				<td valign="top"><br> 
																				Bericht</td> 
																				<td> <BR /> <textarea name="bericht" style="width: 400px; height: 150px"><?php echo $bericht; ?></textarea></td> 
																</tr> 
																<tr> 
																				<td>&nbsp;</td> 
																				<td>&nbsp;</td> 
																</tr> 
																<tr> 
																				<td></td> 
																				<td><input name="Submit" type="submit" value="Verzenden" style="width: 121px; height: 25px"> <br> 
																				<br> 
																																								</td> 
																</tr> 
												</table> 
								</form> 
								</td> 
				</tr> 
</table> 
</center>
 
Laatst bewerkt:
Als het goed is, is mijn contactformulier nou helemaal goed :thumb:
Inclusief beveiligingen enzovoort ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan