unerwartetes ergebniss von echo
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzahl
artikel
ausgabe
berechnung
bonus
buchen
code
dank
fehler
formel
http
idee
klammern
kundennummer
lager
mist
preis
sache
schleife
zeile
-
Hi. Ich soll ein PHP script für die schule schreiben und bin am verzweifeln. Ich hab eine schleife mit einem echo drin, das verschiedene Variablen einbindet und dann eine Tabelle aus geben soll. Hört sich jetzt vieleicht ein bisschen kompliziert an, ist es aber nicht^^
Hier der code:
for ($z = 1;$z <= $_SESSION['rows'];$z += 1) { echo '<tr> <td><input type="text" name="auftragsnummer'.$z.'"></td> <td><input type="text" name="artikel'.$z.'"></td> <td><input type="text" name="anzahl'.$z.'"></td> <td><select name="status'.$z.'"> <option value="Bestellt">Bestellt <option value="Auf Lager">Auf Lager </select></td> <td><input type="text" name="preis'.$z.'"></td> <td><input type="text" name="bonus'.$z.'"></td><td><input type="submit" name="rows" value="+"></td> </tr> '; }
Und das ist dann am ende auf meiner seite zu sehen wenn die schleife nur 1 "runde" läuft:
-2€ pro Buch)</td> <td>2€<br>(2,50€ pro Buch)</td> <td>5€<br>(5,00€ pro Buch)</td> </tr>
Wo liegt der fehler??? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Sind die Anführungszeichen wirklich so gesetzt wie im Code angegeben und nicht slash" bzw. '
Beitrag geändert: 25.11.2008 21:49:48 von boyman -
Wo wird der Fehler denn angezeigt?
-
Muss man nicht vor jedem " ein \\ setzen?
Beitrag geändert: 25.11.2008 22:03:31 von taq0 -
nein, die " und ' sind ok so, da er ' als äußere Hochkommata verwendet.
In deinem Code fehlen nur irgendwie die schließenden </option> Tags
aus dem:
<td><select name="status'.$z.'"> <option value="Bestellt">Bestellt <option value="Auf Lager">Auf Lager </select></td>
wird also:
<td><select name="status'.$z.'"> <option value="Bestellt">Bestellt</option> <option value="Auf Lager">Auf Lager</option> </select></td>
Grüßle
Beitrag geändert: 26.11.2008 11:56:05 von scout -
Mist. Das is mir jetzt aber peinlich. Hab ich doch glatt die falsche schleife kopiert xD
for ($z = 1;$z <= $_POST['bestellungsmenge'];$z += 1) { if ($_POST['auftragsnummer'.$z] != "" && $_POST['artikel'.$z] != "" && $_POST['anzahl'.$z] != "" && $_POST['preis'.$z] != "" && $_POST['bonus'.$z] != "") { echo '<tr> <td>'.$_POST['kundennummer'].'</td> <td>'.$_POST['auftragsnummer'.$z].'</td> <td>'.$_POST['artikel'.$z].'</td> <td>'.$_POST['anzahl'.$z].'</td> <td>'.$_POST['status'.$z].'</td> <td>'.($_POST['preis'.$z] - $_POST['bonus'.$z]) * $_POST['anzahl'.$z].'€<br>('.$_POST['preis'.$z] - $_POST['bonus'.$z].'€ pro Buch)</td> <td>'.$_POST['bonus'.$z] * $_POST['anzahl'.$z].'€<br>('.$_POST['bonus'.$z].'€ pro Buch)</td> <td>'.$_POST['preis'.$z] * $_POST['anzahl'.$z].'€<br>('.$_POST['preis'.$z].'€ pro Buch)</td> </tr> '; } }
Das solte eis eigentlich sein.
Ohne die </option>-tags (muss man das überhaupt machen?^^) funktioniert es eben so gut -
Mach doch als erstes Mal eine Variableneinlesung, so frei nach dem Motto "Wenn ich was poste, sollen die Anderen das auch lesen können" ;)
Nee also jetzt nicht angegriffen fühlen oder so, ich dachte nur, es würde vielleicht lesbarer - und leichter debugbar werden, wenn man die Werte erst mal einliest:
$kundenummer = $_POST["kundennummer"]; $auftragsnummer = $_POST["auftragsnummer".$z];
Also so würde man da vielleicht besser einen Fehler drin finden können...
Nur mal 'ne Idee...
Weitere Idee: Sag' uns doch erstmal, was das Skript überhaupt machen SOLL - UND was es davon NICHT tut ODER TUT und NICHT tun SOLLTE, das würde so einiges an der Sache vereinfachen...
Grüße,
Der LDer
P.S.: Mein Gefühl sagt mir, dass sich dein Fehler in Zeile 11 versteckt... Versuch's mal mit int()/float() {Heißen die Kovertierungs-Funktionen in PHP so?} -
Eigentlich ist es in PHP nicht notwendig Variablen manuell einen Typ zuzuweisen, eeinen Fehler hab ich bisher auch nicht entdeckt, muss aber wohl was semantisches sein wenn du ja keine Fehlermeldung bekommst
-
Hi, die Lösung ist doch ganz einfach...
In der Zeile:
<? echo '<td>'.($_POST['preis'.$z] - $_POST['bonus'.$z]) * $_POST['anzahl'.$z].'€<br>('.$_POST['preis'.$z] - $_POST['bonus'.$z].'€ pro Buch)</td>'; ?>
sagst du dem Parser sinngemäß folgendes:
Nimm das Stück Text "<td>" und hänge den Wert von "($_POST['preis'.$z] - $_POST['bonus'.$z])" an.
Dann versuche das Ergebnis "<td>20" mit dem Wert aus Anzahl1 zu multiplizieren
Und hänge dann "€ ..." an.
Die Berechnung diverser Zeichen kann der PC nicht durchführen, also verwürft er alles bis hierher und fängt neu an.
Lösung:
Alle Berechnungen innerhalb eines echo-Blocks (also zwischen den String-Verbindungspunkten) in Klammern einkapseln.
<? echo '<td>'.(($_POST['preis'.$z] - $_POST['bonus'.$z]) * $_POST['anzahl'.$z]).'€<br>('.($_POST['preis'.$z] - $_POST['bonus'.$z]).'€ pro Buch)</td>'; ?>
Und schon weiß auch der PC damit was anzufangen
Grüßle
PS: die </option>-Tags gehören laut HTML-Spezifikation zwingend dorthin! Dass dein Browser aus kulanzgründen eine Korrektur durchführt ist eine andere Sache. Allerdings wird dies nicht von allen Browsern gemacht d.h. deine Seite wird mit verschiedenen Browsern anders aussehen bzw. kann halt gar nicht angesehen werden.
Kannst deine Ausgabe ja mal mit dem HTML-Validator prüfen (siehe http://validator.w3.org bzw. http://www.validome.org )
Beitrag geändert: 27.11.2008 16:44:10 von scout -
Danke scout, so klappts einwandfrei. Auf die Idee wär ich nie gekommen ^^
Auch danke euch anderen, die ihr euch die Mühe gemacht habt mir bei der lösungsfindung zu helfen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage