Вставка в текстовый файл из входных данных, сгенерированных PHP

#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 ).