[GastForen Programmierung/Entwicklung PHP und MySQL dynamisches Array in DB

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 09:05
Beitrag # 1 von 22
Bewertung:
(6238 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe ein Formular welches dynamisch die Anzahl seiner Zeilen festlegt (per User-Eingabe) damit handelt es sich um Kosten welche mit einer bestimmten ME (Geldeinheit/h, GE/km...).

Die Daten des einzelnen Inputs werden in Arrays gespeichert. Diese Arrays sollen dann in die DB. Das Problem dabei ist nun das die ME als ja oder nein in die jeweiligen Spalten in die DB müssen. Wie mache ich das am besten?
X

dynamisches Array in DB

randy
Beiträge gesamt: 436

24. Apr 2008, 09:24
Beitrag # 2 von 22
Beitrag ID: #347734
Bewertung: ||
(6236 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
idr löst man ein solches Problem mit 0 und 1.


als Antwort auf: [#347728]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 09:37
Beitrag # 3 von 22
Beitrag ID: #347737
Bewertung:
(6229 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ randy ] idr löst man ein solches Problem mit 0 und 1.


Ja und Nein sind ja auch 0 und 1 oder an und aus oder?


als Antwort auf: [#347734]
(Dieser Beitrag wurde von ede125 am 24. Apr 2008, 09:48 geändert)

dynamisches Array in DB

randy
Beiträge gesamt: 436

24. Apr 2008, 09:52
Beitrag # 4 von 22
Beitrag ID: #347742
Bewertung: |||
(6220 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
genau, theoretisch kann man es auch so machen

Kosten > 0 -> ja
Kosten = 0 -> nein


als Antwort auf: [#347737]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 10:00
Beitrag # 5 von 22
Beitrag ID: #347745
Bewertung:
(6214 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
blos war das nicht meine Frage @randy


als Antwort auf: [#347742]

dynamisches Array in DB

swisscheese
Beiträge gesamt: 387

24. Apr 2008, 10:07
Beitrag # 6 von 22
Beitrag ID: #347751
Bewertung: |
(6209 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ ede125 ] blos war das nicht meine Frage @randy

Deine Frage war doch, wie die Mengeneinheiten - welche entweder "Ja" oder "Nein" lauten - in die db zu schreiben sind. Und randy hat sie doch beantwortet.

Die Frage wäre jetzt für mich höchstens: gab's noch eine andere Frage?

Gruss swisscheese


als Antwort auf: [#347745]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 10:32
Beitrag # 7 von 22
Beitrag ID: #347762
Bewertung:
(6189 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
naja ok ;) sry randy. Dann habe ICH MICH falsch ausgedrückt!

Die einzelnen Daten werden in ein Array gespeichert, also ein Array für Kostenwert und ein Array für die ME. In den Arrays stehen einige Werte je nachdem wieviele eingegeben worden. Was ja der User vor der Eingabe festlegt.

Wie bekomme ich die Werte aus dem Array in die DB, da ja jeder Kostenwert + ME in eine seperate Zeile soll. Mir ist momentan nicht klar wie der SQL-Skript dazu aussehen muss.


als Antwort auf: [#347751]

dynamisches Array in DB

ganesh
Beiträge gesamt: 1981

24. Apr 2008, 10:50
Beitrag # 8 von 22
Beitrag ID: #347766
Bewertung:
(6182 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Eine Frage richtig stellen ist bereits Teil der Antwort, n'est-ce pas?

Arrays in DB schreiben macht man am gescheitesten via serialize().
Diese Daten wieder herauslesen via unserialize().

http://ch2.php.net/serialize
http://ch2.php.net/unserialize

War das die eigentliche Frage? "Wie speichert man einen PHP Array in mySQL"?


als Antwort auf: [#347728]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 10:52
Beitrag # 9 von 22
Beitrag ID: #347768
Bewertung:
(6177 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Eine Frage richtig stellen ist bereits Teil der Antwort, n'est-ce pas?


ja

Zitat War das die eigentliche Frage? "Wie speichert man einen PHP Array in mySQL"?


fast;)


als Antwort auf: [#347766]

dynamisches Array in DB

swisscheese
Beiträge gesamt: 387

24. Apr 2008, 11:06
Beitrag # 10 von 22
Beitrag ID: #347774
Bewertung:
(6167 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oder eventuell möchtest du z.B. zehn Eingabezeilen in zehn MySql-Zeilen schreiben? Das könnte z.B. ungefähr so aussehen (ungetestet Wink):
Code
foreach($_POST['ME'] as $key=>$val) 
{
$query .= "INSERT INTO mytable SET `me`='".$val."', `menge`=".$_POST['menge'][$key]."; \n";
}
mysql_query($query,$db_link);


Gruss swisscheese


als Antwort auf: [#347768]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 11:08
Beitrag # 11 von 22
Beitrag ID: #347775
Bewertung:
(6165 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
DANKE


als Antwort auf: [#347774]

dynamisches Array in DB

Ollli
Beiträge gesamt: 458

24. Apr 2008, 11:54
Beitrag # 12 von 22
Beitrag ID: #347793
Bewertung:
(6144 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Da ich dein genaues Vorhaben nicht kenne, mir aber ein serialisiertes PHP-Array in einer Datenbank widerstrebt (Weiterverwendung, arbeit mit SQL-Funktionen etc.), schlage ich dir folgendes vor:

Sofern du mit den Werten (GE/ME ob nun Euro/km oder Teuro/m oder wie auch immer) in der DB richtig gut arbeiten willst, dann versuche, einen zentralen, vergleichbaren Wert inkl. Einheit zu finden, z.b. Euro/m. Alle Eingaben rechnest du um und speicherst sie in Euro/m.

Kostentabelle:
Code
ID  -  Bezeichnung  -  Wert  -  EinheitID 
1 - FAhrgeld PKW - 0.1 - 3
2 - Lastkran - 10 - 1


Die Einheiten und ihre entsprechenden Faktoren speicherst du in einer separaten Tabelle z.B.
Code
ID  -  Name    -  Faktor 
1 - Euro/m - 1
2 - Teuro/m - 0.001
3 - Euro/km - 1000


Wenn du nun eine Ausgabe machst, holst du dir über einen join die Bezeichnung und den Faktor der Einheit. Dann rechnest du den Wert wieder zurück und setzt die Einheit dahinter.

Mal ein SQL-Beispiel:
Code
SELECT (k.eintrag * e.faktor) AS Wert ,e.name AS Einheit FROM kosten k 
INNER JOIN einheit e ON e.id = k.einheitID


Der Vorteile dieser Herangehensweise sind folgende:
Du kannst sämtliche Einträge miteinander vergleichen um z.B. die höchsten Kosten zu ermitteln, einen Durchschnittswert zu ermitteln oder es mit anderen Daten verknüpfen.
Außerdem können später auch andere Anwendungen/Programmiersprachen drauf zurgreifen, nicht nur PHP.
Über normale Datenbankprogramme kannst du die Daten direkt einsehen ohne erst alles deserialisieren zu müssen.
Dieser Teil des Datenbankschemas entspricht mind. der ersten, aber eigentlich sogar der dritten Normalform.

Nachteile:
Es ist mehr Code-Aufwand beim Speichern und Auslesen gefordert, aber es macht das ganze nicht langsamer!

Überlegs dir einfach ;-)
Und falls dir hier zu viel "fachchinesisch" vorkommt, dann solltest du dich mit dem Thema Datenbanken befassen und ein Buch lesen, was zumindest die Normalformen beinhaltet :-)

Hoffe, ich konnte dir etwas helfen.


als Antwort auf: [#347762]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

24. Apr 2008, 12:14
Beitrag # 13 von 22
Beitrag ID: #347796
Bewertung:
(6136 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ollli,

erst einmal ein riesen Dank für Deine Mühe.

Einen vergleichenbaren wert zw. €/h und €/km zu finden dürfte sich als schwierig erweisen.


als Antwort auf: [#347793]
(Dieser Beitrag wurde von ede125 am 24. Apr 2008, 12:27 geändert)

dynamisches Array in DB

Ollli
Beiträge gesamt: 458

24. Apr 2008, 13:17
Beitrag # 14 von 22
Beitrag ID: #347813
Bewertung:
(6111 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, das stimmt natürlich. Das einzige, was mir dafür einfällt, ist die Werte "gleichzusetzen", also Faktor=1. Dann muss aber bei den Abfragen drauf geachtet werden. Entweder sollten dann entsprechend 2 Kosten- und Einheitstabellen her, oder ein weiteres Attribut muss zur Unterscheidung eingeführt werden. Erstere Variante ist dabei zu favorisieren, auch wenns mehr Aufwand bedeutet.

Sofern du die Werte aber nicht unbedingt alle direkt vergleichen musst, brauchst du natürlich auch keine "zentrale" Einheit. Dann kannst du die "Faktor-Geschichte" auch weglassen. Aber zu einer Auslagerung der Einheit raten der gesunde Menschenverstand und die Normalformen ;-)

Sprich eine separate Tabelle mit allen Einheiten solltest du dennoch anlegen. Und bei Abfragen kannst du dann einfach die ID mit einbeziehen. Sprich wenn du alle Kilometerentgelde miteinander vergleichen willst, nimmst du einfach die Bedingung "WHERE EinheitID=3" ;-)

Viel Erfolg!


als Antwort auf: [#347796]

dynamisches Array in DB

ede125
Beiträge gesamt: 45

30. Apr 2008, 09:39
Beitrag # 15 von 22
Beitrag ID: #348611
Bewertung:
(5977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe folgendes mehrd. Array:

ausgabe print_r($Array)

Array
(
[Array] => Array ( [a1] => Array ( [0] => 14 [1] => 15 [2] => 16 )
[a2] => Array ( [0] => [1] => [2] => )
[a3] => Array ( [0] => GMA55 [1] => GMA66 [2] => GMA77 )
[a4] => Array ( [0] => Nein [1] => Ja [2] => Nein )
[a5] => Array ( [0] => 23 [1] => 0.86 [2] => 0.20 )
[a5] => Array ( [0] => 1 [1] => 2 [2] => 2 )
[a7] => Array ( [0] => test55 [1] => test66 [2] => test77
) )

Nun möchte ich die Daten, z.B. 14, 15, 16, in die Datenbank schreiben. Als a1...a7 noch keine Arrays waren habe ich den SQL-String folgendermaßen zusammengesetzt:

$sqlab= 'insert into tbl ('
. implode(', ', array_keys( $_POST['array'] ) )
. ') values (\''
. implode('\', \'', $_POST['array'])
. '\')';

Da dachte ich mir, jetzt wo a1...a5 Arrays sind mache ich es folgendermaßen:

$sqlab= 'insert into tbl_technik ('
. implode(', ', array_keys( $_POST['array'] ) )
. ') values (\''
. implode('\', \'', $sqlab= 'insert into tbl ('
. implode(', ', array_keys( $_POST['array'] ) )
. ') values (\''
. implode('\', \'', $_POST['array'])
. '\')';
])
. '\')';


Aber das klappt net. Was mache ich falsch?


als Antwort auf: [#347813]
X