WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   php-Problem (http://www.wcm.at/forum/showthread.php?t=81993)

cedros 27.12.2002 12:51

php-Problem
 
Ich hab da folgendes Problem:

Beim Absenden eines Formulars wird eine fortlaufende, 6stellige Nummer vergeben. Das ganze läuft über eine einfache txt-Datei (nummer.txt), in der die Nummer gespeichert wird (also keine DB) und in der Variable $nummer ausgegeben wird.
sieht folgendermaßen aus:

// Generieren der nummer
$filename = "nummer.txt";
// Öffne angegebene Datei zum Lesen und Schreiben
$fp = fopen("$filename","r+");
// Lese den Inhalt der Datei ein und speicher ihn in der Variable $nummer
$nummer = fgets($fp);
// Neue Nummer ist gleich Nummer + 1
$nummer = $nummer + 1;
// Gehe wieder an den Anfang der Datei
rewind ($fp);
// Scrheiben in die Datei den Inhalt der Variable nummer
fwrite ($fp, $nummer);
// Schliesse Datei
fclose ($fp);
// Formatiere die Nummer 6 stellig
$nummer = sprintf("%06d",$nummer);

Wenn ich nun das Formular absende passiert folgendes: Beim ersten mal wird ganz richtig die Zahl um 1 erhöht. Beim zweiten mal wird nicht die letzte, sondern die erste Stelle der Zahl um 1 erhöht, danach läufts wieder normal weiter :eek:
Wenn ich also zu Beginn 000000 in der txt-Datei habe, wird daraus beim ersten absenden 000001, dann 100001, 100002, 100003 etc.

Hat irgendwer vielleicht eine Idee worans liegt? Ich komm net drauf :heul:

bev 27.12.2002 13:48

hi

habs getestet, bei mir auch das gleiche...

wenn du aber ins txtfile 0 und nicht 000000 schreibst zählt er richtig

für die weiterverarbeitung formatierst du die zahl ja mit
$nummer = sprintf("%06d",$nummer) auf 6 stellen.

hoff der tipp bringt dich ein bisschen weiter

gruß
bev

kingchaos01 28.12.2002 13:42

Das hat mit dem rückgabewert von fgets() zu tun. Der ist nun mal tringstring (vgl. Manual). Du müsstest also casten.
schau mal unter
http://www.php.net/manual/en/languag...es.typecasting
Da wird das erklärt.

Falls du nicht wirklich auf die "genau" 6 Stellen angewieen bist, würd ich dir - wie mein Vorredner - sprintf empfehlen.

hth
Roland

cedros 29.12.2002 12:22

war ja eh logisch :rolleyes: - so funktionierts natürlich :cool:

DANKE!

Bescheiden, wie ich bin, hab ich gleich noch ein kleines Problem:
In der e-mail, die da verschickt wird, wird auch das Datum ausgegeben.
Also, ich bestimme einfach die Variable

$datum = date(d.m.Y);

und gebe sie dann in der mail mit $datum aus - so weit so gut - funktioniert auch. Nur wird das Datum ohne Punkt nach Tag und Monat ausgegeben - also 29122002 - sieht irgendwie net so besonders auch - wie bekomm ich da einen Punkt dazwischen rein :confused:

ben81 29.12.2002 13:02

Du hast beim date-Aufruf die Anführungszeichen vergessen.
Versuche es so: $datum = date("d.m.Y");

Siehe auch hier: http://www.php.net/manual/en/function.date.php

cedros 29.12.2002 18:19

yep, des wars natürlich

DANKE und guten Rutsch!

_m3 29.12.2002 19:50

Kurze Zusammenfassung dieses Threads für den ungeduldigen Leser: RTFM!

ben81 29.12.2002 20:07

Hat meiner Meinung nach nix mit RTFM zu tun, sowohl Funktion als auch Parameter waren ja korrekt. Das mit den vergessenen Anführungszeichen war halt ein kleiner Schlampigkeitsfehler, weiter nichts... :rolleyes:

kingchaos01 30.12.2002 12:26

Zitat:

Original geschrieben von _m3
Kurze Zusammenfassung dieses Threads für den ungeduldigen Leser: RTFM!
Wohl wahr!
Besonders die verschiedenen Typen von Rückgabewerten und Parametern werden gerne (auch von mir) überlesen/ignoriert.
Genaues lesen spart hier aber gewaltig Ärger/Zeit.
Auch die "date-Frage" ist hier ein gutes Beispiel:
Code:

string date ( string format [, int timestamp])
Da sollte dann klar sein, dass man die Gänsefüsse benötigt.

Ok, genug gerschulmeistert.....
Ein gutes neues Jahr
wünscht
Roland


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag