#1 18. April 2012 Formular Pflichtfeld und Komma als Punkt übertragen Hi, ich habe ein kleines Problem, ich habe ein Formular in dem Werte eingetragen werden. Ich möchte jetzt das alle Felder Pflichtfelder sind, also Absenden nur dann funktioniert wenn die Felder alle gefüllt sind: Code: <?php include "auth.php"; include "mysql_connectinfo.php"; if (isset( $_POST['senden'] )) { if(strlen($d)==0){ $error_msg="Bitte Preis für d eingeben!<br />"; } if(strlen($s10)==0){ $error_msg.="Bitte Preis für s10 eingeben!<br />"; } if(strlen($s5)==0){ $error_msg.="Bitte s5 eingeben!<br />"; } if(isset($error_msg)){ echo $error_msg; } else { $d = $_POST["d"]; $s10 = $_POST["s10"]; $s5 = $_POST["s5"]; $sql = "INSERT INTO e362 (d, s10, s5) VALUES ('$d', '$s10', '$s5')"; $absenden = mysql_query($sql); if(!$absenden) echo "SQL-Anweisung fehlgeschlagen!" .mysql_error(); if (mysql_affected_rows() == 1) { header('Location: danke.html'); } else { echo '<h3>Der Datensatz konnte <span class="hinweis">nicht</span> hinzugefügt werden!</h3>'; } } ?> Leider klappt es so nicht, bekomme folgenden Fehler: Parse error: syntax error, unexpected $end in ***.php on line 84 Ich hab jedoch garkeine Zeile 84. Wo liegt der Fehler, die Stelle an der ich den Code zur Überprüfung eingegeben habe stimmt doch soweit oder? Problem 2 Komma als Punkt, in den Feldern werden Dezimalzahlen eingegeben. Diese werden von der MySQL Tabelle aber nur als solche erkannt wenn diese mit Punkt geschrieben werden z.B. 2.898, gibt der User jetzt 2,898 ein steht in der Tabelle 2898 das möchte ich verhindern, ich glaube es gibt eine Möglichkeit die eingabe von 2,898 vor der Übergabe an die Variable in 2.898 umzuwandeln, oder? Kann mir da jemand weiter helfen. Ich bin in dem gebiet noch blutiger anfänger, ich les mich auch vorher immer ein, es fällt mir aber noch schwer, anhand von beispielen das richtige für mich anzuwenden. Deswegen wäre es super wenn ihr mir helfen könntet + Multi-Zitat Zitieren
#2 18. April 2012 AW: Formular Pflichtfeld und Komma als Punkt übertragen Entfern das letzte ?> aus deiner Datei, dies ist unnötig und kann unter umständen Fehler verursachen! // Edit - 10:25 Habe das Script von dir etwas Modifiziert: mysql_real_escape_string() beugt SQL-Injektion vor Fehlermeldungen als Array erhöht die Wiederverwendbarkeit Erst die POST Variablen umschreiben und dann deren Inhalt prüfen, ergibt mehr sinn oder? PHP: <? php include 'auth.php' ; include 'mysql_connectinfo.php' ; if( isset( $_POST [ 'senden' ] ) ) { $d = mysql_real_escape_string ( trim ( $_POST [ 'd' ]) ); $s10 = mysql_real_escape_string ( trim ( $_POST [ 's10' ]) ); $s5 = mysql_real_escape_string ( trim ( $_POST [ 's5' ]) ); $error_msg = array(); if( strlen ( $d )== 0 ) { $error_msg [] = 'Bitte Preis für d eingeben!' ; } if( strlen ( $s10 )== 0 ) { $error_msg [] = 'Bitte Preis für s10 eingeben!' ; } if( strlen ( $s5 )== 0 ) { $error_msg [] = 'Bitte s5 eingeben!' ; } if( count ( $error_msg ) > 0 ) { echo implode ( '<br />' , $error_msg ); } else { $sql = "INSERT INTO `e362` (`d`, `s10`, `s5`) VALUES (' $d ', ' $s10 ', ' $s5 ')" ; $absenden = mysql_query ( $sql ); if( $absenden === false ) { echo "SQL-Anweisung fehlgeschlagen!" . mysql_error (); exit; } if( mysql_affected_rows () == 1 ) { header ( 'Location: danke.html' ); exit; } else { echo '<h3>Der Datensatz konnte <span class="hinweis">nicht</span> hinzugefügt werden!</h3>' ; } } } + Multi-Zitat Zitieren
#3 18. April 2012 AW: Formular Pflichtfeld und Komma als Punkt übertragen Kurzer Senf von mir. Folgendes ist blöd: PHP: if ( $foo == 4 ) { // ... } Warum? Vergisst du bspw. ein =-Zeichen, so wird aus deiner Gleichheitsfrage eine Zuweisung. Besser ist: PHP: if ( 4 == $foo ) { // ... } Vergisst du dort dann ein =-Zeichen, crasht PHP und du wirst den Fehler bemerken Zweiter Punkt: PHP: $sql = "INSERT INTO `e362` (`d`, `s10`, `s5`) VALUES (' $d ', ' $s10 ', ' $s5 ')" ; Finde ich unschön. Dafür gibt es prepared Statements bzw. sprintf. du kannst mit sprintf sogar ne Typangabe machen. Außerdem machst du so dein SQL-Statement wiederverwendbar. Sonst hast du duplicate code. Ich nehm an, du fängst grad erst mit PHP an - dann ist's damit noch nicht zu spät. Und es wird dir viel bringen + Multi-Zitat Zitieren
#4 18. April 2012 AW: Formular Pflichtfeld und Komma als Punkt übertragen Echt, wieso das? Wenn danach ein HTML Code kommt ist es doch korrekt oder? Ich hab den php Code und den HTML code für das Formular in einer Datei. Hatte ich weggelassen oder mich nicht mit beschäftigt da der Bereich nur von 5 Usern genutzt wird die nur mit Passwort rein kommen. Aber Sicher ist sicher Das hatte ich dann zwischenzeitlich auch probiert, dadurch hat sich der Fehler um eine Zeile verschoben Also ich habe das ?> weggelassen, dadurch bekam ich einen Fehler wegen des folgenden HTML Codes. Hab es wieder hinzugefügt, jetzt geht die Seite wieder. (Ich habe deinen Code Kopiert und in die Datei eingefügt.) ABER jetzt kann ich immernoch auf Absenden drücken wenn keines der Felkder gefüllt ist und er trägt mir Null werte in die Tabelle. Verstehs nicht wirklich, er macht doch jetzt vor dem insert die Abfrage ob die drei Felder 0 enthalten, wenn ja sendet er die Error Message, wenn nicht, dann macht er mit Insert weiter. So sollte es sein, aber er tut genau das Gegenteil. EDIT: Kommando zurück, Funktioniert alles einwandfrei, Problem war das ich nach der Eingabe der Preise auf eine andere Seite weitergeleitet habe(Wollte die Preise gleich schön anzeigen lassen) dadurch konnte mir die Fehlermeldung garnicht mitgegeben werden. Hab die Verbindung auf sich selbst wieder hergestellt jetzt gehts. @Yuri Einwand 1 hab ich verstanden Einwand 2, nur Bahnhof was meinst du genau, vll für Dummis formulieren. So bleibt noch die Frage wie ich es umgehe das wenn der User die Zahl mit Komnma eingibt, es mir falsche werte in die Tabelle trägt. Müsste es nicht damit gehen das ich jedes eingegeben Komma vor der Weitergabe in einen Punkt verwandle? Edit#2: Also das mit dem Komma ist wirklich sehr sehr einfach wenn mans dann mal raushat: Code: $zahl = str_replace(",",".", $zahl); + Multi-Zitat Zitieren