| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

31-12-2009, 10:46
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Formularfelder mit Inhalt grösser als 0?
Liebe PHP-Gemeinde
Ich habe ein Formular, auf dem z.B. 20 Produkte aufgelistet sind. Neben jedem Produkt hat es ein Eingabefeld, in dem man die Anzahl eintragen kann. Standardmässig steht "0" drin.
Wenn jetzt bei z.B. 3 Produkten jeweils eine Anzahl eingetragen wird und das Formular abgeschickt wird, sollten im Mail natürlich nur diese 3 Produkte mit der jeweiligen Anzahl aufgelistet sein.
Welchen PHP-Ansatz muss ich da nehmen damit nicht auch die anderen 17 Produkte mit "0"-Anzahl aufgelistet werden? Wäre "for-each" der richtige Weg? Also so:
for($_POST['anzahl'] > 0) {
Auflistung*
}
*diesen Auflistungscode muss ich dann natürlich noch herausfinden und ergänzen.. aber mir gehts jetzt vor allem mal um den "for"-Code.
Vielen Dank für eure Hilfe
|

31-12-2009, 13:46
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Wie hast du denn die einzelnen Eingabefelder benannt?
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

31-12-2009, 14:22
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Zitat:
Zitat von Kropff
Wie hast du denn die einzelnen Eingabefelder benannt?
Peter
|
Hallo Peter
Das Anzahl-Feld sieht im jeweils Formular so aus:
HTML-Code:
<input value="0" name="anzahl[154]" />
<input value="0" name="anzahl[157]" />
<input value="0" name="anzahl[162]" />
<input value="0" name="anzahl[163]" />
<input value="0" name="anzahl[166]" />
usw.
Wobei die Zahl in den eckigen Klammern jeweils der Artikel-Nr. entspricht.
Im Mail steht dann also quasi:
Anzahl für Artikel 157: 4
Anzahl für Artikel 163: 7
|

31-12-2009, 14:35
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Und wo ist nun das Problem? Zur Anschauung:
PHP-Code:
$str = '';
foreach($_POST['anzahl'] as $key => $value)
{
if (!empty($value))
{
$str .= $key.'-'.$value."\n";
}
}
echo $str;
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

31-12-2009, 14:39
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|

PHP-Code:
foreach($_POST["anzahl"]) as $artikelNr=>$anzahl)
{
if($anzahl > 0)
{
//mach was
}
}
__________________
Drelingdo
Krabonse
Simmannamando
|

31-12-2009, 16:34
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Zitat:
Zitat von Kropff
Und wo ist nun das Problem? Zur Anschauung:
PHP-Code:
$str = '';
foreach($_POST['anzahl'] as $key => $value)
{
if (!empty($value))
{
$str .= $key.'-'.$value."\n";
}
}
echo $str;
Peter
|
jetzt praktisch nirgends mehr..
mir war einfach nicht klar wie ich es in die for-Schleife packen sollte. Bzw. wollte ich die Abfrage quasi schon in der foreach-Zeile machen.... So gibts mir jetzt schön die Artikel-ID und die Anzahl aus. Jetzt brauche ich es eigentlich nur noch mit den restlichen Angaben zu kombinieren. Aber das sollte ich hinkriegen!
Vielen Dank!!!
|

02-01-2010, 11:00
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
das nächste Problem ist jetzt doch noch aufgetaucht...
Die Ausgabe nur von den Artikeln bei denen der Kunde eine Anzahl eingibt, klappt perfekt. Jetzt hat es aber ein weiteres Input-Feld "extras" gegeben. In diesem Feld sind standardmässig versch. mögliche Geschmacksrichtungen eingetragen. Der Kunde kann nun aus diesem Feld, wenn nötig, die Geschmacksrichtungen löschen, die er nicht will...
Code:
<input value="Natur,Curry" name="geschmacksrichtung[153]" />
<input value="0" name="anzahl[153]" />
<input value="Natur,Curry,Peperoncino" name="geschmacksrichtung[156]" />
<input value="0" name="anzahl[156]" />
<input value="Natur,Quattro gusti" name="geschmacksrichtung[157]" />
<input value="0" name="anzahl[157]" />
<input value="Natur" name="geschmacksrichtung[160]" />
<input value="0" name="anzahl[160]" />
<input value="Natur,Curry" name="geschmacksrichtung[163]" />
<input value="0" name="anzahl[163]" />
Ich dachte mir jetzt, ich könnte ja bei der foreach-Anweisung eine zweites Element einbauen, also in dieser Art
Code:
$str = '';
foreach($_POST['anzahl'] as $key => $value AND $_POST['geschmacksrichtung'] as $key2 => $value2 )
{
if (!empty($value))
{
$str .= $key.'-'.$value.'-'.$value2."\n";
}
}
echo $str;
Aber das bringt mir eine Fehlermeldung. Gibt es eine Möglichkeit, diese zwei Anweisungen zu kombinieren?
Als Ausgabe sollen wie bisher nur die Einträge aufgeführt werden, die auch Anzahl grösser als 0 haben. Aber einfach noch mit dem dazugehörenden Geschmacksfeld.
Hoffe ihr versteht was ich meine....
Vielen Dank!
Geändert von Fanello (02-01-2010 um 11:02 Uhr)
|

02-01-2010, 11:20
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Warum willst du das überhaupt übergeben? Woher kommen die Geschmacksrichtungen? Gibt die der User ein?
|

02-01-2010, 11:33
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
das ganze ist eigentlich ein ganz "simpler" Shop-Script.
Die Geschmacksrichtungen stehen bereits in diesem Input-Feld, da diese aus der DB ausgelesen werden. Die Produkte haben aber nicht alle die gleichen Geschmacksrichtungen.
Einige sind nur "Natur", andere haben z.B. auch Curry und/oder Peperoncino.
Der User kann nun bei einem Produkt mit mehreren Geschmacksrichtungen diejenige aus dem Input-Feld löschen, die er nicht will.
Es ist eigentlich nicht ganz ideal her vom Ansatz.. denn es wäre wahrscheinlich einiges benutzerfreundlicher, wenn es mit Checkboxen gelöst wäre. Also bei jedem Produkt sind die versch. erhältlichen Geschmacksrichtungen mittels Checkbox anwählbar.
Da hätte ich aber auch ein Problem.. Die Geschmacksrichtungen sind in der einem Feld der DB-Tabelle eingetragen und jeweils mit einem Komma getrennt. Also z.B. "Natur,Curry,Peperoncino". Mit "explode" könnte ich diese ja nun quasi in ein Array schreiben. Aber nun müsste ich aus diesem Array Checkboxen generieren, und da hört mein aktuelles Wissen auf..
Müsste das mit einer While-Schleife gelöst werden?
|

02-01-2010, 11:36
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Fanello
das ganze ist eigentlich ein ganz "simpler" Shop-Script.
Die Geschmacksrichtungen stehen bereits in diesem Input-Feld, da diese aus der DB ausgelesen werden. Die Produkte haben aber nicht alle die gleichen Geschmacksrichtungen.
Einige sind nur "Natur", andere haben z.B. auch Curry und/oder Peperoncino.
|
Und warum übergibst du die Geschmacksrichtungen im Input-Feld, wenn sie doch eh in der Datenbank stehen? Es reicht doch, wenn du einfach nur die ID übergibst:
Code:
<input type="text" name="anzahl[1]" />
<input type="text" name="anzahl[2]" />
<input type="text" name="anzahl[3]" />
1, 2 und 3 wären in dem Fall die ID zum Eintrag in der Datenbank.
Zitat:
Zitat von Fanello
Da hätte ich aber auch ein Problem.. Die Geschmacksrichtungen sind in der einem Feld der DB-Tabelle eingetragen und jeweils mit einem Komma getrennt. Also z.B. "Natur,Curry,Peperoncino". Mit "explode" könnte ich diese ja nun quasi in ein Array schreiben. Aber nun müsste ich aus diesem Array Checkboxen generieren, und da hört mein aktuelles Wissen auf..
Müsste das mit einer While-Schleife gelöst werden?
|
Das Datenbankdesign ist fehlerhaft. Mehrere Werte dürfen nicht mit Komma getrennt werden. Halte ich an die Normalformen:
Normalisierung (Datenbank) – Wikipedia
Geändert von h3ll (02-01-2010 um 11:38 Uhr)
|

02-01-2010, 11:50
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Zitat:
Zitat von h3ll
Und warum übergibst du die Geschmacksrichtungen im Input-Feld, wenn sie doch eh in der Datenbank stehen? Es reicht doch, wenn du einfach nur die ID übergibst:
Code:
<input type="text" name="anzahl[1]" />
<input type="text" name="anzahl[2]" />
<input type="text" name="anzahl[3]" />
|
der User muss ja aber die Möglichkeit haben, die Geschmacksrichtung zu löschen die er nicht will. Es kann ja sein, dass ein Produkt in 4 Geschmacksrichtungen erhältlich ist und vielleicht mag er zwei davon überhaupt nicht und er will das Produkt nur in den anderen beiden Geschmacksrichtungen haben.
|

02-01-2010, 11:55
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Fanello
der User muss ja aber die Möglichkeit haben, die Geschmacksrichtung zu löschen die er nicht will. Es kann ja sein, dass ein Produkt in 4 Geschmacksrichtungen erhältlich ist und vielleicht mag er zwei davon überhaupt nicht und er will das Produkt nur in den anderen beiden Geschmacksrichtungen haben.
|
Dafür gibts die Check-Boxen.
|

02-01-2010, 12:03
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Zitat:
Zitat von h3ll
Dafür gibts die Check-Boxen.
|
ja genau. Das war jetzt eben die zweite Überlegung. Ist es möglich die im aktuellen Datenbank-Design aufgeführten Geschmacksrichtungen (mit Komma getrennt) in Checkboxen zu generieren?
Wäre das nicht der richtige Ansatz?
Code:
for($i=0;$i<count($geschmack);$i++)
{
echo '<input type="checkbox" name="check'.$i.'" value="'.$geschmack[$i].'">'.$geschmack[$i].'<br>';
}
|

02-01-2010, 12:04
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Geht mit explode() und foreach(). Würde aber dringend dazu raten, das Datenbankdesign in Ordnung zu bringen, sonst wirst du in Zukunft auf weitere Probleme stoßen.
|

02-01-2010, 13:18
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
werde mir die Zeit auf jeden Fall nehmen.. sobald der Auftrag abgeschlossen ist. Leider haben wir diesen Übernommen und mein Chef hat sich einfach zu wenig gut informiert wie der Aufwand wäre...
Auf jeden Fall habe ich es jetzt hinbekommen, dass bei jedem Produkt die Anzahl benötigter Checkboxen angzeigt wird.
Danke!!!
Als nächstes muss ich noch die Checkbox-Formularwerte übertragen.. aber das sollte ich hinbekommen.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|