我想将一些变量写入一个文件,以便将它们包含在另一个脚本中。但我在运行脚本时遇到了这些错误:
Notice: Undefined variable: host in I:xampphtdocscontactinstallwriteconfig.php on line 2
Notice: Undefined variable: database in I:xampphtdocscontactinstallwriteconfig.php on line 2
Notice: Undefined variable: user in I:xampphtdocscontactinstallwriteconfig.php on line 2
Notice: Undefined variable: password in I:xampphtdocscontactinstallwriteconfig.php on line 2
HTML表单:
<html>
<head>
<title>Contact installatie</title>
</head>
<body>
<h1>Contact installatie</h1>
<h2>Database gegevens:</h2>
<form name="databasesettings" action="writeconfig.php" method="post">
Host: <input type="text" name="host"> <br>
Database: <input type="text" name="database"> <br>
User: <input type="text" name="user"> <br>
Password: <input type="password" name="password"> <br>
<input type="submit" value="Generate config">
</form>
</body>
</html>
和PHP代码:
<?php
$config = "$host = " . $_POST["host"] . "n$database = " . $_POST["database"] . "n$user = " . $_POST["user"] . "n$password = " . $_POST["password"];
$configfile=fopen("config.txt","w+");
fwrite($configfile, $config);
fclose($configfile);
?>
对文字字符串使用单引号。或者逃离它们""
选项:
- 用反斜杠
转义
$
- 请改用单引号
示例:
$config = "$host = " . $_POST["host"] . "n$database = " . $_POST["database"] . "n$user = " . $_POST["user"] . "n$password = " . $_POST["password"];
$config = '$host = ' . $_POST["host"] . "n" . '$database = " . $_POST["database"] . "n" . '$user = " . $_POST["user"] . "n" . '$password = " . $_POST["password"];
当使用单引号时,像n
这样的特殊字符也需要特别考虑。在我的例子中,我只是把它们放在双引号中,但你也可以省略它们。
您有两种选择来解决这个问题。
PHP中的双引号字符串执行变量名替换(使用大括号包装时执行更高级的替换(。相反,您可以使用单引号字符串来在其中使用$
,如下所示:
$config = '$host = ' . $_POST["host"] . "n" . '$database = ' . $_POST["database"] . "n" . '$user = ' . $_POST["user"] . "n" . '$password = ' . $_POST["password"];
请注意,必须将n
放入双引号字符串中,否则将无法正确替换。
另一种选择是逃离(使用(您的
$
,如下所示:
$config = "$host = " . $_POST["host"] . "n$database = " . $_POST["database"] . "n$user = " . $_POST["user"] . "n$password = " . $_POST["password"];
作为奖励,如果你想像我上面提到的那样使用大括号,你可以这样写你的字符串:
$config = "$host = {$_POST['host']}n$database = {$_POST['database']}n$user = {$_POST['user']}n$password = {$_POST['password']}";
但这并不意味着我会建议你这样做:(
做到这一点的最好方法可能是使用sprintf,这使它的可读性略高:
$config = sprintf("$host = %srn$database = %srn$user = %srn$password = %s",
$_POST['host'], $_POST['database'], $_POST['user'], $_POST['password']);
当使用双引号("(包装字符串时,PHP会尝试用其值替换字符串中的任何变量名($variable(。如果您不希望PHP这样做,请使用单引号('(包装字符串。
有关更多信息,请阅读PHP手册中的字符串:
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double
http://php.net/manual/en/language.types.string.php#language.types.string.parsing
附带说明一下,PHP不会对使用单引号的字符串进行任何解释。所以n
不会在单引号字符串中工作,它需要在双引号字符串中。
"$var"将尝试查找变量$var;试着读这个http://php.net/manual/en/language.types.string.php
当在双引号字符串中使用'$'时,php将其假定为变量,并用其值替换它。因此,您的选项是在其前面使用"\"或使用单引号字符串对其进行转义。
我建议使用"\",因为你不能总是选择第二个选项。
我将答复移到这里作为答复。也许它会帮助别人。