简体   繁体   中英

PHP Fatal error: Call to undefined function test_input() in C:\wamp\www\web\new9.php on line 11

The following form shows an error on clicking the submit button if we enter the name only and submit.The error shown is

Fatal error: Call to undefined function test_input() in C:\\wamp\\www\\web\\new9.php on line 11

Can anyone find the problem in the below code.

      <?php
// define variables and set to empty values
$name1Err = $email1Err  =  "";
$name1 = $email1 =  "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
 if (empty($_POST["input_1"]))
    {$name1Err = "Your name is required. Just the first will do. ";}
  else
    {$name1 = test_input($_POST["input_1"]);
     if (!preg_match("/^[a-zA-Z ]*$/",$name1))
       {       $name1Err = "Only letters and white space allowed"; }
    }

 if (empty($_POST["input_12"]))
    {$email1= "";}
  else
    {$email1 = test_input($_POST["input_12"]);
    // check if e-mail address syntax is valid
     if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email1))
       {  $emailErr = "Invalid email format"; }
    }




function test_input($data)
{
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
}
?>
        <form method='post' enctype='multipart/form-data' action=''>
                name<input name='input_1' type='text' value='<?php echo $name1;?>' tabindex='1' />
                <div class="validation_message"><?php echo $name1Err ?></div>

                email<input name='input_12'  type='email' value='<?php echo $email1;?>'/><br/>
                <textarea name='input_5' tabindex='9'   rows='10' cols='50'></textarea>

            <input type='submit' value='Submit' tabindex='25' />

    </form>


<?php
echo "<h2>Your Input:</h2>";
echo "Name:".$name1;
echo "<br>";
echo "Email:".$email1;
echo "<br>";
?>

Move your function out of your conditional if statement

It should be like this...

<?php
// define variables and set to empty values
$name1Err = $email1Err  =  "";
$name1 = $email1 =  "";

// Moved here
function test_input($data)
{
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
// .... your remaining code .......... !

From the PHP Docs...

When a function is defined in a conditional manner ... Its definition must be processed prior to being called.

Source

In general, functions are parsed first and can therefore be used in any order.

echo foo();
function foo() {return "bar";}

The above works fine.

However, unlike some languages like JavaScript, PHP allows you to conditionally define functions. You might do something like this:

if( $something) {
    function foo() {echo "bar";}
}
else {
    function foo() {echo "fish";}
}
foo();

It's a bad thing to do (personally I'd prefer anonymous functions, or putting the conditional inside the function), but it's allowed.

However, doing this means that the functions can no longer be grabbed. They MUST be defined before they can be used. Going back to our first example:

if( true) {
    echo foo();
    function foo() {return "bar";}
}

This will fail.

try

<form method='post' enctype='multipart/form-data' action='<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>'>

source: w3schools

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM