Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Dynamisches assoziatives array

Mitglied: bujutsu

bujutsu (Level 1) - Jetzt verbinden

01.01.2010, aktualisiert 20:36 Uhr, 7933 Aufrufe, 12 Kommentare

Hallo alle miteiander,
ich habe einen dynamischen assoc array.
$wert = eine Leistung
$preis = der Preis
über mehrere Formulare habe ich es nun endlich so hinbekommen, dass ich mit array_combine diese beiden arrays in einen assoziativen zusammengeführt habe.
ein Feld ist noch offen, nämlich die Anzahl der Leistungen.
Ich erstelle ein Rechenprogramm.
So nun habe ich folgende Daten
$wert => $preis mit $anzahl (nicht im array) etc.
Da man immer mehrere $werte auswählen kann, weiß ich im vorhinein nicht wie groß der Array wird.
Ich muss nun aber den Preis mit der eingegebenen Anzahl muliplizieren.
Wie mache ich das mit einem assoz. array?
Ich glaube ich habe nur ein verständnis problem oder mir fehlt eine array funktion.
Soll ich zuerst den Array in einzelne Variablen zerlegen?
Aber da er dynamisch ist, halte ich das nicht für eine gute Idee.

Bitte um Hilfe sollte am 4.1 fertig sein.
Danke
Mitglied: maretz
01.01.2010 um 14:47 Uhr
also - irgendwie verstehe ich die frage ehrlich gesagt nicht...

Ich würde es ggf. auch so lösen:

$variable["wert"]
$variable["preis"]
$variable["anzahl"]

schon brauche ich mich nur mit diesem array rumschlagen - und kann im folgenden einfach z.B. für den Gesamtpreis den Array einmal durchaddieren (immer $var["wert"][0]=$var["preis"][0]*$var["anzahl"][0] und die 0 halt hochzählen lassen).

hängt aber davon ab was du genau programmieren möchtest ob sich so eine Lösung eignet oder nicht (z.B. wenn du verschiedene Steuersätze drin hast dann kann das damit etwas komplex werden -> da du ja ggf. ausgeben musst wie hoch die Summe mit 0, mit 7 und mit 19% MwSt ist)
Bitte warten ..
Mitglied: dog
01.01.2010 um 14:50 Uhr
Ich glaube der TO kennt noch nicht das Konzept von Schleifen.

Auch wenn ich die Frage nicht wirklich verstanden habe:
01.
$total = 0; 
02.
foreach($arr as $wert => $preis) { 
03.
 $total += $preis * $anzahl
04.
}
Grüße

Max
Bitte warten ..
Mitglied: bujutsu
01.01.2010 um 15:15 Uhr
vielen Dank max für die Hilfe werde das mal probieren.
Bitte warten ..
Mitglied: bujutsu
01.01.2010 um 15:44 Uhr
So nun hat das mal supertoll gefunkt:
anbei der Code:
foreach ($wahl as $wert=>$anzahl) {
$preis = "SELECT Preis FROM offers WHERE angebot_bez='". $wert . "' AND kategorien_id=(SELECT kategorien_id FROM categories WHERE kategorien_bezeichnung='" . $leger_result[kategorien_bezeichnung] . "'AND active=1) ";
$preis_query = mysql_query($preis);
$preis_result = mysql_fetch_array($preis_query);
$gesamt = $anzahl * $preis_result[Preis];


echo $wert . " " . $anzahl . " " . $preis_result[Preis] . "€ Gesamtwert: " . $gesamt . "€<br>" ;
}

So ich bekomme nun alles was ich brauche.
Zwei Sachen fehlen aber noch und da habe ich keinen Plan.

Wie ihr sehen könnt rechne ich $anzahl mit $preis_result[Preis] zusammen um auf $gesamt zu kommen.
Schön und das in einer Schleife.
Nun muss ich aber diese gesamten auch nochmal zusammenrechnen, denn ich brauch ja eine Gesamtsumme aller $gesamt.
Wie soll denn das nun gehen.
Und zu guter letzt:
Wie schreibe ich nun jede einzelne Zeile = $wert, §anzahl aus diesem Array als separate Zeile in einen MYSQL DB???
Das habe ich noch nirgends gefunden. Einen assoziativen Array in separaten Zeilen in eine DB schreiben.

pleeeeaaaasssseeeeee das wäre toll
Bitte warten ..
Mitglied: QuasimodosKlon
01.01.2010 um 15:46 Uhr
Mir ist die Frage auch noch rätselhaft. Wozu wird array_combine benutzt? Eigentlich sollte doch eher ein indiziertes Array entstehen, dessen Elemente dann wiederum homogen aus einem assoziativem Array oder Objekt bestehen könnten.

01.
array 
02.
03.
  0 => array(leistung => 'Leistung 1', 'wert' => 1.95, 'anzahl' => 3), 
04.
  1 => array(leistung => 'Leistung 2', 'wert' => 2.95, 'anzahl' => 10), 
05.
  2 => array(leistung => 'Leistung 3', 'wert' => 3.95, 'anzahl' => 50), 
06.
)
Ich würde allerdings mehrere Rechnungsposten in einem Schritt erfassen. Dazu arbeite ich mit 3 einzelnen indizierten Arrays, die mir über $_POST direkt übergeben werden:
01.
<form method="post"
02.
  Leistung: <input type="text" name="leistung[]" /> 
03.
  Wert: <input type="text" name="wert[]" /> 
04.
  Anzahl: <input type="text" name="anzahl[]" /> 
05.
  <br /> 
06.
  Leistung: <input type="text" name="leistung[]" /> 
07.
  Wert: <input type="text" name="wert[]" /> 
08.
  Anzahl: <input type="text" name="anzahl[]" /> 
09.
  <br /> 
10.
  Leistung: <input type="text" name="leistung[]" /> 
11.
  Wert: <input type="text" name="wert[]" /> 
12.
  Anzahl: <input type="text" name="anzahl[]" /> 
13.
  <br /> 
14.
  <input type="submit" value="abschicken"/> 
15.
</form> 
16.
<?php 
17.
 
18.
echo '<pre>'
19.
print_r ($_POST); 
20.
echo '</pre> Anzahl Leistungen: ' . count($assoc); 
21.
 
22.
$anz_gesamt = $betrag_gesamt = 0; 
23.
 
24.
echo '<table border="1">' 
25.
   . '<tr> <th>Posten</th><th>Leistung</th> <th>Wert</th> <th>Anzahl</th> <th>Betrag</th>'
26.
 
27.
for ($i = 0; $i < count($_POST[leistung]); $i++) 
28.
29.
  $betrag = $_POST['wert'][$i] * $_POST['anzahl'][$i]; 
30.
  echo '<tr>' 
31.
     . "<td>$i</td>" 
32.
     . "<td>{$_POST[leistung][$i]}</td>" 
33.
     . "<td>{$_POST[wert][$i]}</td>" 
34.
     . "<td>{$_POST[anzahl][$i]}</td>" 
35.
     . "<td>$betrag</td>" 
36.
     . "</tr>\n"
37.
38.
  $anz_gesamt  += $_POST['anzahl'][$i]; 
39.
  $betrag_gesamt += $betrag
40.
41.
 
42.
echo "<tr> <td>Summe</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>$anz_gesamt</td> <td>$betrag_gesamt</td>" 
43.
   . '</table>'
44.
?>
Du kannst nun mittels DHMTL das Formular clientseitig direkt erweitern für weitere Posteneingaben oder Du führst mehrere Eingabeseiten per PHP in einer Session zusammen. Ich würde beides machen, die bequeme Methode und eine Ausweichmöglichkeit in PHP, falls JavaScript deaktiviert ist oder die Eingaben nochmal bearbeitet/erweitert werden sollen.
Bitte warten ..
Mitglied: bujutsu
01.01.2010 um 15:59 Uhr
Danke so wie du meinst muss ich ein indiziertes array über mehrere formularseiten entstehen lassen?
Da habe ich leider keine Ahnung wie das gehen soll.
seite1:
Auswahl der Leistung = $leistung (das kann nämlich schon ein array sein, da man mehrere Leistungen aussuchen kann)
seite 2:
auswahl der anzahl = $anzahl
und daraus habe ich mit combine einen array $leistung=>$anzahl gemacht zu dem ich nun den Preis gesucht habe.

Steh am Schlauch, wie Du das meinst. Dein Code ist ja das Endprodukt, aber wie komme ich dorthin?
Bitte warten ..
Mitglied: bujutsu
01.01.2010 um 16:04 Uhr
ach ja und bitte wie schreibe ich dann jede einzelne array zeile einzeln in die datenbank?
das raff ich überhaupt nicht.
Bitte warten ..
Mitglied: QuasimodosKlon
01.01.2010 um 16:34 Uhr
Ok, während der letzten Eingabe hattest Du nochmals gepostet...
Nun wirds schon etwas klarer, wenn vielleicht auch nicht viel. Du willst also Datenbankabfragen verarbeiten? Bei Datenbanken solltest Du Stamm- und Bewegungsdaten erfassen. Stammdaten hast Du ja schon erfaßt. Das sind Daten wie Kundeninformationen, Angebotspalette usw. Dann stellst Du z.B. ein Bestell-Formular dar, in welchem man Artikel aus dem bestehenden Sortiment auswählen kann. Die Bezeichnung ist die Beschriftung der Auswahlmöglichkeiten (z.B. SELECT/OPION-Elemente), das value-Attribut, das per Formular absenden übermittelt wird, trägt die Artikel ID. Die legst Du direkt in eine Datenbank-Tabelle "Bestellungen" ab. Dies sind die sogenannten Bewegungsdaten. Mehrere Posten faßt man mit einer Bestell-ID zusammen. Darin enthalten sind im Prinzip nur Artikel-ID, Menge, Rabatt und ähnliches, ggf. auch der Preis, um individuelle Angebote an einen Kunden zu erfassen oder für den Fall von Preisänderungen, sodaß die Bestellung den Preis zu den alten Konditionen beibehält.
Am Ende kannst Du die Bestellung mit den Stammdaten in einer einzigen Abfrage verknüpfen und die berechneten Felder SQL überlassen. Die Gesamtsumme der Rechnung kannst Du in der Schleife zusammenrechnen oder noch eine Aggregat-SQL-Abfrage durchführen.

Wenn Du dein Array in einer Schleife durchgehst, kannst Du je eine INSERT-Anweisung absetzen, oder Du setzt einen String zusammen, der in einer einzigen Anweisung alle Werte einträgt.
INSERT INTO `tabellenname` VALUES (wert_feld1, wert_feld2), (wert_feld1, wert_feld2), ... ;

Gesamtsummen bilden kannst Du z.B. mit
SELECT sum(`anzahl`), sum(`betrag`) FROM `tabellenname`;

Auch die Anzahl der Datensätze kannst Du, falls benötigt, mit in der Abfrage ermitteln:
SELECT count(`id`), sum(`anzahl`), sum(`betrag`) FROM `tabellenname`;


Ansonsten könntest Du ja mal Dein gesamtes Projekt auf dem Stand, wie es momentan ist, irgendwo quelloffen hinterlegen - und eine genaue Beschreibung, was es leisten soll. Dann läßt sich bestimmt mehr sagen.
Bitte warten ..
Mitglied: bujutsu
01.01.2010 um 16:44 Uhr
Quasimodosklon mein Held!!
Vielen Dank für Deine prof. Hilfe.
Kenn mich nun aus was Du meinst.
eine Sache noch.
Kannst Du mir die Schleife zeigen in der ich die Gesamtsumme ausrechne?
Das ist mir noch nicht klar.

Das mit der SQL Anweisung kann ich ja erst machen, wenn schon alle datensätze in der DB stehen. Ergo erst am Ende des Skripts. Dann kann ich diese aber nicht schon auf der letzten Seite der Rechnung ausgeben! BEVOR ich dann alles mit einer Schleife und INSERT (!! ) in die DB schreibe. Also brauche ich diese Zusammenrechnungsschleife.
Danke Dir.
Bitte warten ..
Mitglied: QuasimodosKlon
01.01.2010 um 17:19 Uhr
Zitat von bujutsu:
Kannst Du mir die Schleife zeigen in der ich die Gesamtsumme ausrechne?

Das wäre in meinem Beispiel oben (wo ich in einer Schleife die Eingabedaten plump in einer HTML-Tabelle ausgebe) in den Zeilen

22: $anz_gesamt = $betrag_gesamt = 0;
...
29: $betrag = $_POST['wert'][$i] * $_POST['anzahl'][$i];
...
38: $anz_gesamt += $_POST['anzahl'][$i];
39: $betrag_gesamt += $betrag;

Am besten das gesamte Beispiel mal in einen HTML-body kopieren, testen und nachvollziehen. Dann müstest Du das auf Dein Projekt eigentlich anwenden können.

Hier mal noch ein paar Dokus:
http://de3.php.net/manual/de/book.array.php
http://dev.mysql.com/doc/refman/5.1/de/insert.html

Und falls Du doch über mehrere Seiten hinweg Daten sammeln möchtest:
http://de3.php.net/manual/de/book.session.php
Dann kannst Du alles in einem Session-Array speichern und den Benutzer nur mit einer Session-ID tracken, ohne die bereits erfaßten Daten dauernd hin und her senden zu müssen.


EDIT:
Und der Fehlerteufel hatte zugeschlagen, in Zeile 22 muß es natürlich $betrag_gesamt statt $wert_gesamt heißen; hatte die Variablen nicht vollständig umbennt. Habs nun korrigiert.
Bitte warten ..
Mitglied: bujutsu
01.01.2010 um 17:45 Uhr
na dann mach ich mich mal ran. Vielen Dank nochmals
Bitte warten ..
Mitglied: QuasimodosKlon
01.01.2010 um 18:03 Uhr
Nicht zu danken ;)

Und noch das mit dem SQL, das Du in der selben schleife zusammenbauen kannst... hier nochmal isoliert:
01.
$values = array(); 
02.
for ($i = 0; $i < count($_POST[leistung]); $i++) 
03.
04.
  $values[] = "('{$_POST[leistung][$i]}', '{$_POST[wert][$i]}', '{$_POST[anzahl][$i]}')"
05.
06.
echo 'INSERT INTO `tabelle` VALUES ' . implode(', ', $values);
Erläuterung:
$values[] =
hängt ans Array an

"('{$_POST[leistung][$i]}', '{$_POST[wert][$i]}', '{$_POST[anzahl][$i]}')";
Hier wird in (doppelten) Anführungszeichen interpoliert. (Einfache) Apostroph sind Bestandteil vom SQL-Code. Damit PHP weiß, was zur Variablen (Array) gehört, können geschweifte Klammern {} gesetzt werden.

vereinfachtes Beispiel, wo keine {} benötigt werden:
"('$var1', '$var2', 'var3')"

implode setzt die Elemente dann zu einem String zusammen, getrennt durch die Zeichenkette ", " - also Komma+Leerzeichen.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Leere Array-Werte aus einem Array entfernen

gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

JavaScript

Javascript Array

gelöst Frage von internet2107JavaScript2 Kommentare

Ich habe folgendes Problem. Ersetze ich die folgenden Zahlen gegen Variablenwerte, bekomme ich nicht das Ergebnis, wie mit festen ...

Batch & Shell

Array oder Object oder wie soll ich das machen

gelöst Frage von Druide83Batch & Shell4 Kommentare

Hallo, mal wieder verzweifelt. Wahrscheinlich ist die Lösung einfach, aber ich habe gerade keinen Kopf mehr zum klar denken. ...

Batch & Shell

Dynamisches Script

Frage von TommyDerWalkerBatch & Shell1 Kommentar

Hallo zusammen, vllt könnt ihr mir helfen! Ich habe eine VM als Dienst eingerichtet, und da ich das in ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 2 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...

Windows Server
NTFS Berechtigungen Ordnerstruktur
Frage von hukahu23489Windows Server11 Kommentare

Hallo, ich bin seit kurzem in einer neuen IT-Abteilung und bin über das Berechtigungskonzept des Unternehmens sehr schockiert. Ich ...