[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:
(5507 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: ||
(5505 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
idr löst man ein solches Problem mit 0 und 1.

regards randy


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:
(5498 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: |||
(5489 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
genau, theoretisch kann man es auch so machen

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

regards randy


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:
(5483 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: |
(5478 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:
(5458 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:
(5451 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:
(5446 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:
(5436 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:
(5434 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:
(5413 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.

Ollli
-----------
ja, es stimmt - es sind wirklich 3 "l" im Namen und ich bestehe auf jedes einzelne ;-)


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:
(5405 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:
(5380 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!

Ollli
-----------
ja, es stimmt - es sind wirklich 3 "l" im Namen und ich bestehe auf jedes einzelne ;-)


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:
(5246 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

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022