Zeile in Textdatei löschen

Lektor21

Erfahrenes Mitglied
Hallo!

Also ich fülle ja eine Seite mit Daten aus einer TXT-Datei;

PHP:
if (isset($_POST['open_projects']))
{

foreach( file( "intern/projects.txt" ) as $v ) 
{
$d  = explode( "|", $v );
$name = $d[0];
$url = $d[1];
$info = $d[2];

echo "
<br>
<table width='100%' bgcolor='#e9e9e9' style='border-width: 2px; border-style: dotted; border-color: #ff7b10;'>
<tr>
<td width='100%'>
<font color='#ff7b10'><b>$name:</b></font>&nbsp;<a href='$url' target='_blank'>$url</a>
<br>
<font color='#150185'>$info</font>
</td>
<td valign='top'>
<input type='submit' name='edit_projects' class='button' style='width: 80px; color: #150185;' value='Bearbeiten'><input type='submit' name='delete_projects' class='button' style='width: 80px; color: #FF0000;' value='L&ouml;schen'>
</td>
</tr>
</table>
";

}

}

Nun möchte ich gern, dass wenn ich auf den Button Löschen klicke, der die gesamte Zeile in der TXT gelöscht wird!

Ist das möglich? :confused:
 
Klar ist das möglich. Beim Auslesen der Datei vergibst du jedem "Datensatz" eine Nummer. Anhand dieser Nummer könntest Du dann den zu löschenden Datensatz wieder erkennen. Wenn Du jetzt einen Datensatz löschen willst, musst Du die Datei erneut einlesen, die Daten temporär zwischenspeichern und die zu löschende Nummer einfach überspringen. Danach leerst Du die Datei und schreibst die temporär zwischengespeicherten Daten wieder in die Datei und fertig ist das Baby ;)
 
So würde ich es machen.

PHP:
$intLineNumber = 2; // legt die Zeile fest, die gelöscht werden soll.
$strSourceFile = "c:\\_reference.txt";
$strDestFile = "c:\\_reference.tmp";

$rscSource = fopen($strSourceFile, 'r');
if( is_resource($rscSource) )
{
	$rscDestination = fopen($strDestFile, 'w+');
	if(! is_resource($rscDestination) )
		throw new Exception('Die temporäre Datei konnte nicht erstellt werden, prüfen Sie, ob Sie Schreibrechte in dem angegeben Ordner besitzen.');
	
	$intLineCounter = 0;
	while(! feof($rscSource) )
	{
		$intLineCounter++;
		$strLine = fgets($rscSource, 4096);
		if( $intLineCounter !== $intLineNumber )
		{
			fputs($rscDestination, $strLine);
		} 
	}
	
	fclose($rscSource);
	fclose($rscDestination);
	unlink($strSourceFile);
	rename($strDestFile, $strSourceFile);
}
 
Warum so umständlich? Ausgabe über ein foreach auf file($fileName) mit $key
PHP:
$array = file($fileName);
foreach($array as $key => $line) {
 ... 
}

Und dann die Zeilennummern übermitteln und bei der übergebenen Aktion "Löschen" einfach ein foreach($passedLineIDs) unset($array[$lineID] und dann file_puts_content(implode("\n", $array)) oder so in der Art.
 
Hmm muss ich mir nochmal zu Gemüte führen!

Muss jetzt erst mal noch das folgende Problem lösen und dann bin ich vorerst fertig;

Also ich möchte die Daten $name $url $info in die TXT folgendermaßen formatiert in eine neue Zeile anfügen;

$name|$url|$info

Könnt Ihr mir ein Beispiel geben?


EDIT: Entschuldigung, aber ich arbeite nur mit SQL! :)
 
Zuletzt bearbeitet:
PHP:
$strSourceFile = "c:\\_reference.txt";
$rscSource = fopen($strSourceFile, 'a');
$arrData = array('name', 'url', 'info');
if( is_resource($rscSource) )
{
	fputs($rscSource, "\r\n" . implode("|", $arrData));
	fclose($rscSource);
}
 
Es ist nicht möglich, weil derjenige für den ich das mache keine SQL-Datenbank zum Webspace besitzt :rolleyes:

Naja habs ja fast mit euch geschafft :)
 
Zurück