mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 28.03.2024 23:48 Benutzername: Passwort: Auto-Login

Thema: Problem mit PHP, Arrays und MySQL vom 19.03.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Problem mit PHP, Arrays und MySQL
Seite: 1, 2, 3, 4  Weiter
Autor Nachricht
.MacSven
Threadersteller

Dabei seit: 20.03.2007
Ort: -
Alter: 37
Geschlecht: Männlich
Verfasst Mi 19.03.2008 10:05
Titel

Problem mit PHP, Arrays und MySQL

Antworten mit Zitat Zum Seitenanfang

Hallo,
zunächst mal eine kleine Info: ich habe versucht mich bei Google schlau zu machen, konnte aber leider nichts finden, da ich auch gar nicht so richtig weiß, wonach ich suchen soll. Deshalb schreibe ich hier:

Ich habe folgendes Problem:
ich arbeite an einem Buchungsformular, indem der buchende Kunde bis zu 50 weitere Mitreisende Eintragen kann. Diese werden aber nur mitgeschickt, wenn die entsprechenden Felder dafür auch ausgefüllt sind.
Der entsprechende Code dafür sieht so aus:

Code:
<?
for($i=1;$i<=15;$i++) {
   print("<tr".$tr_style.">
                      <td>".$i.". Mitreisende(r) </td>
                      <td><input class=\"input\" name=\"mf_vorname[".$i."]\" type=\"text\"  size=\"12\"/></td>
                      <td><input class=\"input\" name=\"mf_nachname[".$i."]\" type=\"text\" size=\"12\"/></td>
                      <td><input class=\"input\" name=\"mf_geburtsdatum[".$i."]\" type=\"text\" size=\"12\"/></td>
                      <td><input class=\"input\" name=\"mf_strasse[".$i."]\" type=\"text\" size=\"12\"/></td>
                      <td><input class=\"input\" name=\"mf_plz[".$i."]\" type=\"text\" size=\"12\"/></td>
                      <td><input class=\"input\" name=\"mf_telefon[".$i."]\" type=\"text\" size=\"12\"/></td>
                      <td><input class=\"input\" name=\"mf_mail[".$i."]\" type=\"text\" size=\"12\"/></td>
                    </tr>");   

}
?>   


Alle Formular-Felder werden gleichzeitig nach dem Absenden auch in eine SQL-Datenbank gespeichert.
Dies habe ich so gelöst.

Code:
INSERT INTO buchung_fun (ip, datum, time, anrede, vorname, name, geburtsdatum, strasse, plz, ort, land, mobil, telefon, fax, mail, http, pax, termin, reiseziel, info )
VALUES ('$ip', '$datum', '$time', '$_POST[geschlecht]', '$_POST[ha_vorname]', '$_POST[ha_nachname]', '$_POST[ha_geburtsdatum]', '$_POST[ha_strasse]', '$_POST[ha_plz]', '$_POST[ha_ort]', '$_POST[ha_land]', '$_POST[ha_mobil]', '$_POST[ha_vorwahl] $_POST[ha_telefon]', '$_POST[ha_fax]', '$_POST[ha_mail]', '$_POST[ha_www]', '$_POST[anz_personen]', '$_POST[termin]', '$_POST[reiseziel]', '$_POST[informationen]')";


Jetzt müsste ich ja für jeden Mitreisenden alle entsprechenden Felder in der SQL-Tabelle anlegen. Allein das wäre ja schon ne lange Beschäftigung - gibt es eine Möglichkeit, dass diese Felder in der Datenbank automatisch und nur wenn sie auch ausgefüllt wurden erstellet werden? Das muss dann ja auch mit diesem [$i] funktionieren!?

Mal angenommen es geht nicht und ich muss diese Felder wirklich vorher anlegen, wie muss ich dann diesen "SQL-Eintrags-Code" anlegen? So vielleicht (beachte jeweils letzen Eintrag von "Insert Into" und "Values"):

Code:
INSERT INTO buchung_fun (ip, datum, time, anrede, vorname, name, geburtsdatum, strasse, plz, ort, land, mobil, telefon, fax, mail, http, pax, termin, reiseziel, info, vorname-mitreisender1 )
VALUES ('$ip', '$datum', '$time', '$_POST[geschlecht]', '$_POST[ha_vorname]', '$_POST[ha_nachname]', '$_POST[ha_geburtsdatum]', '$_POST[ha_strasse]', '$_POST[ha_plz]', '$_POST[ha_ort]', '$_POST[ha_land]', '$_POST[ha_mobil]', '$_POST[ha_vorwahl] $_POST[ha_telefon]', '$_POST[ha_fax]', '$_POST[ha_mail]', '$_POST[ha_www]', '$_POST[anz_personen]', '$_POST[termin]', '$_POST[reiseziel]', '$_POST[informationen]', $_POST[mf_vorname[$i]])";


Da bekomme ich dann nämlich eine Fehlermeldung, dass es ein Problem mit der Klammer in der Klammer gibt.
"Weiß" die Datenbank denn durch diese Möglichkeit überhaupt, dass sie bei einem 2. Mitreisenden den Vornamen in das Feld "vorname-mitreisender2" usw eintragen muss oder gibt es da Probleme? Oder kann ich vielleicht auch "$_POST[mf_vorname[$i]]" durch "$_POST[mf_vorname[1]]" ersetzen?

Ich weiß... viele Fragen, ich hoffe ihr steigt da durch!? =)

Vielen Dank schonmal für eure Hilfe!
Gruß Sven
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Mi 19.03.2008 10:31
Titel

Antworten mit Zitat Zum Seitenanfang

fangen wir erstmal vorne an. du sagst, dass die "50" nur erfasst werden sollen, wenn auch was eingetragen wurde... in der if schleife steht aber "15" *zwinker*

du überprüftst nirgends, ob die (wie oben gewünscht) einträge leer sind. schau dir dafür mal isset() und/oder empty() an.

beim eintragen in der db hättest du zwei möglichkeiten. 1) mit $i - also mit der schleife (da könnten max(array_keys($array)) oder count() stichworte sein), oder den kompletten datensatz in einen eintrag zu setzen (serialisieren könnte da ein stichwort sein).

ich denke, mit den paar infos hast du schon mal ne menge zu lesen *zwinker*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
.MacSven
Threadersteller

Dabei seit: 20.03.2007
Ort: -
Alter: 37
Geschlecht: Männlich
Verfasst Mi 19.03.2008 18:22
Titel

Antworten mit Zitat Zum Seitenanfang

pixelpapst303 hat geschrieben:
fangen wir erstmal vorne an. du sagst, dass die "50" nur erfasst werden sollen, wenn auch was eingetragen wurde... in der if schleife steht aber "15" *zwinker*


Sorry, das hatte ich noch vergessen zu schreiben: das Ganze gibt es mehrmals, also in 3 Teilen!

Zitat:
du überprüftst nirgends, ob die (wie oben gewünscht) einträge leer sind. schau dir dafür mal isset() und/oder empty() an.


Nochmals sorry *bäh* Das steht noch irgendwo im Quelltext drin und funktioniert auch schon so weit. Das waren beides nur Infos um zu erklären was ich mit der Datenbank vor hab.

Zitat:
beim eintragen in der db hättest du zwei möglichkeiten. 1) mit $i - also mit der schleife (da könnten max(array_keys($array)) oder count() stichworte sein), oder den kompletten datensatz in einen eintrag zu setzen (serialisieren könnte da ein stichwort sein).


Das versteh ich jetzt erstmal überhaupt nicht =) aber ich werde mich mal schlau machen und mich ggf. wieder melden. Bin aber trotzdem für weitere Hilfestellungen dankbar!
  View user's profile Private Nachricht senden
achwasweisich

Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht: Männlich
Verfasst Do 20.03.2008 09:41
Titel

Antworten mit Zitat Zum Seitenanfang

Also so was macht man eigentlich völlig anders.

Du solltest innerhalb Deiner Haupttabelle eine eindeutige ID festlegen,
man benutzt dafür im Normalfall den Typ INT unsigned auto_increment.

Code:

Tabelle bf  (Kurzform von buchung_fun)
+----+----+--------+-------+--------+-----+
| id | ip | datum  | time  | anrede | ... |
+----+----+--------+-------+--------+-----+
|  1 | xy | 1.1.08 | 12:00 | herr   | xyz |
+----+----+--------+-------+--------+-----+
|  2 | ab | 2.2.08 | 11:00 | frau   | abc |
+----+----+--------+-------+--------+-----+


Jetzt legst Du eine zweite Tabelle an, z.B.
Code:

Tabelle mitreisende
+----+-------+---------+----------+
| id | id_bf | vorname | nachname |
+----+-------+---------+----------+
|  1 |     2 | Hans    | Mueller  |
|  2 |     2 | Klaus   | Meiser   |
+----+-------+---------+----------+

In diesem Beispiel hätte also die Frau abc zwei Mitreisende gehabt,
während der Herr xyz keinen Mitreisenden gehabt hätte.

Das ganze ist absolutes Basis-Datenbank-Layout-Design.
Da solltest Du Dich erst mal ein bißchen schlau machen drüber.
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Do 20.03.2008 12:33
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Das ganze ist absolutes Basis-Datenbank-Layout-Design.
Da solltest Du Dich erst mal ein bißchen schlau machen drüber.

Ja. [url=http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)]Datenbank Normalisierung[/url].

und hier:
http://www.itse-guide.de/kategorie/Datenbanken
und hier:
http://www.tinohempel.de/info/info/datenbank/normalisierung.htm

und Google kennt natürlich noch weiteres... Einfach mal nach Tutorials suchen.
Grundlegender Aufbau der Datenbank sollte vorher überdacht sein. Gehört zum Basiswissen.
Wenn mit einem relationalen Datenbanksystem gearbeitet wird, sollte man auch wissen, was Relationen sind und sich Gedanken über Redundanzen machen und wie weit man Normalisieren sollte.
  View user's profile Private Nachricht senden
.MacSven
Threadersteller

Dabei seit: 20.03.2007
Ort: -
Alter: 37
Geschlecht: Männlich
Verfasst Di 25.03.2008 11:29
Titel

Antworten mit Zitat Zum Seitenanfang

Vielen Dank für die Antworten und die hilfreichen Links.

Eine ID bekommt übrigens jeder bei mir schon. Allerdings wird diese automatisch von MySQL generiert (fortlaufend), sodass es auch nie eine ID doppelt geben kann. Ich glaube, das wäre dann nicht das Richtige für den Vorschlag mit der ID-Zuordnung oder geht das damit auch?

Gruß Sven
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 25.03.2008 11:36
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Allerdings wird diese automatisch von MySQL generiert (fortlaufend), sodass es auch nie eine ID doppelt geben kann.

Ja, auto_increment.
Zitat:
Ich glaube, das wäre dann nicht das Richtige für den Vorschlag mit der ID-Zuordnung

Doch, das ist genau das Richtige.
Warum bekommen denn deine Datensätze automatisch eine ID verpasst?
Und was glaubst du, wofür die Bezeichnung "ID" denn überhaupt steht? Natürlich zur Eindeutigen Identifizierung der Datensätze.
Mach das genau so, wie achwasweisich es dir geschrieben hat.

Zitat:
Das ganze ist absolutes Basis-Datenbank-Layout-Design.
Da solltest Du Dich erst mal ein bißchen schlau machen drüber.

Ja, das ist es - und das solltest du tun...

Wirf mal einen Blick in ein Tutorial, wie wir das schon gesagt haben. Hast du dir eigentlich mal einen der Links angeschaut?
  View user's profile Private Nachricht senden
.MacSven
Threadersteller

Dabei seit: 20.03.2007
Ort: -
Alter: 37
Geschlecht: Männlich
Verfasst Mi 26.03.2008 15:12
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Warum bekommen denn deine Datensätze automatisch eine ID verpasst?

Weil ich anhand der ID online per PHP bestimmte Datensätze löschen kann usw... Und mir war es nur wichtig, dass jede Person eine ID hat, welche war mir aber bisher immer egal - deshalb einfach per auto_increment

Zitat:
Hast du dir eigentlich mal einen der Links angeschaut?

Dazu bin ich leider noch nicht gekommen, was aber nicht heißen soll, dass ich mir diese Links nicht anschauen werde - ganz im Gegenteil! Ich wollte das nur noch mit ID klären, ob ich da alles richtig verstanden habe!
  View user's profile Private Nachricht senden
 
Ähnliche Themen Actionscript / PHP: Arrays in Arrays bei Übergabe mit Post?
Problem bei der Übermittlung vor Artikel-Arrays
[php]: problem mit arrays die zusammen sortiert werden solle
mysql-problem
[php] mysql-problem?
mySQL -> PHP Problem
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3, 4  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.