2017-09-26 80 views
1

fwrite()を使用してデータを.txtファイルに送信するゲストブックフォームを作成しました。その後、別の.phpファイルで、.txtファイルを開き、データを展開し、foreachループを使用してテーブル内の項目を表示します。ForEachループで3回目の反復後に新しいテーブル行を作成するPHP

これは私の問題がある場所です。自分のデータ項目のすべてを、私の(3X Infiniteはゲストブックにサインインしたユーザーによって作成されたために)最初の列に新しい行として表示されます。

私はカウンタとモジュラスを使ってfor()とif()メソッドがあることを知っていますが、私はその配置を正しく行うことができません。私は誤って、テーブルに何も表示させたり、すべてを単一の行に表示させたりすることはありません。私は宣言された配列でこれを行う方法の例をたくさん見つけましたが、動的な意味でそれをどのように適用するかを理解することはできません。

マイコード:

<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> 

答えて

0

私がお勧めしたい物事のカップル:

<?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> 

はこれが呼び出されます。それに平文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のようなテーブルセマンティクスも追加されました。それらは必須ではありませんが持っていることはいいです。

関連する問題