Я делал тестовую страницу, на которой у меня есть форма с методом post и страницей назначения. Основная цель состояла в том, чтобы вывести отправленные значения в файл с именем UserInfo.txt
,
Это сработало, но когда я посмотрел в файл, все переменные, которые я поместил в строку, которая была выведена в файл, были 1
s.
Мой код:
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$email = $_POST['email'];
$emailb = $_POST['emailb'];
$UserInfo = <<<EOT
[NAME] = $fname, $lname
[AGE] = $age
[EMAIL] = $email
EOT;
file_put_contents("UserInfo.txt", $UserInfo, FILE_APPEND);
Вывод файла был:
[NAME] = 1, 1
[AGE] = 1
[EMAIL] = 1
HTML-форма:
<form action="7_dest.php" method="POST">
<p>First name:<input type="text" name="fname" step=0> </p>
<p>Last name:<input type="text" name="lname" step=0> </p>
<p>Age:<input type="number" name="age"> </p>
<p>E-mail:<input type="email" name="email" step=0> </p>
<p>Confirm E-mail:<input type="email" name="emailb" step=0> </p>
<p><input type="submit"> </p>
</form>
Я нашел виновника после некоторых исследований и простого тестирования.
Между битом назначения переменной и синтаксисом heredoc была if
заявление.
поскольку if
заявления используют область видимости локальной переменной и значения были назначены в область видимости глобальной переменной переменные НЕ были назначены внутри if
заявление.
В результате переменные не были назначены и поэтому не могли быть использованы.
Я исправил это, скопировав назначающий бит и вставив его в if statement
,
Вот как выглядит код сейчас:
<?php
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$email = $_POST['email'];
$emailb = $_POST['emailb'];
if (){ //I had a lot of tests here, removed them for the sake of a nice page
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$email = $_POST['email'];
$emailb = $_POST['emailb'];
$UserInfo = <<<EOT
[NAME] = $fname, $lname
[AGE] = $age
[EMAIL] = $email
EOT;
file_put_contents("UserInfo.txt", $UserInfo, FILE_APPEND);
} else {
echo "Something went wrong";
} ?>
Других решений пока нет …