如果我们仅输入名称并提交,则以下表单显示单击提交按钮时出错。显示的错误为
致命错误:在第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>";
?>
答案 0 :(得分:7)
将您的功能移出条件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文档...
当以条件方式定义函数时......其定义 必须在被叫之前进行处理。
答案 1 :(得分:1)
通常,首先解析函数,因此可以按任何顺序使用。
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";}
}
这会失败。
答案 2 :(得分:0)
尝试
<form method='post' enctype='multipart/form-data' action='<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>'>