nach zeilen löschung in TXT DB leerer zeilenumbruch

Hast Du evtl. nur den oberen Teil übernommen und speicherst immer noch Dein Original-array anstatt dem gekürzten? Könnte ein möglicher Fehler sein, nach dem man ewig sucht.
 
than :
Wenn du noch einmal permanent kleinschreibst war es das mit deinem Account.
Bitte achte ein wenig auf deine Schreibweise, in Ordnung?

Danke,
Nils
 
Öhm ja wie löscht du den das Arrayelement? Mit unset($array['xy']) oder wie? ich denke da is d er Hund begraben :P
 
Nils Hitze hat gesagt.:
than :
Wenn du noch einmal permanent kleinschreibst war es das mit deinem Account.
Bitte achte ein wenig auf deine Schreibweise, in Ordnung?

Danke,
Nils
das wird mir wirklich sehr schwer fallen, wo ich doch 8 Jahre nun schon klein schreibe im Netz. Ich hoffe ich werde es mir merken können (und ich habe hier die Regeln gelesen) doch schon am Abend hatte ich das gross Schreiben wieder total vergessen ://


So ich habe nun mal eine extra Testseite gebaut, ausserhalb meines haupt Scripts. In dieser Seite befindet sich nun nur folgender Code:
PHP:
 $id = 4; 
 
$file_array = file("text.txt"); 
$file_count = count($file_array); 
$file_open = fopen("text.txt", "r+"); 
$nr = $id - 1; 
$neuesarray=array(); 
for ($row = 0; $row < $file_count; $row++) { 
if ($row != $nr) { 
$neuesarray[]=$file_array[$row]; 
} 
} 
while ( 
sizeof($neuesarray) > 0 
&& 
strlen($neuesarray[sizeof($neuesarray) - 1]) > 0
&& ( 
$neuesarray[sizeof($neuesarray) - 1] 
[strlen($neuesarray[sizeof($neuesarray) - 1]) - 1] 
== "\n"
|| 
$neuesarray[sizeof($neuesarray) - 1] 
[strlen($neuesarray[sizeof($neuesarray) - 1]) - 1] 
== "\r" 
) 
) { 
$neuesarray[sizeof($neuesarray) - 1] =
substr($neuesarray[sizeof($neuesarray) - 1], 0, 
strlen($neuesarray[sizeof($neuesarray) - 1]) - 1); 
} 
 
foreach ($neuesarray as $row) { 
fwrite($file_open, $row); 
} 
fclose($file_open);

In der text.txt habe ich stehen:

111
222
333
444
555
666
777
888
999

Wenn ich nun die Testseite aufrufe steht danach folgendes in der txt:

111
222
333
555
666
777
888
999
999

Wenn ich $id = 9; einstelle (das Zeile 999 gelöscht werden soll, also die letzte Zeile), wird definitiv die Zeile nicht gelöscht.
Ich habe heute so viel probiert, aber keinen Fehler gefunden.
Ach ja, von array_splice() bin ich garnicht so überzeugt, und mit unset() kann ich ebenfalls die letzte Zeile nicht löschen. Versteh das wirklich nicht warum die letzte Zeile nie gelöscht wird.
 
Hallo Zusammen
Hallo than

Ich habe auch genau das gleiche Problem wie than.
Ich kann alle Zeilen löschen, jedoch die letzte nicht und weiss noch nicht wie genau
ich das bei meinem script programmieren könnte.
Hier mal der Quelltext:


PHP:
<?php


 $bnr = $HTTP_POST_VARS['bnr'];
 
 $fehler = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. Im BNR Feld muss eine Zahl eingegeben werden!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $fehler2 = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. BNR nicht vorhanden!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $fehler3 = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. Konnte kein Eintrag loeschen!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $erfolg = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">GELOESCHT. Der Eintrag wurde erfolgreich geloescht!</td></tr></table>";
 
 $datei = "dateiname.txt";

 if($post)
 { 
 	if ($bnr =="")	
 	{
	echo("$fehler");
 	}
	else
	{
	$inhalt = fopen($datei,"r");
	$anzahl = count($inhalt);
	$array = file($datei);
 	$nr = $bnr;
 		
 		if($anzahl <= $nr)
 		{
 		echo("$fehler2");
 		}
 		else
 		{ 
 		global $datei,$array,$anzahl,$nr;
 		if($anzahl == 0)
 			{
 			echo("$fehler2");
 			}
 			else
 			{
 			// Hier wird der Eintrag gelöscht
 			$zeile = $nr;
 			if($anzahl <= $zeile)
 				{
 				echo("$fehler2");
 				}
 				else
 				{
 				unset($array[$nr]);
 				
 				$newinhalt = fopen($datei,"w"); 
				fwrite($newinhalt,implode("",$array)); 
				fclose($newinhalt); 
				echo("$erfolg"); 
				}
			}
		}
		
	}
}


if(file_exists($datei))
	{
	$inhalt = file($datei,"r");
	$anzahl = count($inhalt);
		for($i = 0; $i < $anzahl; $i++)
		{
			$eintrag = explode("|-|",$inhalt[$i]); //Inhalt zerteilen
			// Variablen definieren
			$tag = $eintrag[0];
			$datum1 = $eintrag[1];
			$datum2 = $eintrag[2];
			$datum3 = $eintrag[3];
			$zeit = $eintrag[4];
			$stueck = $eintrag[5];
			$ort = $eintrag[6];
			$location = $eintrag[7];
			$reservation = $eintrag[8];
			$eintragnummer = $i;
			$datum = "$datum1.$datum2.$datum3";
		
			// Daten ausgeben
			echo"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"30\">$tag</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"70\">$datum</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"70\">$zeit</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"150\">$stueck</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"100\">$ort</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"100\">$location</td><td width=\"10\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"*\">$reservation</td><td width=\"10\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"10\">$eintragnummer</td><td width=\"10\">&nbsp;</td></tr></table>\n";
		}
	} 
	else 
	{ 
	echo"Es wurde keine Datei gefunden"; 
	}

Ich hoffe ihr könnt mir weiterhelfen.
Gruss Jonas
 
Erstens fällt mir auf, dass Du die Datei nach dem ersten Lesen nicht schließt oder ich habe es übersehen.
Zweitens mußt Du sowas, wie in Post 7 machen, um den Zeilenumbruch des neuen letzen Elements zu löschen.
Vielleicht hilft das ja.
 
Ey das hast Du ja echt super gelöst. Das mit dem "w+" war doch glatt der Fehler gewesen Wow! auch bei den anderen Scripten (unset() oder meiner ersten for Schleife) wird nun auch die letzte Zeile gelöscht :)
Und deine while schleife funktioniert jetzt auch perfekt! Vielen, vielen Dank! Ich bin echt sehr zufrieden ;-)

und webdesign, ich würde in Deinem Script die 'file_exists' Funktion schon ganz oben machen (also mit eingeschlossen dem Eintrag löschen)
und wenn Du mein Script mit hpvw's while schleife perfektionierst, wirst auch Du keine Probleme mehr haben.
ps.: Wenn Deine PHP Version 4.1 ist, würde ich statt dem veralteten $HTTP_POST_VARS['bnr'] das $_POST['bnr'] nehmen.
 
Hallo hpvw, than
Danke für die Meldungen.
fclose($inhalt); habe ich vergessen, da hast du recht hpvw, vielen Dank.
Ich schaue mir mal die while Schleife genauer an. Ich hatte Gestern bis 4 Uhr Morgens gearbeitet und dann einfach keine Lust mehr gehabt zu überlegen. Jetzt ist ja ein neuer Tag und eine neue Aufgabe wartet auf mich, Amen. ;)

Vielen Dank für die Hilfe.
Gruss Jonas
 
Hallo Zusammen
Ich habe mal etwas gebastelt, funktioniert jedoch noch nicht und ich weiss nicht was falsch ist daran. Es zeigt mir ein Fehler in Linie 44, das heisst bei:
PHP:
 if($row != $nr) 
{ 
$neuesarray[]=$file_array[$row]; 
}

Hier der ganze Quellcode:
PHP:
<?php


 $bnr = $HTTP_POST_VARS['bnr'];
 
 $fehler = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. Im BNR Feld muss eine Zahl eingegeben werden!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $fehler2 = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. BNR nicht vorhanden!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $fehler3 = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. Konnte keinen Eintrag loeschen!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $fehler4 = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">ERROR. Es wurde keine Datei gefunden!<a href='javascript:history.back()'><b> Bitte Hier klicken</b></a></td></tr></table>";
 $erfolg = "<table width=\"100%\" ><tr><td width=\"10\">&nbsp;</td><td width=\"*\">GELOESCHT. Der Eintrag wurde erfolgreich geloescht!</td></tr></table>";
 
 $datei = "dateiname.txt";

if(file_exists($datei))
{
   if($post)
   { 
   		if ($bnr =="")	
 		{
			echo("$fehler");
 		}
		else
		{
			$file_array = file($datei);
			$anzahl = count($file_array);
			$inhalt = fopen($datei,"w+");
 			$nr = $bnr-1;
 		
 			if($anzahl <= $bnr)
 			{
 				echo("$fehler2");
 			}
 			else
 			{ 	
 				if($anzahl == 0)
 				{
 					echo("$fehler3");
 				}
 				else
 				{
 					$neuesarray=array(); 
					for ($row = 0; $row < $anzahl; $row++) 
					{ 
					if($row != $nr) 
						{ 
						$neuesarray[]=$file_array[$row]; 
						} 
					} 
					while ( 
						sizeof($neuesarray)>0 
						&& 
						strlen($neuesarray[sizeof($neuesarray) - 1]) > 0 
						&& ( 
					$neuesarray[sizeof($neuesarray) - 1] 
				[strlen($neuesarray[sizeof($neuesarray) - 1]) - 1] 
			== "\n" 
					|| 

					$neuesarray[sizeof($neuesarray) - 1] 
				[strlen($neuesarray[sizeof($neuesarray) - 1]) - 1] 
			 == "\r" 
					) 
						) { 
						$neuesarray[sizeof($neuesarray) - 1] = 
					substr($neuesarray[sizeof($neuesarray) - 1], 
					0, 
					strlen($neuesarray[sizeof($neuesarray) - 1]) - 1); 
						} 
					foreach ($neuesarray as $row) 
						{ 
						fwrite($inhalt, $row); 
						}  
				}
			}
			fclose($inhalt);
		}
	}
	
	$inhalt = file($datei,"r");
	$anzahl = count($inhalt);
		for($i = 0; $i < $anzahl; $i++)
		{
			$eintrag = explode("|-|",$inhalt[$i]); //Inhalt zerteilen
			// Variablen definieren
			$tag = $eintrag[0];
			$datum1 = $eintrag[1];
			$datum2 = $eintrag[2];
			$datum3 = $eintrag[3];
			$zeit = $eintrag[4];
			$stueck = $eintrag[5];
			$ort = $eintrag[6];
			$location = $eintrag[7];
			$reservation = $eintrag[8];
			$eintragnummer = $i;
			$datum = "$datum1.$datum2.$datum3";
		
			// Daten ausgeben
			echo"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"30\">$tag</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"70\">$datum</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"70\">$zeit</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"150\">$stueck</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"100\">$ort</td><td width=\"10\" align=\"center\" valign=\"top\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"100\">$location</td><td width=\"10\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"*\">$reservation</td><td width=\"10\">&nbsp;</td><td align=\"left\" valign=\"top\" width=\"10\">$eintragnummer</td><td width=\"10\">&nbsp;</td></tr></table>\n";
		}
} 
else 
{ 
	echo("$fehler4");
}

Ich weiss wirklich nicht wo ich weiter suche könnte, ich sehe da keinen Fehler.
Hoffe, dass ihr mir weiterhelfen könnt.

Gruss Jonas
 
Zurück