PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerproblemchen...



bischi
27-05-2004, 14:20
So, hab mich entschieden, auch mal ein wenig PHP anzuschauen. Folgende Fragen:

- Kennt jemand einen guten gratis-Webhoster mit PHP-Support? (bin im moment bei home.pages.at)

- home.pages.at hat keine Datenbankunterstützung - heisst das auch, dass ich keine Dateien öffnen und lesen kann (bzw. schreiben)?

- Falls nicht:
Ich hab folgenden Code, auf dem Server ist im selben Verzeichnis die Datei guest.txt angelegt. In diese Datei hab ich "1" (ohne Anführungszeichen) geschrieben;

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP Test1</title>
<meta name="description" content="PHP Test1">
<meta name="author" content="Administrator">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">


</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

<?php
$filename ="guest.txt";
$datei = fopen($filename, "r+");
$count = fread($datei, filesize($datei));
echo $count."<br>";
echo "Sie sind der ".++$count."-ste Besucher!<br>";
echo $count;
fwrite($datei, $count);
fclose($datei);
?>

</body>
</html>
Folgender Code sollte mir ja eigentlich folgendes ausgeben:


1
Sie sind der 2-ste Besucher!
2

Er gibt mir aber



Sie sind der 1-ste Besucher!
1
aus. Auch nach mehrmaligem Ausführen steht immer noch 1 in der Textdatei...

Stimmt der Code nun nicht oder darf ich nicht auf die Datei zugreifen/bzw. kann sie nicht lesen?

Danke für die Hilfe,

mfG Bischi

Gaert
27-05-2004, 15:06
Der ++$variable Operator funktioniert bei PHP nicht...

http://www.php.net/manual/en/language.operators.php

Gruß,

Gaert

Gaert
27-05-2004, 15:11
Vergiss was ich oben geschrieben habe... er exisitert und funktioniert - is nur in der Tabelle nicht aufgeführt...

Gaert
27-05-2004, 15:22
Lösung:


<?php

$filename ="guest.txt";
$datei = fopen($filename, "r");
$count = fread($datei, filesize($filename));
fclose($datei);
echo $count."<br>";
echo "Sie sind der ".++$count."-ste Besucher!<br>";
echo $count;
$datei = fopen($filename, "w+");
fwrite($datei, $count);
fclose($datei);

?>

bischi
27-05-2004, 15:30
Jetzt hab ich folgende (leider immer gleich bleibende) Ausgabe:


1
Sie sind der 2-ste Besucher!
2

Es kann scheinbar nicht in die Datei schreiben...

Irgendwelche Ideen?

MfG Bischi

undefined
27-05-2004, 16:27
Wo nichts ist (sprich Datei leer = 0Byte) kann auch keine inkrement Operator eingesetz werden. ;)

<?php
function logit() {
$filename ="guest.txt";
$datei = fopen($filename, "r+");
$count = @fread($datei, filesize($filename));
fclose($datei);
$datei = fopen($filename, "w+");
$str = "ALT:" . $count."<br>";
$count = ($count == null) ? 1 : ++$count;
fwrite($datei, $count);
fclose($datei);
return $str . " Neu:" . $count;
}

echo logit();
?>
PS: Schalte mal dein Error repording richtig ein. Normalerweise hätte der PHP-Parser meckern müssen bei fread ;)

bischi
27-05-2004, 18:11
@undefined: Kannst du mir dein Beispiel und deinen Kommentar noch etwas erläutern? Ich hab heute mit PHP angefangen und das Beispiel teilweise aus einem Tut abgeschrieben...

Vielen Dank, Bischi

PS: Deine Variante geht auch nicht...


ALT:
Neu:1

Jedes mal die selbe ausgabe...

Gaert
27-05-2004, 20:30
@Bischi:
Die Datei muss natürlich bereits mit 0 initialisiert sein, sonst funktioniert das nicht - hat undefined aber bereits erwähnt.

undefined
27-05-2004, 20:57
Original geschrieben von bischi
PS: Deine Variante geht auch nicht...
Ich glaube du hast hier einen kleinen Denkfehler.
Ein PHP Script wird nur einmal zur laufzeit aufgerufen drücke mal F5 damit die Seite öfters geladen wird.
An sonsten eine Schleife zum testen der Funktion nehmen.

for ( $i = 0; $i < 10; $i++ ) {
echo logit() . "<br />";
}
PS: Welches System Linux oder Win?

bischi
28-05-2004, 08:26
Ich glaube du hast hier einen kleinen Denkfehler.
Ein PHP Script wird nur einmal zur laufzeit aufgerufen drücke mal F5 damit die Seite öfters geladen wird.
An sonsten eine Schleife zum testen der Funktion nehmen.

Wohl schon, aber nicht an dieser Stelle: Hab mehrmals auf relaod gedrückt, Enter in die Adresszeile gedrückt, Browser neu geöffnet...

Ich benutze windows, hat wohl aber nichts mit der Sache zu tun. Ich denke mal, dass mein Host (home.pages.at) mit Datei-Schreiben etwas blöde tut (das lesen hat mit Gaerts Vorschlag ja geklappt). Naja, werd mich mal nach nem anderen Free-Webspace-Provider umsehen, der PHP unterstützt und melde mich wieder.

Danke auf jeden Fall für die Hilfe,

mfG Bischi


Die Datei muss natürlich bereits mit 0 initialisiert sein, sonst funktioniert das nicht - hat undefined aber bereits erwähnt.
Steht ne 1 drin.

@Claudine: Danke, soweit war mir das einigermassen klar, hatte vor allem mit folgenden Zeilen meine Mühe:

Wieso eine Funktion definieren? (Ist das einfach schöner so, oder hat das nen besonderen Sinn?)

$count = @fread($datei, filesize($filename)); Was macht das @ hier?

$count = ($count == null) ? 1 : ++$count; Was bedeutet diese Zeile? (ist das ne Art if?)

und: Das mit dem Parser einstellen - macht das der Server oder kann ich das machen?

bischi
28-05-2004, 09:14
So, hab nen neuen Host gefunden: (www.funpic.de)

Es laufen nun sowohl Gaerts als auch undefineds Beispiel einwandfrei. Bei meiner Anfangsvariante kommt ne Fehlermeldung.

Danke auf jeden Fall und ich werde mich schleunigst wieder melden :D

MfG Bischi

undefined
28-05-2004, 10:56
Wieso eine Funktion definieren? (Ist das einfach schöner so, oder hat das nen besonderen Sinn?)
einfach, schöner angewohnheit ;)



$count = @fread($datei, filesize($filename)); Was macht das @ hier?
Unterdrückt fehlermeldungen die zum Abbruch des Programms führen könnten


$count = ($count == null) ? 1 : ++$count; Was bedeutet diese Zeile? (ist das ne Art if?)
Ja - Ist ein so genanter Trinärer oder Drenärer Bedingungsoperator und kommt von C


und: Das mit dem Parser einstellen - macht das der Server oder kann ich das machen?
Sie PHP Manual error_reporting

bischi
28-05-2004, 16:56
Ok, thx.

Noch ne Frage: Ich möchte mit einem HTML-Link sowohl ein PHP-Script ausführen (als counter) als auch einen Datei zum herunterladen anbieten. Ich will somit sehen, wie oft die datei heruntergeladen wird. Geht das?

MfG Bischi

undefined
28-05-2004, 19:10
http://www.dclp-faq.de/q/q-code-klick-zaehler.html

bischi
29-05-2004, 07:57
@undefined: Thx, genau, was ich gesucht habe

@claudine: Sicherlich braucht alles seine Zeit - mir geht es bei solchen Beispielen eher darum, mal einen Überblick über die Sprache zu gewinnen. Da ich einigermassen Java kann und auch C/C++ vor längerer Zeit mal auf Kommandozeilenbasis angeschaut habe, geht es mir in erster Linie darum, Unterschiede und Gemeinsamkeiten zu finden. Ich könnte jetzt einfach zwei Bücher durcharbeiten (zu wenig Zeit dafür) oder mir konkret zu interessanten Beispielen meine Infos zusammenzusuchen.

MfG Bischi

PS: Hab das Buch PHP4 - Grundlagen und Profiwissen als PDF, 1100 Seiten - glaub, das sollte für den Anfang reichen...

PS2: Falls jemand eine gute und vielleicht kürzere einführung als Link kennt...

Gaert
29-05-2004, 11:23
Original geschrieben von bischi
PS: Hab das Buch PHP4 - Grundlagen und Profiwissen als PDF, 1100 Seiten - glaub, das sollte für den Anfang reichen...


Kommt drauf an welche Auflage - ich hab das Buch von 2000, und das ist absolut nicht mehr zu empfehlen!
Tutorials gibts wie Sand am Meer.
Bis zum Ende dieses Jahres sollten die ersten guten PHP5 Bücher rauskommen - da solltest du dir dann eines zulegen - PHP4 Bücher lohnen jetzt nicht mehr.

bischi
29-05-2004, 12:25
Tutorials gibts wie Sand am Meer.
Eben drum - Kennt jemand ein besonders gutes?

MfG Bischi

bischi
30-05-2004, 09:34
thx!

MfG Bischi

Gaert
30-05-2004, 10:43
Original geschrieben von Claudine
http://www.galileocomputing.de/openbook/php4/

Nicht zu Empfehlen, weil veraltet!

Das hier ist immer ein guter Einstiegspunkt: http://de2.php.net/tut.php

Gaert
30-05-2004, 16:50
Das verherendste Problem an alter Literatur ist, dass die register_globals Problematik nicht berücksichtigt wird - für Anfänger ist das fatal, weil viele dazu neigen aus Bequemlichkeit unsicheren Code zu schreiben und sich am Anfang fragen warum ihre Skripte nicht funktionieren.
Einfach mal im Forum nach register_globals suchen...

Beispiele aus der Praxis? ... sorry, aber da muss ich im Moment sagen: "Keine Zeit -> Ladies first!"

bischi
30-05-2004, 19:26
Danke auf jeden Fall für eure Mühe! Falls ich auf Probleme stossen sollte, werd ich die register_globals auf jeden fall miteinbeziehen.

@Gaert: Das Tut macht nen guten ersten Eindruck!

Danke nochmals an alle für die Hilfe,

mfG Bischi

Claudine
14-06-2004, 15:31
Original geschrieben von undefined
http://www.dclp-faq.de/q/q-code-klick-zaehler.html

Da ist ein Beispiel für eine Weiterleitung + Zähler.
Wenn die zum Download angeboten werden soll, muß man glaube ich einen
anderen Header schreiben.