【问题标题】:Creating New Table Row After Third Iteration in ForEach Loop PHP在 ForEach 循环 PHP 中第三次迭代后创建新表行
【发布时间】:2017-09-26 16:37:39
【问题描述】:

我制作了一个留言簿表单,它使用 fwrite() 将数据提交到 .txt 文件。然后在一个单独的 .php 文件中打开 .txt 文件,分解数据,然后使用 foreach 循环在表格中显示项目。

这就是我的问题所在,我设法使我的所有数据项都出现在新行中,所有这些新行都保存在我的(3 X Infinite,因为它是由用户签署留言簿而构建的)表的第一列中。

我知道有使用计数器和模数的 for() 和 if() 方法 - 但我无法正确放置它们。要么我不小心导致表格中没有显示任何内容,要么所有内容都显示在一行中,所有内容都在一个单元格中。我找到了很多关于如何使用声明的数组执行此操作的示例,但我无法弄清楚如何在动态意义上应用它。

我的代码:

    <?php echo "<h3><center><u>Review What You've Posted</u></center></h3>";
    ?>

    <?php
        $firstName = $_POST['firstName'];

        echo "<u>Your Name:</u> " .$firstName. "<br><br>";

        $yourEmail = $_POST['yourEmail'];

        echo "<u>Your Email:</u> " .$yourEmail. "<br><br>";

        $yourComments = $_POST['yourComments'];

        echo "<u>What You Thought:</u> " .$yourComments. "<br>";

        "<br>";


        $guestBook = fopen('guestBookData.txt', 'a+');

        $outputstring = $firstName . ':' . $yourEmail . ':' . $yourComments 
    . ':' . "\r";


        fwrite($guestBook,$outputstring);
        fclose($guestBook)

    ?>
    </main>

这是由以下人员调用的:

    <main class="Main Body BG" id="wrapper">

    <table style="width:100%" border="3" cellpadding="3">
    <caption>Previous Visitors</caption>
    <br>
    <tr>
    <td bgcolor="#FBB2EA" align="center"> Name </td>
    <td bgcolor="#FBB2EA" align="center"> Email </td>
    <td bgcolor="#FBB2EA" align="center"> Comments </td>
    </tr>

    <?php 

    $guestBook = fopen('guestBookData.txt', 'r'); 

    if($guestBook){
        while(($dataString=fgets($guestBook)) !==false){

            $dataField = explode(':', $dataString);

            foreach($dataField as $df){

                echo "<tr><td>".$df."</td></tr>";

                }   

    }

    fclose($guestBook); 

    }

    ?>

    </table>

    </main>

【问题讨论】:

    标签: php foreach html-table iteration


    【解决方案1】:

    我建议的几件事。不要为此使用普通的fwrite。您隐含地假设 : 不能成为您输入的一部分,这不是一个合理的假设。使用以下内容:

     $guestBook = fopen('guestBookData.txt', 'a+');
     $outputarray = [ $firstName, $yourEmail, $yourComments ];
     fputcsv($guestBook,$outputarray,$delimiter); 
    

    第二件事是你为每个字段制作一行,你应该这样做:

     <main class="Main Body BG" id="wrapper">
    
    <table style="width:100%" border="3" cellpadding="3">
    <caption>Previous Visitors</caption>
    <thead>
    <tr>
    <th bgcolor="#FBB2EA" align="center"> Name </td>
    <th bgcolor="#FBB2EA" align="center"> Email </td>
    <th bgcolor="#FBB2EA" align="center"> Comments </td>
    </tr>
    </thead>
    <tbody>
    <?php 
    
    $guestBook = fopen('guestBookData.txt', 'r'); 
    
    if($guestBook){
        while(($dataField=fgetcsv($guestBook,0,":")) !==false){ //CSV style reading here too
          echo "<tr>"; //Open row
          foreach($dataField as $df){
              echo "<td>".$df."</td>";
          }   
         echo "</tr>"; //Close row
    }
    
    fclose($guestBook); 
    
    ?>
    </tbody>
    </table>
    
    </main>
    

    您可以在fputcsvfgetcsv 上阅读更多内容

    **添加了一些表语义以及theadtbody。这些不是必需的,但很高兴拥有。

    【讨论】: