PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Formularfelder mit Inhalt grösser als 0? (https://www.php-resource.de/forum/php-developer-forum/98406-formularfelder-mit-inhalt-groesser-als-0-a.html)

Fanello 31-12-2009 10:46

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

Kropff 31-12-2009 13:46

Wie hast du denn die einzelnen Eingabefelder benannt?

Peter

Fanello 31-12-2009 14:22

Zitat:

Zitat von Kropff (Beitrag 632129)
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

Kropff 31-12-2009 14:35

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

Quetschi 31-12-2009 14:39

:dontknow:
PHP-Code:

foreach($_POST["anzahl"]) as $artikelNr=>$anzahl)
{
   if(
$anzahl 0)
   {
       
//mach was
   
}



Fanello 31-12-2009 16:34

Zitat:

Zitat von Kropff (Beitrag 632134)
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!!!

Fanello 02-01-2010 11:00

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!

h3ll 02-01-2010 11:20

Warum willst du das überhaupt übergeben? Woher kommen die Geschmacksrichtungen? Gibt die der User ein?

Fanello 02-01-2010 11:33

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?

h3ll 02-01-2010 11:36

Zitat:

Zitat von Fanello (Beitrag 632194)
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 (Beitrag 632194)
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

Fanello 02-01-2010 11:50

Zitat:

Zitat von h3ll (Beitrag 632195)
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.

h3ll 02-01-2010 11:55

Zitat:

Zitat von Fanello (Beitrag 632196)
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.

Fanello 02-01-2010 12:03

Zitat:

Zitat von h3ll (Beitrag 632198)
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>';
}


h3ll 02-01-2010 12:04

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.

Fanello 02-01-2010 13:18

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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:34 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG