Fehler in Formular ( achtung langer Text! )

Arbeite mich grad in PHP ein und hänge bei den Formularen fest :frowning:
Habe ein Buch mit Übungsaufgaben drin. Dort soll man ein Formular für eine Pizza-Bestellung erstellen. Habe ich gemacht. Meine Lösung enthielt etliche Fehler ( mache Php erst seit gestern ). Darum hab ich mir mal die Musterlösung angesehen. Die bringt aber auch Fehler!

Dort gibt es einmal das Formualer ( uebung08.htm ) mit folgendem Code:

Bitte geben Sie Ihren Namen und Ihre Adresse ein, treffen Sie Ihre
Auswahl und senden Sie das Formular ab:

Name
Adresse

Herr

Frau

Napoli (DM 11,50)

Italia (DM 12,50)

Con Tutto (DM 14,00)

4 Stagioni (DM 13,00)

Mozzarella (DM 14,50)

Thunfisch
Extra Käse

Und dem PHP Programm (uebung08.php ) mit folgendem Code:

<?php /* Auswahl der Pizza */
if ($pizzatyp == "Napoli") $preis = 11.5; else if ($pizzatyp == "Italia") $preis = 12.5; else if ($pizzatyp == "Con Tutto") $preis = 14; else if ($pizzatyp == "4 Stagioni") $preis = 13; else $preis = 14.5; /\* Zusätze \*/ if ($ct) $preis = $preis + 1; if ($cek) $preis = $preis + 2; /\* Anrede \*/ if ($anrede == "Herr") echo "Sehr geehrter Herr $besteller "; else echo "Sehr geehrte Frau $besteller "; /\* Ausgabe \*/ echo "vielen Dank für Ihre Bestellung "; echo "Wir liefern Ihre Pizza $pizzatyp"; if ($ct) echo " mit $ct"; if ($cek) echo " mit $cek"; echo " in 20 Minuten an die folgende Adresse: "; echo "$adresse "; echo "Der Preis beträgt DM $preis "; echo "Ihr Pizza-Team"; ?\> Beim Ausführen zeigt er das Formular auch wunderbar an. Ich geb meine Daten ein und klick auf Submit. Allerdings zeigt er mir dann auf der php-seite nur fehlermeldungen, dass lauter Variablen undefined sind ( ct, cek, besteller, anrede, adresse ). In der Php.ini hab ich Register\_globals schon auf on gesetzt ( das war vorher mal die Fehlerquelle ). Doch jetzt funktioniert es nicht mehr :frowning: Wo liegt der Fehler?

Also aus meiner Sicht fehlt zuerst mal die Varialben selbst! Du fängst gleich an diese zu überprüfen, übernimmst sie aber nie vom Formular!
Versuch dochmal am Anfang nach <?php

$pizzatyp = $HTTP_POST_VARS[‚pizzatyp‘];
$besteller= $HTTP_POST_VARS[‚besteller‘];
$adresse = $HTTP_POST_VARS[‚adresse‘];
$anrede = $HTTP_POST_VARS[‚anrede‘];
$ct = $HTTP_POST_VARS[‚ct‘];
$cek = $HTTP_POST_VARS[‚cek‘];
einzufügen!

Der Fehler bleibt der gleiche. Habe ja schon vorher ein Formular erstellt. Dort funktionierte die Wertübergabe auch so. Ich geb euch mal den Link zu der Openbookvariante meines Buches.

http://www.galileocomputing.de/openbook/php4/kapd.htm

Weiter unten auf der Seite ist auch die Aufgabe noch mal beschrieben.

Komme da grade echt nicht weiter!

Hallo!

Das $HTTP_POST_VARS[] ist schon veraltet. Man sollte stattdessen $_POST[] benutzen. Daran könnte es möglicherweise auch liegen.

Nico

Arbeite mich grad in PHP ein und hänge bei den Formularen fest

Habe ein Buch mit Übungsaufgaben drin. Dort soll man ein
Formular für eine Pizza-Bestellung erstellen. Habe ich
gemacht. Meine Lösung enthielt etliche Fehler ( mache Php erst
seit gestern ). Darum hab ich mir mal die Musterlösung
angesehen. Die bringt aber auch Fehler!

Dort gibt es einmal das Formualer ( uebung08.htm ) mit
folgendem Code:

Bitte geben Sie Ihren Namen und Ihre Adresse ein, treffen Sie
Ihre Auswahl und senden Sie das Formular ab:

Und dem PHP Programm (uebung08.php ) mit folgendem Code:

<?php :
/\* Auswahl der Pizza \*/

?>

Beim Ausführen zeigt er das Formular auch wunderbar an. Ich
geb meine Daten ein und klick auf Submit. Allerdings zeigt er
mir dann auf der php-seite nur fehlermeldungen, dass lauter
Variablen undefined sind ( ct, cek, besteller, anrede, adresse
).
In der Php.ini hab ich Register_globals schon auf on gesetzt (
das war vorher mal die Fehlerquelle ). Doch jetzt funktioniert
es nicht mehr :frowning:

Wo liegt der Fehler?

Prinzipiell: Register_Globals sollte immer auf OFF sein; ON ist ein zu großes Sicherheitsrisiko! Dann aber funktioniert das mit $pizzatyp etc. nicht mehr, du musst dann $_POST[pizzatyp] etc. verwenden!

Dein Code funktioniert bei REGISTER_GLOBALS = OFF so:

/* Auswahl der Pizza */
if ($_POST[pizzatyp] == „Napoli“)
$preis = 11.5;
else if ($_POST[pizzatyp] == „Italia“)
$preis = 12.5;
else if ($_POST[pizzatyp] == „Con Tutto“)
$preis = 14;
else if ($_POST[pizzatyp] == „4 Stagioni“)
$preis = 13;
else
$preis = 14.5;

/* Zusätze */
if ($_POST[ct])
$preis = $preis + 1;
if ($_POST[cek])
$preis = $preis + 2;

/* Anrede */
if ($_POST[anrede] == „Herr“)
echo "Sehr geehrter Herr „.$_POST[besteller].“ ";
else
echo "Sehr geehrte Frau „.$_POST[besteller].“ ";

/* Ausgabe */
echo "vielen Dank für Ihre Bestellung ";
echo "Wir liefern Ihre Pizza ".$_POST[pizzatyp];

if ($_POST[ct])
echo " mit ".$_POST[ct];
if ($_POST[cek])
echo " mit ".$_POST[cek];

echo " in 20 Minuten an die folgende Adresse: „;
echo $_POST[adresse].“ ";
echo "Der Preis beträgt DM „.$_POST[preis].“ ";
echo „Ihr Pizza-Team“;

Ich selbst hatte übrigens bei meinen ersten PHP-„Geh“-Versuchen das gleiche Problem; auch bei Reg.-Globals on hat das seltsamer Weise nicht so funktioniert mit der Übergabe. Wie gesagt, da „OFF“ sowieso besser ist, gleich von Anfang an damit arbeiten!

Auch das Problem mit nicht funktionierenden Codes in Büchern ist mir hinreichend bekannt; für mich war das dann immer eine zusätzliche Herausforderung, das Dingens dennoch zum Laufen zu bringen - man kann dadurch nur lernen!

hiho tara,

also bei mir funktioniert dein script.

http://bacher.bash-it.de/tmp/

was konkret funktioniert bei dir nicht, kommt eine fehlermeldung?

kannst du die genauen fehlermeldungen mal posten? ich habe ja den verdacht, dass es an den php einstellungen liegt. welchen webserver und welche php version benutzt du. interressant waere es ja auch mal den phpinfo(); output einzusehen. mach mal in dem Script mit der Ausgabe ein

<?php phpinfo();
?\> ganz unten sollten dann die in dem script definierten variablen sein. entweder koenntest du uns die posten. cooler waere es aber natuerlich die ganze info zu haben, ist nur ein wenig viel fuer dieses forum, kanst du einen link zu dem script auf deinem server geben, oder den html output online stellen? gruss josh

Bei deiner Lösung bekomme ich folgende Ausgabe:

Notice: Undefined variable: pizzatyp in c:\Inetpub\wwwroot\php\ud08.php on line 5

Notice: Undefined variable: pizzatyp in c:\Inetpub\wwwroot\php\ud08.php on line 7

Notice: Undefined variable: pizzatyp in c:\Inetpub\wwwroot\php\ud08.php on line 9

Notice: Undefined variable: pizzatyp in c:\Inetpub\wwwroot\php\ud08.php on line 11

Notice: Undefined variable: ct in c:\Inetpub\wwwroot\php\ud08.php on line 17

Notice: Undefined variable: cek in c:\Inetpub\wwwroot\php\ud08.php on line 19

Notice: Undefined variable: anrede in c:\Inetpub\wwwroot\php\ud08.php on line 23

Notice: Undefined variable: besteller in c:\Inetpub\wwwroot\php\ud08.php on line 26
Sehr geehrte Frau

vielen Dank für Ihre Bestellung

Notice: Undefined variable: pizzatyp in c:\Inetpub\wwwroot\php\ud08.php on line 30
Wir liefern Ihre Pizza
Notice: Undefined variable: ct in c:\Inetpub\wwwroot\php\ud08.php on line 32

Notice: Undefined variable: cek in c:\Inetpub\wwwroot\php\ud08.php on line 34
in 20 Minuten an die folgende Adresse:

Notice: Undefined variable: adresse in c:\Inetpub\wwwroot\php\ud08.php on line 38

Der Preis beträgt DM 14.5

Ihr Pizza-Team

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also ich nutze die PHP version 5.0.3 .

Arbeite ja in der Firma. Der Rechner war vorinstalliert. Wir nutzen hier eigentlich den IIS.

Bei phpinfo steht da zwar viel, aber Variablen kann ich nicht entdecken.

es sollte eine tabelle dabei sein, mit der Ueberschrift:
PHP Variables

bei mir wird diese ganz unten beim output der php info angezeigt. ist die nicht vorhanden?

gruss josh

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

phpinfo() noch mal gemacht und nu ist sie da *wunder* Schön viel Text

PHP Variables
VariableValue_SERVER[„ALLUSERSPROFILE“]C:\Dokumente und Einstellungen\All Users_SERVER[„APPDATA“]C:\Dokumente und Einstellungen\froehlich\Anwendungsdaten_SERVER[„CLASSPATH“]C:\Program Files\InterBase Corp\InterClient\interclient.jar_SERVER[„CLIENTNAME“]Console_SERVER[„CommonProgramFiles“]C:\Programme\Gemeinsame Dateien_SERVER[„COMPUTERNAME“]LFR-DEV_SERVER[„ComSpec“]C:\WINDOWS\system32\cmd.exe_SERVER[„HOMEDRIVE“]C:_SERVER[„HOMEPATH“]\Dokumente und Einstellungen\froehlich_SERVER[„INCLUDE“]C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\include_SERVER[„LIB“]C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Lib_SERVER[„LOGONSERVER“]\ISEOL-DATA-A_SERVER[„NUMBER_OF_PROCESSORS“]1_SERVER[„OS“]Windows_NT_SERVER[„Path“]D:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;C:\Programme\Microsoft SQL Server\80\Tools\BINN_SERVER[„PATHEXT“].COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH_SERVER[„PROCESSOR_ARCHITECTURE“]x86_SERVER[„PROCESSOR_IDENTIFIER“]x86 Family 6 Model 6 Stepping 2, AuthenticAMD_SERVER[„PROCESSOR_LEVEL“]6_SERVER[„PROCESSOR_REVISION“]0602_SERVER[„ProgramFiles“]C:\Programme_SERVER[„SESSIONNAME“]Console_SERVER[„SystemDrive“]C:_SERVER[„SystemRoot“]C:\WINDOWS_SERVER[„TEMP“]C:\DOKUME~1\FROEHL~1\LOKALE~1\Temp_SERVER[„TMP“]C:\DOKUME~1\FROEHL~1\LOKALE~1\Temp_SERVER[„USERDNSDOMAIN“]ISE_SERVER[„USERDOMAIN“]ISE_SERVER[„USERNAME“]froehlich_SERVER[„USERPROFILE“]C:\Dokumente und Einstellungen\froehlich_SERVER[„VS71COMNTOOLS“]C:\Programme\Microsoft Visual Studio .NET 2003\Common7\Tools_SERVER[„windir“]C:\WINDOWS_SERVER[„PHP_SELF“]no value_SERVER[„argv“]

Array
(
 [0] =\> D:\PHP\php4\Übungen\ud\_debug\_tmp.php
)

_SERVER[„argc“]1_ENV[„ALLUSERSPROFILE“]C:\Dokumente und Einstellungen\All Users_ENV[„APPDATA“]C:\Dokumente und Einstellungen\froehlich\Anwendungsdaten_ENV[„CLASSPATH“]C:\Program Files\InterBase Corp\InterClient\interclient.jar_ENV[„CLIENTNAME“]Console_ENV[„CommonProgramFiles“]C:\Programme\Gemeinsame Dateien_ENV[„COMPUTERNAME“]LFR-DEV_ENV[„ComSpec“]C:\WINDOWS\system32\cmd.exe_ENV[„HOMEDRIVE“]C:_ENV[„HOMEPATH“]\Dokumente und Einstellungen\froehlich_ENV[„INCLUDE“]C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\include_ENV[„LIB“]C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Lib_ENV[„LOGONSERVER“]\ISEOL-DATA-A_ENV[„NUMBER_OF_PROCESSORS“]1_ENV[„OS“]Windows_NT_ENV[„Path“]D:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;C:\Programme\Microsoft SQL Server\80\Tools\BINN_ENV[„PATHEXT“].COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH_ENV[„PROCESSOR_ARCHITECTURE“]x86_ENV[„PROCESSOR_IDENTIFIER“]x86 Family 6 Model 6 Stepping 2, AuthenticAMD_ENV[„PROCESSOR_LEVEL“]6_ENV[„PROCESSOR_REVISION“]0602_ENV[„ProgramFiles“]C:\Programme_ENV[„SESSIONNAME“]Console_ENV[„SystemDrive“]C:_ENV[„SystemRoot“]C:\WINDOWS_ENV[„TEMP“]C:\DOKUME~1\FROEHL~1\LOKALE~1\Temp_ENV[„TMP“]C:\DOKUME~1\FROEHL~1\LOKALE~1\Temp_ENV[„USERDNSDOMAIN“]ISE_ENV[„USERDOMAIN“]ISE_ENV[„USERNAME“]froehlich_ENV[„USERPROFILE“]C:\Dokumente und Einstellungen\froehlich_ENV[„VS71COMNTOOLS“]C:\Programme\Microsoft Visual Studio .NET 2003\Common7\Tools_ENV[„windir“]C:\WINDOWS

tell mal in die zweite Zeile Deines PHP Scriptes
error_reporting(E_NOTICE);

damit deaktivierst Du das ausgeben von Fehlern im Script. ist auch in der php.ini irgendwo zu finden und vermutlich auf E_ALL gesetzt…
und nachdem wohl der code unsauber ist für Deine Konfiguration heissts entweder Fehler ausblenden oder ausblenden.

Hab jetzt mal testweise in der php.ini error_reporting auf = E_ERROR gesetzt. Bringt mir ja aber trotzdem nichts, denn er zeigt ja die Werte trotzdem nicht an.

hiho tara,

da fehlen mir die worte. es fehlt komplett alles was in _POST stehen sollte. vielleicht mal den admin ueber die konfiguration ausquetschen.

du hast das phpinfo(); aber schon in das php-script (das die variablen vom formular der ersten Seite verarbeitet!) mit eingebunden, ja?

phpinfo() noch mal gemacht und nu ist sie da *wunder* Schön
viel Text

hm, naja vielleicht einfach beim ersten mal uebersehen…

hth josh

Hallo,
zuerst einmal würde ich mich nach einem anderen Buch umschauen…

Das momentane scheint mir da nicht mehr so richtig zeitgemäß (z.B. Zugriff auf Formulardaten nicht über $_POST) zu sein.

Gruß Markus

Leider ist das das einzige Buch über PHP welches wir in der Firma haben. Wir programmieren hier eigentlich in C, C++ und C#. Dazu haben wir massig Bücher.

Kennt jemand vielleicht noch ein Openbook oder ne gute Seite, wo vielleicht auch ein paar Übungsaufgaben drauf sind? Ich bin immer zu faul und zu unkreativ mir selbst Übungen auszudenken.

/* Zusätze */
if ($_POST[ct])
$preis = $preis + 1;
if ($_POST[cek])
$preis = $preis + 2;

Da es sich hier um optionale Angaben (checkboxen) handelt, wär es besser, mit isset zu prüfen, ob die Variable vorhanden ist.
Sonst können immer undefined Variable als Notice kommen.

if(isset($_POST[‚ct‘])) {
$preis = $preis + 1;
}
if(isset($_POST[‚cek‘])) {
$preis = $preis + 2;
}

In der Php.ini hab ich Register_globals schon auf on gesetzt (
das war vorher mal die Fehlerquelle ). Doch jetzt funktioniert
es nicht mehr :frowning:

mach es wieder off. und lies im internet wozu das gut ist.

Wo liegt der Fehler?

an der systematik :wink:

fang erst mal klein an speichere das folgende als foo.php - du mustt ds 2. preteag fixen - und schau, was es tut, dann adaptierst du es auf deine aufgabe:

<?php if ( isset($_POST['bestellt']))<br /> { 
 print "

    ".print\_r($\_POST)."
    
        ";
         }
        ?\>

php als Modul installiert oder als cgi kompiliert?
Und welcher Server?

widecrypt