kann mir jemand sagen warum das nicht geht?

I

IsNoGod

Aktives Mitglied
Thread Starter
Dabei seit
06.01.2006
Beiträge
260
Reaktionspunkte
5
PHP:
<?
$datei = "counter.txt";
if (!file_exists($datei)) {
	$dz = fopen($datei,"w")
	fwrite($dz,"1");
	fclose($dz);
}
$dz = fopen(counter.txt,"r");
$counter = fread($dz,10);
fclose($dz);
$counter++;
$dz = fopen($datei,"w");
fwrite($dz, $counter);
fclose($dz);
?>

<body>
<h2>Guten Tag,</h2>
diese Seite wurde jetzt zum <?=$counter;?>. Mal aufgerufen.
</body>
 
Zuletzt bearbeitet von einem Moderator:
IsNoGod schrieb:
<?
$datei = "counter.txt";
if (!file_exists($datei)) {
$dz = fopen($datei,"w")
fwrite($dz,"1");
fclose($dz);
}
Da dürfte Dein Fehler sein. Du belegst die Variable mit der Funktion fopen.

Wenn die Datei existiert sol sie geöffnet werden. Wenn sie nicht existiert, sollte die Datei angelegt werden, aber nicht mit $dz, oder?

fwrite($datei,"1") sollte die Lösung sein, wobei natürlich die Datei dann auch mit fclose($datei) geschlossen werden sollte ;)
 
<?= ist m.W. veraltet als Tag, außerdem macht es schon Sinn hinzuschreiben, was mit der Variablen passieren soll:

print "$counter";
 
Probier's damit:
PHP:
<?php
$datei_name = "./counter.txt"; 

if (!file_exists($datei_name))
{ 
	$datei = fopen($datei_name,"w");
	fwrite($datei,"0");
	fclose($datei);
} 

$datei = fopen($datei_name,"r"); 
$counter = fread($datei,filesize($datei_name));
fclose($datei);

$counter++; 
$datei = fopen($datei_name,"w"); 
fwrite($datei, $counter);
fclose($datei); 
?> 

<body> 
	<h2>Guten Tag,</h2> 
	diese Seite wurde jetzt zum <?php echo $counter;?>. Mal aufgerufen. 
</body>

Neben den bereits angemerkten short-Tags, war hier der Dateiname beim leseneden Öffnen falsch angegeben. Btw. sind aussagekräftige Namen echt Gold wert, also Dinge wie "$dz" einfach sinnlos.

Stephan
 
Wie waer's mit:

PHP:
<?php
	if(filexists("./counter.php")) {
		include './counter.php';
		$counter++;
		$handle = fopen("./counter.php","w"); 
		fwrite($handle, "<?php \$counter = " . $counter . "; ?>"); 
		fclose($handle); 
	} else {
		$counter = 1;
		$handle = fopen("./counter.php","w"); 
		fwrite($handle, "<?php \$counter = 1; ?>"); 
		fclose($handle);
	}
?>
<body>  
	<h2>Guten Tag,</h2>  
	Diese Seite wurde jetzt zum <?php echo $counter; ?>. Mal aufgerufen.  
</body>
Der erste Besucher kommt:
- else-Fall tritt ein, weil Datei nicht existiert
- Counter wird auf 1 gesetzt
- Wert 1 wird in Datei geschrieben
- es wird korrekt ausgegeben, dass der Besucher der erste ist

Der zweite Besucher kommt
- if-Fall tritt ein, Datei existiert
- Datei wird inkludiert, Variable "$counter" hat Wert 1
- Counter wird um 1 erhoeht, hat Wert 2
- Counter wird in Datei geschrieben
- es wird korrekt ausgegeben, dass der Besucher der zweite ist

usw.

Der Vorteil ist, dass in "unendlich minus einem" Fall die Datei bereits existiert und der Parser die else-Befehle ignorieren kann, da if() TRUE zurueckgibt. Spart Rechenzeit. Hach, scripten macht Spass :D
 
Hi Galano,

erstmal nen Gruß unter Schwaben, von Reutlingen nach Stuttgart.

zu deinem Code:
Es ist immer wünschenswert, als Antwort auch funktionierenden Code zu finden. In deinem Fall ist das leider nicht so. Warum:
1. die funktion filexists "exists nicht". Das Ding heißt "file_exists()".
2. finde ich es nicht so clever mit include *.php zu arbeiten. Warum? ganz einfach. Meine Test-Datei hatte den Namen counter.php. Die includet jetzt die counter.php, welche dann die counter.php includet, welche dann die counter.php includet, welche dann..

Ansonsten gilt natürlich: viele Wege führen nach Rom :)

Stephan

PS: und wenn schon schnell, dann auch klein:

<?php
$counter = 0;
if(file_exists("./counter_var.php")) include './counter_var.php';
$counter++;
$handle = fopen("./counter_var.php","w");
fwrite($handle, "<?php \$counter = " . $counter . "; ?>");
fclose($handle);
?>
<body>
<h2>Guten Tag,</h2>
Diese Seite wurde jetzt zum <?php echo $counter; ?>. Mal aufgerufen.
</body>
 
Zuletzt bearbeitet:
Gruss zurueck :) Wobei ich der Wolf im Schafspelz bin – ein "Neig'schmeckter"! *diabolisch lach* ;)

Erstens war wohl ein Tippfehler, das kann – ganz ehrlich – passieren, ist bloss aergerlich. Auf meinem Geschaeftsrechner hier darf ich kein PHP installieren, also habe ich auch keine Moeglichkeiten, das Script kurz auszuprobieren …
Und zweitens wird die Datei, in der der Counter-Code steckt, wahrscheinlich eher "index.php" heissen. Nicht zwingend "counter.php", aber das bleibt jedem selbst ueberlassen.
Deine Code-Kur ist gelungen, mir ging es jedoch mehr darum, eine Alternative zum bisher Durchgekauten zu bieten, moeglichst klar und verstaendlich strukturiert. Da war es meiner Meinung nach hilfreich, if/else vollstaendig auszufuehren. Und – zugegeben – ich habe noch nicht so viel Uebung mit dem Abwerfen von Script-Ballast und nur begrenzt Zeit in der Mittagspause ;)

Aber vielen Dank fuer die konstruktive Kritik. Gruss, Galanos
 
Zurück
Oben Unten