0

Hi Everyone,
I am trying to test a simple email validation form using $_SERVER at the same page as

<?php 
if (isset($_POST['submitted'])) {
$email = $_POST['email'];
$result = filter_var($email, FILTER_VALIDATE_EMAIL) ;
if($result)
{ 
  echo "Valid email address."; 
} 
else { 
  echo "Invalid email address."; 
  } 
}
?>
<html>
<body>
<form action="<?php $_SERVER['PHP_SELF']?>" method="post">
<p>E-mail: <input type="text" name="email" /></p>
<p><input type="submit" name="submitted" value="Validate Email"></p>
</form>
</body>
</html>

Now the validaion part works fine and PHP validate the user input but when I refresh the page the last validation result still remains in the page!
I tried to fix the issue by adding following after the echo functions

header("Location: ".$_SERVER['PHP_SELF']);

which refresh the page but this time I am not getting the results of validations.
Can you please let me know how I can fix the issue?
Thanks for your time in advance.

3
Contributors
4
Replies
7
Views
5 Years
Discussion Span
Last Post by diafol
0

You shouldn't send a form to itself, as refreshing will cause the form to re-submit.

Usually you can send a form to a form handler which does all the processing and then redirect back to the form page.

0

hi ardav,
Thanks for your comment, but honestly I didn't get this part:
you can send a form to a form handler which does all the processing and then redirect back to the form page.

Can you please tell me how I can use a form handler for this specific example?

Thansk

0

Use the following :

<?php 
if (isset($_POST['submitted'])) {
$email = $_POST['email'];
$result = filter_var($email, FILTER_VALIDATE_EMAIL) ;
if($result)
{ 
  echo "Valid email address."; 
  header("Location: ".$_SERVER['PHP_SELF']);
} 
else { 
  echo "Invalid email address."; 
  header("Location: ".$_SERVER['PHP_SELF']);
  } 
}
?>

Think this will do...

0

you send the form to say formhandler.php

It runs all the php code. Instead of echoing out the response you can do something like this:

if($result){
  $msg="valid";
}else{
  $msg="invalid";
}
header("Location: form.php?msg=$msg");
exit;

Then in your form page, you could do something like this:

if(isset($_GET['msg'])){
  $msg = ($_GET['msg']=='valid')? '<p class="green">Valid email address.</p>' : '<p class="red">Invalid email address.</p>';
}
...
<p>E-mail: <input type="text" name="email" /></p><?php if(isset($msg))echo $msg;?>

To show the colours you need this in CSS or a style tag in the head:

.green{
  color: green;
}
.red{
  color: red;
}

Edited by diafol: n/a

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.