#php #function #text
#php #функция #текст
Вопрос:
Я застрял на проблеме с заданием PHP, которое у меня есть. Я создал PHP-скрипт для генерации входных данных формы, и я должен взять данные из входных данных и вставить их в текстовый документ. Итак, я написал код, который генерирует два входных данных и функцию, которая будет записывать данные в текстовый документ. Однако мой текстовый документ отображается пустым. Как мне правильно определить функцию, которая принимает несколько значений из текстовых входных данных и вставляет их в текстовый документ? Вот мой код до сих пор:
<form method='post'>
<table border='0' cellpadding='3' cellspacing='5'>
<tr>
<td><h2>Item</h2></td>
<td><h2>Amount</h2></td>
</tr>
<?php
for($row=1; $row<5;$row )
{
$item_name='item_name'.$row;
$item_value = $_POST[$item_name];
$amount_name='amount_name'.$row;
$amount_value = $_POST[$amount_name];
echo
"<tr>
<td><input type='text' name='$item_name' value='$item_value' /></td>
<td><input type='text' name='$amount_name' value='$amount_value' /></td>
";
if (!empty($amount_value))
{
if(is_numeric($amount_value))
{
$total = $total $amount_value;
}
else {
echo
"<td class='bad'>Amount Invalid: $amount_value</td>";
$error_count ;
}
}
echo"
</tr>
";
}
?>
<tr>
<td colspan='2'>
<input name='' type='submit' value='Submit' />
</td>
</table>
<?php
if ($error_count > 0)
{
echo "<br /><span class='bad' />Errors: $error_count</span>";
}
else
{
echo "<br />Total: $total";
}
if ($error_count == 0)
{
addData();
}
//Function
function addData()
{
$myFile = "bills.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = $amount_value;
fwrite($fh, $stringData);
$stringData = $item_value;
fwrite($fh, $stringData);
fclose($fh);
}
?>
</form>
Комментарии:
1. Добавьте
error_reporting(E_ALL);
поверх вашего скрипта. Затем рассмотрите возможность добавления параметров функции.
Ответ №1:
Когда вы присваиваете значение $item_value
в верхней части кода, вы создаете переменную с именем $item_value в области вашего php-тега. В функции addData() нет переменной с именем $item_value, поэтому $stringData = $item_value
создается переменная $stringData
со значением, равным новой переменной item_value
со значением null. Передайте данные вашему методу, после чего вы сможете получить к нему доступ.
Попробуйте вызвать его следующим образом:
addData($item_value);
Затем измените метод на:
function addData($item_value){
Комментарии:
1. Хорошо, я пошел дальше и попробовал это, но текстовый документ пуст. Кроме того, нужно ли мне определять обе переменные? ($item_value и $amount_value)?
2. Тогда я не думаю, что вы когда-либо сможете вызвать метод
addData
, потомуif ($error_count == 0)
что возвращает false . Попробуйте добавитьecho 'ERROR COUNT = 0';
в код прямо около строкиaddData($item_value)
. Если ничего не отображается, вы знаете, что вы также никогда не сможете вызвать метод.3. Хм, я добавил его, и он отобразился
4. Итак, в основном я пытаюсь выяснить, почему эти значения отображаются как null
5. Попробуйте то же самое, что и раньше, за исключением того, что теперь попробуйте
echo $item_value
. Если что-то отображается, значит, вы знаете, что $item_value не пустое. Область переменной может быть концовка в первом набора <?php ?> теги.
Ответ №2:
Правила области видимости переменных PHP не позволяют глобальным переменным появляться внутри функции, если вы явно не объявите их глобальными. Таким образом, в вашей addData()
функции $amount_value и $item_value являются необъявленными / неопределенными ЛОКАЛЬНЫМИ переменными и преобразуются в нули / пустые строки для вызовов fwrite(), поэтому ваш код может записывать только пустой файл.
Либо передайте значения в качестве параметров функции:
addData($amount_value, $item_value);
или объявить их как глобальные:
function addData() {
global $amount_value, $item_value
Из двух выберите параметр version . Глобальные переменные запутаны.
Комментарии:
1. Я пробовал оба метода, но каждый раз получаю пустой текстовый документ
2. Не забывайте, что на самом деле вы загружаете 5 разных наборов данных POST в эти две переменные. Только последний набор будет «прилипать», и если они были отправлены пустыми, вы получите пустые переменные.
Ответ №3:
Вам нужно будет передать $amount_value
и $item_value
в функцию, по крайней мере. И, вероятно, некоторые возвраты каретки. например
addData($item_value, $amount_value);
//Function
function addData($item_value, $amount_value)
{
$myFile = "bills.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, "$amount_value, $item_valuen");
fclose($fh);
}
Комментарии:
1. Ну, я сделал это, и мой текстовый документ был пуст. Есть идеи? Будет ли нормально, если значения будут заключены в кавычки следующим образом: fwrite($fh, «$amount_value, $item_value n»)?
2. Вероятно, вам нужен
a
режим для открытия файла. Это будет добавляться к файлу (w
будет перезаписываться каждый раз). См. fopen для получения дополнительной информации. Кавычки в порядке, потому что PHP интерполирует переменные в двойных кавычках ($amount_value
т. Е. Заменяет их фактическим значением, например4
).