php fopen löschen eines eintrages

hups1803

Erfahrenes Mitglied
hallo,

Ich erstelle für einen Chat folgende datei

PHP:
fwrite(fopen('chat.txt', 'a'), '
<p><span class="hupsi_chatusericon"><img src="'.$userimage.'"style="width:32px;height:32px;vertical-align:middle"></span>
     <span class="hupsi_chatusr">'.$user.' - </span>
     <em>'.$date.'</em>     
     <span class="hupsi_chat">- '.$chattertxt.'</span>     
     </p>
     
 ');

nach einer gewissen Zeit stehen mehrere Einträge in der text datei

PHP:
<p><span class="hupsi_chatusericon"><img src="http://hupsis-e107.de/testdomain/e107_files/public/avatars/1411053905_usebr-128.png"style="width:32px;height:32px;vertical-align:middle"></span>
     <span class="hupsi_chatusr">harry - </span>
     <em>18 September 14:12</em>     
     <span class="hupsi_chat">- waht</span>     
     </p>
     
<p><span class="hupsi_chatusericon"><img src="http://hupsis-e107.de/testdomain/e107_files/public/avatars/1411053905_usebr-128.png"style="width:32px;height:32px;vertical-align:middle"></span>
     <span class="hupsi_chatusr">harry - </span>
     <em>18 September 14:13</em>     
     <span class="hupsi_chat">- dadsas</span>     
     </p>
     
<p><span class="hupsi_chatusericon"><img src="http://hupsis-e107.de/testdomain/e107_files/public/avatars/1411053905_usebr-128.png"style="width:32px;height:32px;vertical-align:middle"></span>
     <span class="hupsi_chatusr">harry - </span>
     <em>18 September 14:15</em>     
     <span class="hupsi_chat">- asdasdasdasdasasd</span>     
     </p>

Wie kann ich jetzt einen bestimmten Eintrag löschen
 
Du musst die Einträge irgendwie identifizieren, z.B. in dem du sie nummerierst.
Außerdem ist es schlecht, Einträge mit Formatierungen zu speichern.
Besser ist es nur die Einträge in Spalten zu speichern, jeder Eintrag bekommt eine eigene Zeile. Zwischen den Einträgen ist ein Trennzeichen.
Deine Spalten wären dann z.B.:
Code:
ID; Avatar;Username; Datum; Text
Dann kannst du die Datei einlesen, die Zeile mit der jeweiligen ID löschen und den Rest wieder schreiben.
Allerdings ist das nicht besonders performant. Besser ist es, die Einträge direkt in eine Datenbank zu schreiben.
 
das mit der datenbank geht leider nicht dies soll ein Plugin für e107 cms werden und dort wird das ganze dann mit flood ausgebremst.
da ich den chat mit interval aktualisiere.
 
Ok, aber auch ohne Datenbank solltest du die Einträge ohne Formatierungen speichern. Die Frage ist, ob du das überhaupt in einer Datei speichern musst? Aus deinem Eintrag geht leider nicht hervor, an welcher Stelle im Chatsystem diese Speicherung gemacht wird. Ist das ein Logfile?
 
per ajax

PHP:
$.ajax({
     type: "POST",
     url:"'.$pfad.'hupsi_chat_v2/ajax.php",
     data: dataString,
     success:function(result){
  //alert(result)
  $("#chattertxt").val('');
  }
   });

php datei
PHP:
fwrite(fopen('chat.txt', 'a'), '
<p><span class="hupsi_chatusericon"><img src="'.$userimage.'"style="width:32px;height:32px;vertical-align:middle"></span>
     <span class="hupsi_chatusr">'.$user.' - </span>
     <em>'.$date.'</em>    
     <span class="hupsi_chat">- '.$chattertxt.'</span>    
     </p>
    
');
 
Du kannst via Javascript auch Elemente anlegen lassen:

Javascript:
  $.ajax({
     type: "POST",
     url:"'.$pfad.'hupsi_chat_v2/ajax.php",
     data: dataString,
     success:function(result)
     {
       var chatEntry = $.parseJson(result);
       
       // Erstelle p-Element
       var p = $(document.createElement('p'));

       // Erstelle Icon-Span
       var iconSpan = $(document.createElement('span'));
       $(iconSpan).addClass('hupsi_chatusericon');

       // Erstelle Icon-Image
       var imgIcon =  $(document.createElement('img'));       $(imgIcon).attr('src', chatEntry.chatIcon);
       $(imgIcon).css('width', '32px');
       $(imgIcon).css('height', '32px');
       $(imgIcon).css('vertical-align', 'middle');

       // Erstelle User-Span
       var userSpan = $(document.createElement('span'));
       $(userSpan).addClass('hupsi_chatusr');

       // Erstelle Datum-Emphasis
       var em = $(document.createElement('em'));
       $(em).innerHTML = chatEntry.date;

       // Erstelle Chat-Ausgabe
       var chat = $(document.createElement('span'));
       $(chat).addClass('hupsi_chat');
       $(chat).innerHTML = chatEntry.text;

       // Zusammenfügen
       $(iconSpan).append( $(imgIcon) );

       $(p).append( $(iconSpan) );
       $(p).append( $(userSpan) );
       $(p).append( $(em) );
       $(p).append( $(chat) );
     }
   });

Warum solltest du kein HTML speichern?
1. Weil du dich irgendwann entscheiden könntest, deinen Chat anders aussehen zu lassen, dann würde das bereits bestehende Protokoll anders aussehen als der neue Content.
2. Du musst immer wieder den gleichen bzw. einen stark ähnlichen Inhalt (außer der Variablen ändert sich ja nichts) speichern und übertragen. Der Inhalt, der gleich bleibt, muss eigentlich nicht gespeichert werden.
3. Du sparst Bandbreite und dadurch wird die Applikation auch schneller, wenn du bspw. nur die Daten im Json-Format überträgst.
 
ok so ganz verstanden hab ich es nicht.
dein script erzeugt nun die einträge nach post neuer einträge und ich speichere nur die daten ?? richtig ??

wie sieht dann die ajax.php aus ??

zurzeit so
PHP:
if(isset($_GET['submit'])){
$chattertxt=( @get_magic_quotes_gpc() ) ? $_POST['chattertxt'] : @addslashes($_POST['chattertxt']);
$user=( @get_magic_quotes_gpc() ) ? $_POST['user'] : @addslashes($_POST['user']);
$userimage=( @get_magic_quotes_gpc() ) ? $_POST['userimage'] : @addslashes($_POST['userimage']);
$date= date('j F H:i');

fwrite(fopen('chat.txt', 'a'), '
<p><span class="hupsi_chatusericon">
<a title="Profil von '.USERNAME.' ansehen" href="'.SITEURL.'user.php?id.'.USERID.'"><img src="'.$userimage.'"style="width:32px;height:32px;vertical-align:middle"></span>
     <span class="hupsi_chatusr">'.$user.' - </span></a>
     <em>'.$date.'</em>    
     <span class="hupsi_chat">- '.$chattertxt.'</span>    
     </p>
    
');  
}




zurück zum delete habe nun eindeutige id aus dem array

PHP:
$text .=' <div id="hupsi_chats2">';
 
foreach(array_values($comment) as $key => $value) { 
     $smilys=smileys($value);
     $bbcode=showBBcodes($smilys);
     $line .= "<input type='submit' name='$key:' value='Delete'><input type='hidden' name='test' value='$key'>";
 
};
$form = "<form name='form' method='post' action='deleter.php'> $line
</form>";

$text .= $form;

nun weiß ich leider nicht wie die deleter.php aussehen muss, habe gedacht ich verkürze den Array um das key und speichere die chat.txt neu ab , das funzt aber nicht

PHP:
$key= $_POST['test'];
$contents = file_get_contents("chat.txt");
$count=preg_match_all('#(\<p\>(.*?)\</p\>)#is', $contents, $found);
$comment=$found[0];
$output = array_slice($comment, -$key);
file_put_contents('chat.txt', $output);

header("Location:admin_all.php");
 
Zuletzt bearbeitet:
habe es so hinbekommen

PHP:
$key= $_GET['del'];
$contents = file_get_contents("chat.txt");
$count=preg_match_all('#(\<p\>(.*?)\</p\>)#is', $contents, $found);
$comment=$found[0];
   
unset($comment[$key]);

file_put_contents('chat.txt', $comment);

header("Location:admin_all.php");
 

Neue Beiträge

Zurück