Zeile in Textdatei löschen

Ich bitte ein letztes Mal um Hilfe :)

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

echo "
<input type='hidden' name='linenumber' value='$intIdx'>
<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='delete_projects' class='button' style='width: 80px; color: #FF0000;' value='L&ouml;schen'>
</td>
</tr>
</table>
";

}
 
Ich hab Dir doch geschrieben, was du machen musst.... Dann kaue ich es Dir eben vor:
PHP:
if( isset($_POST['linenumber']) )
{
	$intLineNumber = intval($_POST['linenumber']);
	$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) )
		{
			$strLine = fgets($rscSource, 4096);
			if( $intLineCounter !== $intLineNumber )
			{
				fputs($rscDestination, $strLine);
			}
			$intLineCounter++; 
		}
		
		fclose($rscSource);
		fclose($rscDestination);
		unlink($strSourceFile);
		rename($strDestFile, $strSourceFile);
	}
}

Das rot markierte wurde verschoben.....
 
Supi das geht!

Darf ich noch ne kleine Frage stellen? :rolleyes:

Ich erstelle für jeden Datensatz ein Bild im Ordner intern/images/!

Beim löschen des Datensatzes wäre es ja angebracht das Bild ebenfalls zu löschen oder?

Also der Bildpfad setzt sich folgendermaßen zusammen: intern/images/$name.$pictyp

Kann man das in die Schleife mit einbauen und dann $name = $d[0]; und $pictyp = $d[3]; auslesen, damit man den Pfad zum Bild hat und dieses dann löscht?

Danke und das ist wirklich meine allerletzte Frage gewesen :)
 
Oh man, ein bisschen Eigeninitiative wäre ja auch mal ganz praktisch :p
PHP:
if( isset($_POST['linenumber']) )
{
	$intLineNumber = intval($_POST['linenumber']);
	$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) )
		{
			$strLine = fgets($rscSource, 4096);
			if( $intLineCounter !== $intLineNumber )
			{
				fputs($rscDestination, $strLine);
			}
			else
			{
				$arrLine = explode('|', $strLine);
				$strImage = 'intern/images/'. $arrLine[0] . '/' . $arrLine[3];
				if( is_file($strImage) )
					unlink($strImage);
			}
			$intLineCounter++; 
		}
		
		fclose($rscSource);
		fclose($rscDestination);
		unlink($strSourceFile);
		rename($strDestFile, $strSourceFile);
	}
}
 
Bild wird leider nicht gelöscht!

Kannst du mir bitte noch schnell helfen? Du hörst und siehst jedenfalls dieses WE nichts mehr von mir :p

Und weist du was mir aufgefallen ist? Also wenn man bspweise den 3. Datensatz löscht, löscht er den letzten!? Auch wenn man den 1. Löscht, löscht er immer den letzten!?

Ist mir jetzt erst aufgefallen :confused:
 
Wieso das Bild nicht gelöscht wird, kannst Du selber herausfinden :p Ich geb dir einen Tipp, du musst ein Zeichen ändern!!

Okay, also folgendes bitte ändern:
PHP:
<input type="hidden" name="linenumber" value="<?= $intIdx+1 ?>" />

PHP:
if( isset($_POST['linenumber']) )
{
    $intLineNumber = intval($_POST['linenumber']);
    $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);
            }
            else
            {
                // In diesem Abschnitt musst Du den Fehler suchen.....            
                $arrLine = explode('|', $strLine);
                $strImage = 'intern/images/'. $arrLine[0] . '/' . $arrLine[3];
                if( is_file($strImage) )
                    unlink($strImage);
            }
            
        }
        
        fclose($rscSource);
        fclose($rscDestination);
        unlink($strSourceFile);
        rename($strDestFile, $strSourceFile);
    }
}
 
Also ich habe anstatt:

PHP:
$strImage = 'intern/images/'. $arrLine[0] . '/' . $arrLine[3];

das hier gemacht:

PHP:
$strImage = 'intern/images/'. $arrLine[0] . '.' . $arrLine[3];

Und trotzdem bleibt das Bild bestehen!?
 
Sorry, aber wenn Du programmieren kannst, dann wirst Du wohl auch ein wenig debuging betreiben können.
Wenn das Bild nicht gelöscht wird, kann es wohl nur daran liegen das die Bedingung:
PHP:
if( is_file($strImage) )
nicht zutrifft.
Wenn Du jetzt nur noch einen Datensatz in deiner Datei hast und diesen löschen möchtest, welcher Wert wird dir übermittelt! Wenn 0 übermittelt wird, dann ist das falsch, da müsste eine 1 raus kommen!
 
Naja gut Schluss für heute, ich seh den Wald vor lauter Bäumen nicht mehr :(

Wie gesagt mit dem Script;

PHP:
$intLineNumber = intval($_POST['linenumber']);
    $strSourceFile = "intern/projects.txt";
    $strDestFile = "intern/_projects.tmp";
    
    $rscSource = fopen($strSourceFile, 'r');
    if( is_resource($rscSource) )
    {
        $rscDestination = fopen($strDestFile, 'w+');
        
        $intLineCounter = 0;
        while(! feof($rscSource) )
        {
            $intLineCounter++; 
            $strLine = fgets($rscSource, 4096);
            if( $intLineCounter !== $intLineNumber )
            {
                fputs($rscDestination, $strLine);
            }
            else
            {
                $arrLine = explode('|', $strLine);
                $strImage = 'intern/images/'. $arrLine[0] . '.' . $arrLine[3];
                if( is_file($strImage) )
                    unlink($strImage);
            }
            
        }
        
        fclose($rscSource);
        fclose($rscDestination);
        unlink($strSourceFile);
        rename($strDestFile, $strSourceFile);
    }

löscht er weder das Bild was im Ordner: intern/images/$name.$pictyp liegt und er löscht nicht die Zeile, die ich gelöscht haben möchte :confused:

Meine Ausgabe, wo alle Projekte aufgelistet werden sieht so aus;

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

echo "
<input type='hidden' name='linenumber' value='$intIdx+1'>
<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='delete_projects' class='button' style='width: 80px; color: #FF0000;' value='L&ouml;schen'>
</td>
</tr>
</table>
";

Mach ich irgendweinen Fehler die ganze Zeit, den ich übersehe?
 
Zurück