Problem mit Vergleich ==

cyan

Grünschnabel
Hi,

ich möchte aus 1.txt die Nummer 1060591082 am Anfang löschen und sie am Ende wieder anfügen.
Die Nummer wird vorher per URL korrekt übergeben und ausgelesen:
$threadvar=$HTTP_GET_VARS['thread'];

1.txt

1060591082
1060737861
1063622514

php-file:
PHP:
$sort=file("1.txt");
	for ($i=1; $i<sizeof($sort) ; $i++)
	{ 	if ($sort[$i]==$threadvar)
		{   unset($sort[$i]);
			$sort[]="\n$threadvar";
			$sort=array_values($sort);
			
			$fp=fopen("files/data/forum/1.txt","w");
			flock($fp, 2);
			for ( $l=0; $l<sizeof($sort) ; $l++ )
				{ 
					fwrite($fp, $sort[$l]);
				}
			flock($fp, 3);
			fclose($fp);
			break;
		}
	}

Eigenlich sollte die obere Version funktionieren, allerdings tut sie das nicht.
Benutze ich statt:
PHP:
if ($sort[$i]==$threadvar)
folgendes (Version 2):
PHP:
if ($sort[$i]==1060591082)
geht´s allerdings...


Verwirrend für mich daran:

Code:
$sort[]="\n$threadvar";
trägt bei der Version 2 trotzdem richtig die Zahl 1060591082 am Ende ein, warum klappt dann die if-Anweisung der ersten Version nicht?
 
läuft auch nicht, selbst eine getrennte Abfrage mit if threadvar==1060591082 bringt true?

zum testen hab ich euch die files angehängt:

einfach index.php öffnen und den link klicken, dann die 1.txt im editor öffnen...
 

Anhänge

Also ohne nun in den Anhang zu sehen, das geht nicht so wie du dir das vorstellst.

Wenn du Daten in eine Datei packst und diese Daten danach ändern möchtest, ist der Schrittweise vorgang wie folgt:

datei öffnen, auslesen und den Inhalt in ein array() packen. Danach den Vergleich mit dem von dir gesuchten und dem array() über eine foreach-Schleife laufen lassen, das gefundene ersetzen und im array() ändern bzw. ersetzen.

Danach machst vergibst du einen neuen Dateinamen mit der Endung *.txt und packst dein geändertes array(); dort wieder rein. Zum Schluss änderst du den Namen der Datei, wenn zuvor die alte gelöscht wurde, in die ursprüngliche Bezeichnung.

So ändert man Daten in einer Datei. Dazu gibt es soviel ich weis irgendwo ein Tut. Müsste ich noch mal bei Gelegenheit suchen. Ist zumindest nicht hier - meine ich.
 
bin bereit das zu glauben, wenn du mir einen logischen grund dafür nennst, warum meine variente nicht möglich ist :)
 
ok, machen wir es anderst,

Erkläre mir den Unterschied zwischen deinem Code und einem Teil von meinem:

PHP:
<?php
// der inhalt enthält daten aus einem Textfeld und wird ausgelesen, weil die Vars $inhalt ein array ist.

	foreach($inhalt as $k => $v);

// bestehende Datei öffnen und in ein array einlesen
	$file = file("1.txt", "r");
	$array_file = array();

// über die Vars $i den Index des Array ändern und den speziellen Dateiinhalt ersetzen	
	$i = 0;
	foreach($file as $key => $value) {
		$i++;
		if($i == $k) { $array_file[$i] = $v."\n"; }
		else { $array_file[$i] = $value; }
	}

// mal sehen was der Inhalt des Array ist...... und ob eine Änderung stattgefunden hat
	print_r($array_file);
	echo "<br>";

// Datei zum Ändern öffnen....
	$file = fopen("1.txt", "w");
	
// Daten aus dem veränderten Array nun in die Datei schreiben.
	foreach($array_file as $value) {
		$value = $value;
		fwrite($file, $value);
	}
// Datei schliessen
	fclose($file);
?>
 
Zuletzt bearbeitet:
Zurück