【问题标题】:PHP Fatal error: Call to undefined function test_input() in C:\wamp\www\web\new9.php on line 11PHP 致命错误:在第 11 行调用 C:\wamp\www\web\new9.php 中未定义的函数 test_input()
【发布时间】:2014-01-15 13:59:36
【问题描述】:

如果我们仅输入名称并提交,则单击提交按钮时,以下表单会显示错误。显示的错误是

致命错误:在第 11 行的 C:\wamp\www\web\new9.php 中调用未定义函数 test_input()

谁能在下面的代码中找到问题。

      <?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>";
?>

【问题讨论】:

  • 只是一个旁注,你的功能可以优化,$data = htmlentities(trim($data));返回 $data;

标签: php html function if-statement error-handling


【解决方案1】:

将您的函数移出条件if 语句

应该是这样的……

<?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 .......... !

来自 PHP 文档...

当以条件方式定义函数时......它的定义 必须在被调用之前进行处理。

Source

【讨论】:

  • 您可能需要解释需要这样做的原因。
【解决方案2】:

一般来说,函数首先被解析,因此可以按任意顺序使用。

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

以上工作正常。

但是,与 JavaScript 等某些语言不同,PHP 允许您有条件地定义函数。你可以这样做:

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

这是一件坏事(我个人更喜欢匿名函数,或者将条件放在函数中),但这是允许的。

但是,这样做意味着无法再抓取这些功能。必须先定义它们,然后才能使用它们。回到我们的第一个例子:

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

这将失败。

【讨论】:

    【解决方案3】:

    试试

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

    来源:w3schools

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2012-07-19
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多