2015-02-09 92 views
0

我有一堆字段,我希望每个字段的内容都被检索并发布到文本文件中,但是每个字段的数据都存储在一个新行中。所以我调整了我找到的一个片段,它运作得很好,做我想要的。我检查了控制台,它给出了一个错误。我真的很陌生,我希望有人能帮忙。PHP中有错误fclose()和foreach()

错误:

Warning: Invalid argument supplied for foreach(). 
    Warning: fclose() expects parameter 1 to be resource, null given. 

PHP:

提前
<?php 
    if (isset($_POST)){ 
     foreach($_POST["textdata"] as $text){ 
      if(!file_exists($_POST['filename'] . ".txt")){ 
       $file = tmpfile(); 
      } 
      $file = fopen($_POST['filename'] . ".txt","a+"); 
      while(!feof($file)){ 
       $old = $old . fgets($file); 
      } 
      file_put_contents($_POST['filename'] . ".txt", trim($text).PHP_EOL, FILE_APPEND); 
     } 
     fclose($file); 
    } 
    ?> 

谢谢!

回答

4

您的$_POST['textdata']不是一个数组,因此foreach循环从不执行。它直接跳到fclose()呼叫。由于您从未执行过循环,所以您从未定义过$file,因此您正在关闭空文件句柄。

如果你想textdata是一个数组,那么它不得不与[]字段名在您的HTML定义:

<input type="text" name="textdata[]" /> 
           ^^---necessary. 

在事物的更大的计划,你应该有你的FCLOSE在回路内:

foreach(...) { 
    $file = tmpfile(); 
    blah blah blah 
    fclose($file); 
} 

这样,如果它只是在第一个位置打开时才关闭$ file。

+0

textdata []是我想要从中检索数据的所有输入文本的名称。它的工作原理是,它上传文本文件,每个输入文本的数据都在一个新的行上。我只是得到这些错误。 – KaveElite 2015-02-09 21:53:11

+0

那么你必须爆炸'textdata'。 PHP不会将多行字符串转换为数组。 – 2015-02-09 21:53:56

+0

在foreach循环中放置fclose确实修复了错误,那么我该如何解决文本数据的爆炸问题? – KaveElite 2015-02-09 21:57:21