此代码显示html表单,但没有由mysql查询生成的值(提交框将为空)。
<?php
function form() {
echo "<form>
<form action=\"page.php\" method=\"post\">
<input type=\"text\" name=\"name\" value=\"$row[column]\">
<input type=\"submit\">
</form>";
}
form();
?>
但是,如果我在函数中不时回显以下内容,则会正确回显$ row [column]数组:
<?php
echo "<form>
<form action=\"page.php\" method=\"post\">
<input type=\"text\" name=\"name\" value=\"$row[column]\">
<input type=\"submit\">
</form>";
?>
这两个代码是相同的,除了一个在函数中。如何在函数内部回显数组?我做错了什么?
答案 0 :(得分:4)
您的问题是变量范围之一。 $row
存在于全球范围内。从函数内部看,全局范围的可变数据不可用。
以下是进一步阅读的链接 - http://us1.php.net/manual/en/language.variables.scope.php
要解决此问题,您必须使$row
可用于该功能。通常有两种方法可以做到这一点。通常首选的方法是将因变量注入函数,方法是将其作为参数传递:
function form($row) {
// work with $row inside function
}
这被称为&#34;依赖注入&#34;。
第二种方式(真的不应该使用,但我在这里展示它,因为你可能会在现有的代码/代码示例中遇到它)只是使用global
关键字来使全局变量可用功能范围:
function form() {
global $row;
// work with $row inside function
}
答案 1 :(得分:2)
您必须在函数范围之外的某处定义$ row。试试这个:
<?php
function form( $row ) {
echo "<form>
<form action=\"page.php\" method=\"post\">
<input type=\"text\" name=\"name\" value=\"$row[column]\">
<input type=\"submit\">
</form>";
}
form( $row );
?>
答案 2 :(得分:0)
由于函数内部变量和外部函数之间的范围不同,所以请注意,函数内部的变量与外部不一样,例如:如果在函数外部定义了一个变量,则通过常规方式无法在函数内部访问,相反,你可以使用函数参数。
答案 3 :(得分:0)
为什么不使用此处文档?
<?php
function form($value) {
// Do not forget to escape input value
$value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
echo <<<EOD
<form action="page.php" method="post">
<input type="text" name="name" value="{$value}">
<input type="submit">
</form>
EOD;
}
form($row['column']);
答案 4 :(得分:0)
如果你真的想把变量放在那里你应该使用$GLOBALS
,你也应该使用.
运算符而不是+
来连接字符串,所以它是{{ 1}}。
尽管在函数中使用全局值并非最佳实践方法(至少可以说),尤其是在使用直线打印时 - 请参阅... value=\"" . $GLOBALS['row']['column'] . "\"> ...
,strip_tags()
,htmlspecialchars()
及其朋友。
您应该使用函数参数,而不是使用全局变量,因此在您的情况下它是:
htmlentities()