Augabe in foreach und inkrementieren.
Ulu
- php
Hallo zusammen,
Folgendes Problem:
Ich lasse mir den Warenkorb in der foreach schleife je nach anzahl das "$normal" einmal oder mehrmals ausgeben. Dabei habe ich den zähler "$i" der immer um eins erhöht wird. wenn ich nun ein Produkt z.B. drei mal ausgewählt habe zeigt er mir dieses Produkt drei mal an nur der Zähler $i bleibt immer bei 0 stehen. Wähle ich dazu drei mal ein zweites Produkt aus zeigt er mir alle drei positionen mit dem Zähler 3 an.
Ich möchte das wenn jemand das textfeld ausfüllt und abschickt das dieses eine ausgefüllt bleibt und nicht alle drei.
Habe euch die wahrscheinlich relevanten dinge rausgeschrieben und hoffe das ich mich nicht zu undeutlich ausgedrückt habe.
$i = 0;
foreach ($warenkorb as $key => $value){
$normal="...andereText...<input type=text name=extras[] value=".$_REQUEST['extras'][$i].">".$i."</td> ... noch mehr text... ";
if ($value['kategorie'] == $Kategorie1 && $Kategorie1 != ''){
for ($b = 0; $b < $value['anzahl']; $b++){
if ($value['kategorie'] == $Kategorie1 && $value['anzahl'] > $b){ $i++; echo $normal;}
}}
if ($value['kategorie'] == $Kategorie2 && $Kategorie2 != ''){
for ($b = 0; $b < $value['anzahl']; $b++){
if ($value['kategorie'] == $Kategorie2 && $value['anzahl'] > $b){ $i++; echo $normal;}
}}
Vielen Dank schonmal für eure Mühen
Ulu
echo $begrüßung;
Habe euch die wahrscheinlich relevanten dinge rausgeschrieben und hoffe das ich mich nicht zu undeutlich ausgedrückt habe.
Nun, da fehlt z.B. noch der Inhalt deiner Variablen, an der Stelle des Scripts, um den Fehler nachstellen zu können.
Zum Programmieren gehört es nicht nur, sich eine Lösung zu einem Problem auszudenken, sondern auch nachforschen zu können, was an der Lösung falsch ist, wenn sie nicht tut wie sie soll.
Füge Kontrollausgaben in dein Script ein, und vergleiche den Inhalt der Variablen mit dem von dir erwarteten Wert. Geeignet dazu sind Befehle wie echo, print und var_dump(). Bei Strukturen (Arrays, Objekte) empfiehlt sich print_r() und var_dump() (mit einem vorangehendem, die Ausgabe lesbarer gestaltendem <pre>). var_dump() hat den Vorteil, dass der Typ einer Variablen mit angezeigt wird.
Außerdem empfiehlt sich immer wieder, während der Entwicklung das error_reporting auf E_ALL zu stellen, um weitere wichtige Hinweise zu nicht initialisierten Variablen etc. zu bekommen. (Und eine lesbarere Quelltextformatierung schadet auch nicht.)
echo "$verabschiedung $name";
Hi,
Nun, da fehlt z.B. noch der Inhalt deiner Variablen, an der Stelle des Scripts, um den Fehler nachstellen zu können.
$i = 0;
foreach ($warenkorb as $key => $value){
## Der $warenkorb besteht aus: Name, Kategorie, id und anzahl
$normal="...andereText...<input type=text name=extras[] value=".$_REQUEST['extras'][$i].">".$i."</td> ... noch mehr text... ";
if ($value['kategorie'] == $Kategorie1 && $Kategorie1 != ''){ ## Nun soll er wenn die richtige Kategorie im durchlauf dabei ist die Daten über "$normal" ausgeben.
for ($b = 0; $b < $value['anzahl']; $b++){ ## Je nach Anzahl soll es mehrfach ausgegeben werden
if ($value['kategorie'] == $Kategorie1 && $value['anzahl'] > $b){ $i++; echo $normal;}
}}
if ($value['kategorie'] == $Kategorie2 && $Kategorie2 != ''){
for ($b = 0; $b < $value['anzahl']; $b++){
if ($value['kategorie'] == $Kategorie2 && $value['anzahl'] > $b){ $i++; echo $normal;}
}}
Der Fehler tritt auf wenn ich ein Produkt aus einer Kategorie mehr als einmal im Warenkorb habe(wenn anzahl höher als 1).
Er addiert zwar das $i, gibt diesen Wert aber nicht an "$normal" weiter.
echo $begrüßung;
$normal="...andereText...<input type=text name=extras[] value=".$_REQUEST['extras'][$i].">".$i."</td> ... noch mehr text... ";
if ($value['kategorie'] == $Kategorie1 && $value['anzahl'] > $b){ $i++; echo $normal;}
Wenn ich nach dem "$i++;" das $i mit echo ausgebe zeigt er mir die richtige anzahl an, nur in der "$normal" ausgabe wird immer nur die erste Zahl angezeigt.
Wann wurde denn der Inhalt von $normal berechnet? In längst vergangenen Zeiten ...
Die Anweisung(en) die zum Inhalt einer Variable führen, werden nicht noch einmal ausgeführt, wenn man lesend auf die Variable zugreift, oder den Inhalt einer anderen Variable ändert, der "damals" für die Berechnung des Inhalts verwendet wurde.
echo "$verabschiedung $name";
Wann wurde denn der Inhalt von $normal berechnet? In längst vergangenen Zeiten ...
Ich habe gehofft mir so ein wenig Schreibarbeit zu sparen, ich habe insgesamt 18 Kategorien. Gibt es denn eine andere Möglichkeit als 15 mal anstelle von $normal den gesamten Text einzufügen?
echo $begrüßung;
Ich habe gehofft mir so ein wenig Schreibarbeit zu sparen, ich habe insgesamt 18 Kategorien. Gibt es denn eine andere Möglichkeit als 15 mal anstelle von $normal den gesamten Text einzufügen?
Ja, PHP kennt auch Funktionen.
echo "$verabschiedung $name";
Erstmal Vielen Dank für die bisherige Unterstützung,
Mithilfe einer Funktion hab ich das auch ausprobiert, nur sobald er in kategorie1 und dann auch noch was in kategorie2 hat, führt er die erste Kategorie aus und es kommt eine Fehlermeldung:
Fatal error: Cannot redeclare normal() (previously declared in /homepages/15/d116492758/htdocs/***/***/***/warenkorb.php:195) in /homepages/15/d116492758/htdocs/***/***/***/warenkorb.php on line 195
Mit dieser Fehlermeldung hatte ich schon einmal zu kämpfen,
Dies soll glaub ich heissen das eine Funktion nur einmal pro Seite aufgerufen werden kann?!?(Korrigier mich bitte wenn falsch)
Gibt es vielleicht noch eine andere Art von Funktion, die nicht meckert wenn ich Sie mehrmals aufrufe??
echo $begrüßung;
Fatal error: Cannot redeclare normal()
Dies soll glaub ich heissen das eine Funktion nur einmal pro Seite aufgerufen werden kann?!?(Korrigier mich bitte wenn falsch)
Eine Funktion kann nur einmal deklariert werden
function bla($i) {
echo $i;
}
Aber aufgerufen werden kann sie beliebig oft
bla(42);
bla(8);
bla(15);
echo "$verabschiedung $name";
Hallo,
Eine Funktion kann nur einmal deklariert werden
function bla($i) {
echo $i;
}Aber aufgerufen werden kann sie beliebig oft
bla(42);
bla(8);
bla(15);
Wo ich wieder bei meiner Frage wäre, kennt jemand eine möglichkeit wie ich dieses Problem lösen kann, ohne das ich alles mehrfach schreiben muss?
Gruß ulu
echo $begrüßung;
Eine Funktion kann nur einmal deklariert werden
function bla($i) {
echo $i;
}Aber aufgerufen werden kann sie beliebig oft
bla(42);
bla(8);
bla(15);Wo ich wieder bei meiner Frage wäre, kennt jemand eine möglichkeit wie ich dieses Problem lösen kann, ohne das ich alles mehrfach schreiben muss?
Genau dazu sind Funktionen da. Ich weiß nicht, wie ich es noch erklären soll. Vielleicht mit einem etwas anderen Beispiel:
function input($name, $value) {
$input = '<input type="text"';
$input .= ' name="' . $name . '"';
if (!empty($value))
$input .= ' value="' . $value . '"';
$input .= '>';
echo $input;
}
Aufgabe dieser Funktion ist, den HTML-Code eines Texteingabeelements zu erstellen. Sie bekommt zwei Parameter: den Namen des Elements und den Vorbelegungswert. (Damit ein bisschen mehr "Action" in die Funktion kommt wird letzterer nur dann eingefügt, wenn der übergebene Wert nicht leer ist.) $name und $value sind Platzhalter für diese beiden Parameter. Sie stehen nur innerhalb der Funktion zur Verfügung. Gibt es außerhalb der Funktion gleichlautende Variablen werden diese nicht beeinflusst. Auch können Variablen, die außerhalb einer Funktion existieren nicht einfach so innerhalb der Funktion angesprochen werden. (Da das sowieso kein guter Stil ist, erkläre ich an dieser Stelle nicht, wie das geht, sondern überlasse dies dem PHP-Handbuch.)
Diese Funktionsdeklaration steht ein Mal im Script. Wenn PHP an der Stelle vorbeikommt passiert erst einmal nichts, außer dass PHP nun weiß, dass es eine Funktion namens input gibt. An anderen Stellen des Scripts steht beispielsweise:
echo '<form action="...">';
input('vorname', 'Ulu');
input('nachname', '');
echo '</form>';
Zeile 1 und 4 sollten klar sein. Wenn PHP auf ein input() trifft, wird jedes Mal der Inhalt der Funktion ausgeführt. Die übergebenen Werte ('vorname', 'Ulu', usw.) werden beim Aufruf den Platzhaltern übergeben. Als Ausgabe des Scripts entsteht:
<form action="...">
<input type="text" name="vorname" value="Ulu">
<input type="text" name="nachname">
</form>
echo "$verabschiedung $name";
P.S. Nebensächlichkeiten wie Zeilenumbrüche habe ich weggelassen.
Hallo dedlfix,
Vielen Dank für die ausführliche Beschreibung, jetzt funktioniert es endlich.