0

いくつかの変数をファイルに書き込んで、それらを別のスクリプトに含めたいと思いました。しかし、スクリプトの実行中に次のエラーが発生します。

Notice: Undefined variable: host in I:\xampp\htdocs\contact\install\writeconfig.php on line 2

Notice: Undefined variable: database in I:\xampp\htdocs\contact\install\writeconfig.php on line 2

Notice: Undefined variable: user in I:\xampp\htdocs\contact\install\writeconfig.php on line 2

Notice: Undefined variable: password in I:\xampp\htdocs\contact\install\writeconfig.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);
?>
4

6 に答える 6

1

二重引用符 ( " ) を使用して文字列をラップすると、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、単一引用符で囲まれた文字列では機能せず、二重引用符で囲まれた文字列にする必要があります。

于 2013-01-20T17:58:48.430 に答える
1

リテラル文字列には一重引用符を使用します。またはそれらをエスケープ"\"

于 2013-01-20T17:59:08.140 に答える
1

オプション:

  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も特別な考慮が必要です。私の例ではそれらを二重引用符で囲んだだけですが、エスケープすることもできます。

于 2013-01-20T17:59:34.970 に答える
1

この問題を回避するには、2 つのオプションがあります。

PHP の二重引用符で囲まれた文字列は、変数名の置換を実行します(中括弧で囲まれた場合は、より高度な置換も実行されます)。代わりに、単一引用符で囲まれた文字列を使用$して、次のように使用できます。

$config = '$host = ' . $_POST["host"] . "\n" . '$database = ' . $_POST["database"] . "\n" . '$user = ' . $_POST["user"] . "\n" . '$password = ' . $_POST["password"];

s を二重引用符で囲んだ文字列にする必要があることに注意してください\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 = %s\r\n\$database = %s\r\n\$user = %s\r\n\$password = %s",
              $_POST['host'], $_POST['database'], $_POST['user'], $_POST['password']);
于 2013-01-20T18:01:28.090 に答える
0

二重引用符で囲まれた文字列内で「$」を使用すると、php はそれを変数と見なし、その値に置き換えます。したがって、オプションは、その前に「\」を使用してエスケープするか、単一引用符で囲まれた文字列を使用しています。

常に 2 番目のオプションを使用できるとは限らないため、「\」を使用することをお勧めします。

ここで回答として返信を移動しています。それは他の人を助けるかもしれません。

于 2013-01-20T18:10:22.077 に答える
0

"$var" は変数 $var を見つけようとします。これを読んでみてくださいhttp://php.net/manual/en/language.types.string.php

于 2013-01-20T17:59:31.950 に答える