PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP mach DB-Eintrag trotz Fehlerabfrage.


MikeCGN
02.09.2009, 09:06:55
Hi Leute,

folgendes. Nach dem senden von Daten über ein Formular muss noch ein Datum ausgewählt werden. Erst wenn auch ein Datum gewählt wurde soll ein Eintrag in eine DB erfolgen.

Auf der Seite lese ich als erstes die gesendeten Daten aus, und generiere bei bedarf eine Fehlermeldung, wenn ein Feld falsch oder garnicht ausgefüllt wurde.

Soweit funktioniert es auch.

Jetzt zu meinem Problem.

Weiter unten auf der Seite Lasse ich die Variable "$fehler" auslesen. Diese kann verschiedene Werte enthalten.

Bevor nun ein Eintrag in eine DB geschieht muss die Variable $fehler leer sein.

Die IF-Schleife sieht so aus:



if($fehler=='')
{
MYSQL_QUERY("INSERT INTO fix ... ");
}
else if($fehler!='')
{
echo 'Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen.';
}



Die Werte der Variable $fehler sind bei einem Fehler 1,2,3,4,5,6 und wenn kein Fehler auftritt sie ist leer.

Tritt jetzt ein Fehler auf, trägt das Script die unvollständigen Daten dennoch in die DB ein, aber gibt gleichzeitig die Fehlermeldung aus.

Wie kann das sein? Soweit ich weiß sollte das bei dieser IF-Schleife nicht passieren.

Hat jemand eine Idee?

vt1816
02.09.2009, 09:38:08
1. Schalte die Fehleranzeige einerror_reporting(-1);
ini_set('display_errors', TRUE);


2. Lass Dir $fehler ausgegen
3. ändereelse if($fehler!='')
{
echo 'Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen.';
}
in
else
{
echo 'Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen.';
}
endif
oder kann $fehler noch andere Werte enthalten?

Hinweis: (http://de.php.net/manual/de/control-structures.elseif.php) Note that elseif and else if will only be considered exactly the same when using curly brackets as in the above example. When using a colon to define your if/elseif conditions, you must not separate else if into two words, or PHP will fail with a parse error.

MikeCGN
02.09.2009, 10:04:27
Hallo vt1816,


error_reporting(-1);
ini_set('display_errors', TRUE);

Bringt keine besonderen Meldungen. Ausser "Notice: Undefined index:" wenn für eine Variable keine POST-Daten zur Verfügung stehen.



else
{
echo 'Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen.';
}
endif


"endif" und "endif;" werden garnicht akzeptiert und bringen "parse error, unexpected T_ENDIF", ohne endif macht das Script wieder das gleiche wie zuvor.

Ich habe jetzt der Variable $fehler der Wert "0" zugewiesen, wenn $fehler==''. das funktioniert, die Ausgabe von $fehler bringt entweder die entsprechende Fehlernummer wie es auch sein sollte, oder wenn kein Fehler war bringt die Ausgabe "0".

Jetzt sieht der Code so aus:

if($fehler=='0')
{
MYSQL_QUERY("INSERT INTO fix ... ");
}
else
{
echo 'Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen.';
}

Trotzdem macht das Script bei den Fehlerwerten 1-6 einen Eintrag in die DB und gibt zusätzlich "Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen." aus.

Also alles beim Alten

MikeCGN
02.09.2009, 11:04:18
Ich habe jetzt eine andere Lösung gewählt.

Ich frage für den Eintrag in die DB nicht mehr $fehler ab, sondern direkt die Datumsvariablen. Wenn diese leer sind soll kein Eintrag erfolgen.


if($datum!='')
{
MYSQL_QUERY("INSERT INTO fix ... ");
}
else
{
echo 'Es ist ein Fehler aufgetreten, der Eintrag wurde nicht vorgenommen.';
}


Eigendlich das selbe in Grün, aber hier funktioniert es.

Warum auch immer ?!