sally draper
sally draper

Reputation: 13

Simple PHP Form Validation

I am very much a beginner at this kind of stuff, so please forgive me if this is a really stupid question, but I'm having trouble modifying my code, and I just need some guidance.

Anyways, I need to make a form that allows a user to input 3 different values. The 1st input needs to be an integer number from 1-99. The 2nd input needs to be a real number from 0.0-10.0. And the last input just needs to be any type of string input (the input can literally be anything, it just can't be left blank).

Here is what I have thus far:

<?php

if 
(is_numeric($_POST['number1'])&& 

is_numeric($_POST['number2']))

{
    $number1 = $_POST['number1'];
    $number2 = $_POST['number2'];
    $string1 = $_POST['string1'];   
    echo "<p>Int Number =
        $number1</p>\n";
    echo "<p>Real Number = 
        $number2</p>\n";
    echo "<p>String = 
        $string1</p>\n";

    } 
else {
echo 'Error. Integer Number must be an integer (1-99), Real Number must 
        be a real number (0.0-10.0), and String cannot be left blank. 
    Please go back and fill out the form again.';
}       

?>

So with this code I obviously do not have the rules set (i.e. the first number has to be an integer from 1-99, etc.)

I know that I need to add an if-else statement for the rules to be implemented, but I cannot figure out the correct way to do it.

Any advice/help is truly appreciated.

Thank you!

Upvotes: 1

Views: 452

Answers (2)

Antony
Antony

Reputation: 15106

The 1st input needs to be an integer number from 1-99:

if (is_numeric($_POST['number1']))
...
$number1 = +$_POST['number1'];
if (is_int($number1) && $number1 >= 1 && $number1 <= 99)

The 2nd input needs to be a real number from 0.0-10.0:

if (is_numeric($_POST['number2']) && strlen(substr(strrchr($_POST['number2'], "."), 1)) === 1)
...
$number2 = +$_POST['number2'];
if ($number2 >= 0 && $number2 <= 10)

And the last input just needs to be any type of string input (the input can literally be anything, it just can't be left blank):

$string1 = $_POST['string1'];
if (strlen($string1) > 0)

Combined together, the condition will be:

$error = true;

if (is_numeric($_POST['number1'])
    && is_numeric($_POST['number2'])
    && strlen(substr(strrchr($_POST['number2'], "."), 1)) === 1) {

    $number1 = +$_POST['number1'];
    $number2 = +$_POST['number2'];
    $string1 = $_POST['string1'];

    if (is_int($number1) 
        && $number1 >= 1 
        && $number1 <= 99
        && $number2 >= 0
        && $number2 <= 10
        && strlen($string1) > 0) {

        echo "<p>Int Number =
        $number1</p>\n";
        echo "<p>Real Number = 
        ".number_format($number2, 1)."</p>\n";
        echo "<p>String = 
        $string1</p>\n";
        $error = false;

    }
}

if ($error) {
    echo 'Error. Integer Number must be an integer (1-99), Real Number must 
          be a real number (0.0-10.0), and String cannot be left blank. 
          Please go back and fill out the form again.';
}

Upvotes: 1

egig
egig

Reputation: 4430

What about:

 //first rule
function setRule1($var){
  if (is_numeric($var)){
     if($var < 1 || $var > 99){
        return false; 
     } else return true;
  } else return false;
}

//second rule if you need check number of decimal place
function setRule2($var){
    if (is_numeric($var)){
     if(strlen(array_pop(explode('.',$var))) > 1){//<-- change 1 to desired decimal places.
        return false;
      } else return true;
    } else return false;
}

Usage:

if (setRule1($_POST['number1']) && setRule2($_POST['number2']) && $_POST['string1'] != '')//third condistion check if string is blank or not.
{
  $number1 = $_POST['number1'];
  $number2 = $_POST['number2'];
  //and soon...

Upvotes: 0

Related Questions