2011-10-18 33 views
0

我被困在我有一个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> 
+0

在脚本的顶部添加'error_reporting(E_ALL);'。然后考虑添加功能参数。 – mario

回答

2

当你在代码的顶部值分配给$item_value,你正在创建一个你的PHP标签的范围内$称为ITEM_VALUE变量。在函数addData()中,没有称为$ item_value的变量,因此$stringData = $item_value会创建一个变量$stringData,其值等于新变量item_value,其值为null。将数据传递给您的方法,然后您将能够访问它。

尝试调用它像:

addData($item_value); 

然后,该方法更改为:

function addData($item_value){ 
+0

好吧,我继续尝试这个,但文本文件是空白的。另外,我是否需要定义这两个变量? ($ item_value和$ amount_value)? –

+0

然后我不认为你总是调用addData方法,因为if($ error_count == 0)'返回false。尝试添加'echo'ERROR COUNT = 0';'关于addAdd($ item_value)'行的代码。如果没有任何显示,你就知道你永远不会去调用这个方法。 – CHawk

+0

嗯,我添加它,它显示 –

1

PHP的变量的作用域规则不允许全局变量的函数中出现,除非你明确声明他们的全球。因此,在addData()函数中,$ amount_value和$ item_value都是未声明/未定义的LOCAL变量,并且为fwrite()调用转换为空值/空字符串,因此您的代码只能写出空文件。

无论是值传递的功能参数:

addData($amount_value, $item_value); 

或把他们定义为全局:

function addData() { 
    global $amount_value, $item_value 

在这两个,去与参数版本。全局变量很混乱。

+0

我已经尝试了这两种方法,但我每次都得到一个空白的文本文档 –

+0

不要忘记,你实际上将5套不同的POSt数据加载到这两个增值服务中。只有最后一组将会“粘住”,如果这些被提交为空,那么你会得到空变量。 –

0

您至少需要将$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_value\n"); 
    fclose($fh); 
} 
+0

嗯,我做到了这一点,我的文本文档是空的。有任何想法吗?如果值是像这样的引号,它会没问题:fwrite($ fh,“$ amount_value,$ item_value \ n”)? –

+0

您可能需要'a'模式来打开文件。这会附加到文件中(每次都会覆盖“w”)。有关更多信息,请参阅[fopen](http://php.net/manual/en/function.fopen.php)。引号是可以的,因为PHP用双引号插入变量(即它用实际值,例如'4'替换'$ amount_value')。 –