PHP 语法的东西(不能在字符串中使用(引号)以 $ 开头的东西)



我想将一些变量写入一个文件,以便将它们包含在另一个脚本中。但我在运行脚本时遇到了这些错误:

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

对文字字符串使用单引号。或者逃离它们""

选项:

  1. 用反斜杠转义$
  2. 请改用单引号

示例:

$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将其假定为变量,并用其值替换它。因此,您的选项是在其前面使用"\"或使用单引号字符串对其进行转义。

我建议使用"\",因为你不能总是选择第二个选项。

我将答复移到这里作为答复。也许它会帮助别人。

相关内容

  • 没有找到相关文章

最新更新