我已经有了这个HTML表单:
<form action="../functions/createproject.php" method="post">
Name: <input type="text" name="name"><br>
Description: <input type="text" name="description"><br>
<input type="submit">
</form>
下面的PHP代码(createproject.php):
<?php
$projectname = $_POST["name"];
$projectdescription = $_POST["description"];
function createproject() {
if (!file_exists("../projects/$projectname")) {
mkdir("../projects/$projectname", 0777, true);
}
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "../projects/$projectname/info.txt","wb");
fwrite($fp,$content);
fclose($fp);
}
createproject();
?>
但是我得到以下错误:
Notice: Undefined variable: projectname in /home/wdele/domains/hypah.org/public_html/functions/createproject.php on line 5 Notice: Undefined variable: projectname in /home/wdele/domains/hypah.org/public_html/functions/createproject.php on line 8 Warning: fopen(/home/wdele/domains/hypah.org/public_html../projects//info.txt): failed to open stream: No such file or directory in /home/wdele/domains/hypah.org/public_html/functions/createproject.php on line 8 Notice: Undefined variable: content in /home/wdele/domains/hypah.org/public_html/functions/createproject.php on line 9 Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/wdele/domains/hypah.org/public_html/functions/createproject.php on line 9 Warning: fclose() expects parameter 1 to be resource, boolean given in /home/wdele/domains/hypah.org/public_html/functions/createproject.php on line 10
我想不出任何不工作的理由。
任何想法?谢谢。
在全局作用域中定义$projectname
,但在函数作用域中使用它。有两种方法可以处理这个问题:
使用global
使全局变量在函数中可用:
function createproject() {
global $projectname;
...
或者将函数改为以$projectname
为参数:
function createproject($projectname) {
...
则用createproject($projectname)
调用。
后者是通常的做法。全局变量的使用通常是不受欢迎的,因为它使代码更难理解,并且缺乏模块化。
不能在函数外部调用已定义的变量。使用global
关键字。像这样:
function createproject() {
global $projectname;
if (!file_exists("../projects/$projectname")) {
mkdir("../projects/$projectname", 0777, true);
}
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "../projects/$projectname/info.txt","wb");
fwrite($fp,$content);
fclose($fp);
}