Reputation: 335
I currently have a form that requests the user's email, cell phone number, and cell carrier. None of the fields are marked required, as I only need either the email or cell number. The form submits perfectly fine if the user inputs both email and phone number or just phone number and no email. However, the form will not submit if the user attempts to submit it with just an email and no phone number. In other words, a phone number is required in order for the form to work.
How can I prevent this? I would like the user to be able to input just their email or just the phone; neither should be mandatory. Any help would be greatly appreciated.
I also have a problem validating the phone number (FILTER_VALIDATE_INT does not work with 10-digit numbers), but that is a problem I will tackle later.
The code for the form is as follows:
<form action="insert.php" method="post" id="signup">
<p>
<input type="text" id="email" name="email" value="E-mail" /><br/>
<input type="text" id="phone" name="phone" value="Phone" /><br/>
<select id="carrier" name="carrier">
<option value="" selected="selected">Carrier</option>
<option value="att">AT&T</option>
<option value="sprint">Sprint</option>
<option value="tmobile">T-Mobile</option>
<option value="verizon">Verizon</option>
</select>
</p>
<p>
<input type="image" src="images/button.gif" alt="Register!" />
</p>
</form>
The code for the PHP script is as follows:
<?php
$con = mysql_connect("dbhost","dbuser","dbpass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("dbname", $con);
$filters = array(
"email"=> FILTER_VALIDATE_EMAIL,
"phone" => FILTER_VALIDATE_INT,
);
$result = filter_input_array(INPUT_POST, $filters);
if (!$result["email"])
{
echo("E-mail is invalid.<br />");
}
elseif(!$result["phone"])
{
echo("Phone is invalid.<br />");
}
else
{
$sql="INSERT INTO dbtable (email,phone,carrier)
VALUES
('$_POST[email]','$_POST[phone]','$_POST[carrier]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
mysql_close($con);
header('Location: http://pagename.com');
}
?>
Upvotes: 0
Views: 1494
Reputation: 21082
$result = filter_input_array(INPUT_POST, $filters);
if(!empty($result["email"]) || !empty($result["phone"])){
//Being here means that either the email or the phone has passed
//your validation and therefore you should be able to insert in the db.
}else{
//Being here means that neither the phone or email have been filled
//and should show a message like "Please fill at least one field :)"
}
Your problem came from the fact that your if
statements where asking for BOTH fields to be correctly filled, and if they were, then insert the data. Just follow your conditional structures.
Upvotes: 3