2013-05-28 84 views
0

我創建了一個小模塊,允許用戶在進入網頁時添加小信息。爲此,它將它們寫入一個html文檔(msg.html)中,然後在頁面中將其包含()成一個div。PHP:包含()時反轉/反轉文件行順序()d或用fwrite寫入時

我最大的問題是,我不知道如何製作結果文件,用include()顯示的結果文件顯示最近的第一個等...我試着改變fopen屬性( a,r,b,c,cb +,etccccc),但沒有什麼穩定的。

對於我如何看到它,我應該將php表單寫入文件,在最頂部的行中添加ALWAYS,這樣include()會正常顯示文件,最新的文件顯示爲第一個文件。或者,我可以製作某種反向數組,幷包含()或回顯「反向」內容。 無論如何,我只是沒有這方面的知識。

這裏是我的代碼:

<?php 

if (isset($_POST['msg'])) { 

    $usr = preg_replace('/[^a-zA-Z0-9]/', '',$_POST['usr']); 
    $msg = $_POST['msg']; 

    if (empty($usr)) { 
     $usr = "Anonymous"; 
    } 

    if (!empty($msg)) { 
     $fsp = fopen('msg.html', "ab+"); 
     fwrite($fsp, '<tr><td class="info"><span class="usr">'. $usr .'</span><br><span class="dat">'. date("F j, Y, H:i ") .'</span></td><td>'. $msg ."</td></tr>\n"); 
     fclose($fsp); 
     unset($_POST['msg']); 
     unset($_POST['usr']); 
    } 
} 

?> 

<form method="post" action="#"> 
    <div id="comments"> 
     <h3>Messages</h3> 
     <table> 
      <tr><td>Name:</td><td><input type="text" id="usr" name="usr"></td></tr> 
      <tr><td>Message:</td><td><textarea id="msg" name="msg"></textarea></td></tr> 
      <tr><td></td><td><input type="submit" value="Add message!"></td></tr> 
     </table> 

     </table> 
     <table id="ccc"> 
      <?php include('msg.html'); ?> 
     </table> 
    </div> 
</form> 

回答

2

既然你descreetly放置一個換行符在每行結束時,你可以做到這一點,而不是包括:

$arr = file('msg.html'); 
echo implode("", array_reverse($arr)); 

唯一的疑難雜症,我可以看到這裏是你需要確保消息本身不存在新行。所以更改

fwrite($fsp, '<tr><td class="info"><span class="usr">'. $usr .'</span><br><span class="dat">'. date("F j, Y, H:i ") .'</span></td><td>'. $msg ."</td></tr>\n"); 

fwrite($fsp, '<tr><td class="info"><span class="usr">'. nl2br($usr) .'</span><br><span class="dat">'. date("F j, Y, H:i ") .'</span></td><td>'. nl2br($msg) ."</td></tr>\n"); 
+0

迷死人!起初由於在行末「內爆...」中缺少「)」而出錯。只需添加它,它就像一個魅力!非常感謝!! – MoeSzislak

+0

在答案中更正了錯字...很高興爲您解決了問題。 – Orangepill