Plz speichern / andere probleme

hallo nochmal,

wie bereits beschrieben, lerne ich gerade php und habe mir zu diesem zwecke folgende aufgabe gestellt: erstelle ein formular mit verschiedensten eingaben (checkboxen, textfelder…) und speichere die auswertung des formulars in eine datenbank. mal sehen, auf was für probleme ich stoße :smile:

und da ist schon wieder eines.

in dem formular frage ich die postleitzahl ab. der nutzer soll entweder selber entscheiden, wieviele stellen er eingibt ( PLZ 3xxxx, PLZ 20xxx, PLZ 305xx) oder - mir egal - genau zwei stellen der PLZ eingeben müssen.
nun isses in d. so, dass es plz-bereiche gibt, die mit 0 anfangen. ganz grundsätzlich ist also die PLZ von 03045 zu unterscheiden von 3045x. wie bekomme ich das hin? führende nullen werden ja abgeschnitten, und meine mathematische fantasie in den kontrollen des formulars stößt hier an seine grenzen.

ausserdem hab ich eine grundsätzliche frage - eine metafrage sozusagen *g* ich habe nämlich noch ein paar sachen, die mich interessieren (etwa, ob ich ein array in einer datenbanktabellenspalte abspeichern kann und noch einiges mehr. soll ich diese fragen zusammen in einem posting schicken, sozusagen das gesammelte unvermögen eines anfängers, oder soll ich für jede frage, der übersichtlichkeit wegen, ein neuen thread aufmachen?

danke für eure mühe

kalli

Hallöchen!

Also zu deiner PLZ-Frage…

Ich würde einfach versuchen, die Variable als String zu definieren.
Bei Formularen ist das sowieso standardisiert der Fall. Wenn du die Datenbank also so anlegst, dass des „VARCHAR“ o.ä. ist, dürtfe dass mit der führenden Null kein Problem sein.

Was meintest du mit „Array speichern“? An sich dürfte das kein Problem sein. es Gibt verschiedenen Methoden. Meine ist, das ein Array per „implode-Funktion“ in einen String egelget werden mit definieretem Trennzeichen (zB „67]ABC]et5]“ steht in der DB)
PHP:

$string=implode("]",$array);

Dieser String wird ausgelesen und dann mittels explode wird in einen Array zerlegt!

$array=explode("]",$string);

Das Trennzeichen musst dudir überlegen, welches du nicht innerhalb eines Datenelements des Arrays vorkommt. Idealerweise halt irgendwelche Sonderzeichen.

Gruß… Björn

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi björn, hallo mitleser,

erstmal danke für deine antwort(en) die idee mit dem string für die plz ist prima. gespeichert wird die plz nun richtig, und auch wieder angezeigt. aber ich denke grad einen schritt weiter.

wenn ich diese plz nun weiterverarbeiten will, zum beispiel wenn ich herausfinden möcht´, ob die angegebene plz innerhalb der grenzen eines plz-bereichs liegt

(

30459 liegt zwischen 30xxx und 40xxx

)

gerate ich in probleme, wenn ich den string in zahlen umwandeln will (weil ich rechnen muss) und dabei die führende null wieder wegfällt. meine idee ist nun ein array mit dem namen plzarry [1 bis 5] in dem jeweils eine ziffer der plz - zahl abgespeichert wird. die gesamtplz setzt sich dann aus

plzarray[1] plzarry[2]plzarray[3] plzarry[4] plzarray[5]

zusammen. das ist insgesamt auch recht umständlich. gibt es da nicht eine elegantere lösung?

ich bin ja im moment am lernen, und deswegen besonders auch an „eleganten“ ideen interessiert - um mehr verständnis für die sprache zu bekommen.

zu dem anderen thema - arrays in datenbank - vielen dank. ich habe es genau SO gemacht, wie du es beschrieben hast, und es funzt prima. tolle idee, danke :smile: ich hatte schon befürchtet, für all meine ankreutzkästchen im formular eine extra tabellenspalte anlegen zu müssen…

kalli

Hallo Kalli!

Also dasmit dem Rechnen könntest du uU so lösen:

Du könntest ja die Stringlänge der Eingabe zählen, und dann entsprechend die PLZ mit Nullen ergänzen, anhängen, so das du in der Gesamtlänge auf 5 Ziffern kommst:

03 wird eingegeben --> 03+000=03000
04315 --> k.Ergenzung

usw…

http://www.selfphp.info/funktionsuebersicht/string_f…

Da musst du mal durchforsten, was es für Funktionen geben könnte!

Und dann ist es beim Rechnen egal, das führende Nullen ja in der Mathematik keine Rolle spielen.

So als Lösungsansatz, wie ich es uU machen würde. Ob das ideal ist weiß ich nicht, musst auch mal deine Aufgabenanforderung darüber nochmal checken, aber vielleicht ein ansatz.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo !

in dem formular frage ich die postleitzahl ab. der nutzer soll
entweder selber entscheiden, wieviele stellen er eingibt ( PLZ
3xxxx, PLZ 20xxx, PLZ 305xx) oder - mir egal - genau zwei
stellen der PLZ eingeben müssen.
nun isses in d. so, dass es plz-bereiche gibt, die mit 0
anfangen. ganz grundsätzlich ist also die PLZ von 03045 zu
unterscheiden von 3045x. wie bekomme ich das hin? führende
nullen werden ja abgeschnitten, und meine mathematische
fantasie in den kontrollen des formulars stößt hier an seine
grenzen.

Ich habe das mal so gmeacht:

  1. Schritt: Zahl auf 5 Stellen auffüllen, also bei 03 Eingabe z.B. 03000 draus machen, am einfachsten mit substr($eingabe.‚00000‘,0,5);
  2. Schritt: eine 1 voranstellen, also 103000 draus machen. Statt der 1 macht sich für manche Anwendungen auch gleich ein Ländercode gut (1-de, 2-at, etc.), also z.B. $zahl+100000;

Beim Vergleichen klappt das Ganze dann auch, wenn die PLZ eine führende 0 hätte. Allerdings gibt es wohl Länder, die alphanumerische Postleitzahlen haben, wo das Ganze so nicht klappt.

ausserdem hab ich eine grundsätzliche frage - eine metafrage
sozusagen *g* ich habe nämlich noch ein paar sachen, die mich
interessieren (etwa, ob ich ein array in einer
datenbanktabellenspalte abspeichern kann und noch einiges

$string = serialize($array); $array = unserialze($string);

Alexander

genial!
danke alexander, das ist wirklich ne geniale idee. einfach einen bekannten wert davorklackern. so einfach und so geschickt!

gerate ich in probleme, wenn ich den string in zahlen
umwandeln will (weil ich rechnen muss) und dabei die führende
null wieder wegfällt. meine idee ist nun ein array mit dem
namen plzarry [1 bis 5] in dem jeweils eine ziffer der plz -
zahl abgespeichert wird. die gesamtplz setzt sich dann aus

Wozu so kompliziert? Du musst doch nicht rechnen, um Postleitzahlen als Strings zu vergleichen. Nimm als unteren Grenzwert z.B. 12000 und als oberen Grenzwert 12999, und fülle die zu vergleichende PLZ mit genügend vielen Nullen auf, um auf 5 Ziffern zu kommen.
Dann kannst du diesen String mit den beiden Grenzwerten vergleichen.

Konvertieren in Zahlen ist für PLZ nicht sinnvoll, weil du mit PLZ eben nicht rechnen kannst.

Tschüss,
Hans-Martin