Reputation: 3
Let's start to say I'm still new to this php. I'm not going to give up, I will learn it. I have a problem whit my form code, that I have put together. I can't get it to send it, after it have validate all my inputs fields. Can not understand why. Maybe I can get some help? Maybe you can fix it so it works? So I have something to work with.
<?php
// This is your email address
$to = "[email protected]";
// Subject title
$subject = 'Testing work now pls';
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
// More headers
$headers .= 'From: <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= "Reply-To: ".$email."\r\n";
// If press send
if (isset($_POST['send'])) {
// If not empty
$errors = array(
$errorsname = $errorsemail
);
// Start validation
// Check if name not empty
if (empty($_POST["name"])) {
$errorsname = "You must write their name.";
} else {
$name = ($_POST["name"]);
// Check if only letters in name
if (!preg_match("/^[a-zA-Z æøå-ÆØÅ]*$/",$name)) {
$errorsname = "Their name only content letters.";
}
// Check if name to short
if(strlen($_POST['name']) < 2 )
{
$errorsname = 'Their name is too short.'; }
// Check if name to long name
if(strlen($_POST['name']) > 30 )
{
$errorsname = 'Their name is too long'; }
}
// Check email
if (empty($_POST["email"])) {
$errorsemail = "You must enter their email."; }
else {
$email = ($_POST["email"]);
// Check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$errorsemail = "Invalid email address."; }
}
// Check errors if non continue
if (empty($errors))
{
// Make message ready
$message = "
Stupid just work pls! $navn, $email
";
// Then send mail
mail($to,$subject,$message,$headers);
// Redirect to sucesse page
header('Location: mysite.php');
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<style>
.errors {
color: #FF0000;
}
</style>
</head>
<body>
<h2>Hmmm....Help?</h2>
<span class="errors"><?php echo $errormessage; ?></span>
<form name="kontakt" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input name="name" type="text" placeholder="Deres navn.." value="<?php echo $name;?>">
<span class="errors"><?php echo $errorsname;?></span>
<br><br>
E-mail: <input name="email" type="text" placeholder="Din e-mail.." value="<?php echo $email;?>">
<span class="errors"><?php echo $errorsemail;?></span>
<br><br>
<br><br>
<input type="submit" name="send" value="Send">
</form>
</body>
</html>
Upvotes: 0
Views: 53
Reputation: 859
You have a multitude of issues here. Firstly in your HTML you need to check to see if your error variables are set, if so, display them, otherwise you are going to get php errors:
<span class="errors"><?php
if (isset($errormessage)) {
echo $errormessage;
}
?></span>
<form name="kontakt" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
Name: <input name="name" type="text" placeholder="Deres navn.." value="<?php
if (isset($name)) {
echo $name;
}
?>">
<span class="errors"><?php
if (isset($errorsname)) {
echo $errorsname;
}
?></span>
<br><br>
E-mail: <input name="email" type="text" placeholder="Din e-mail.." value="<?php echo $email; ?>">
<span class="errors"><?php if (isset($errorsemail)) {
echo $errorsemail;
}
?></span>
Secondly, as states above, your $erros array should be instantiated similar or as Barmar has shown.
and lastly, your $email variable is not instantiated when loading the page, you're going to have to give it a default:
if(isset($_POST['email'])){
$email = $_POST['email'];}
else{
$email = '';
}
Upvotes: 0
Reputation: 782737
You're setting $errors
to a non-empty array before you do the validation, so
if (empty($errors))
will always fail. You should initialize it as:
$errors = array();
Then your validation code should add to it in this way:
if (empty($_POST['name'])) {
$errors['name'] = "You must write their name.";
}
and
if (empty($_POST['email'])) {
$errors['email'] = "You must enter their email.";
}
Upvotes: 1