[PHP] Formular Pflichtfeld und Komma als Punkt übertragen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Buzzer, 18. April 2012 .

  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
     
  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 )== ) {
            
    $error_msg [] =  'Bitte Preis für d eingeben!' ;
        }
        
        if( 
    strlen ( $s10 )== ) {
            
    $error_msg [] =  'Bitte Preis für s10 eingeben!' ;
        }
        
        if( 
    strlen ( $s5 )== ) {
            
    $error_msg [] =  'Bitte s5 eingeben!' ;
        }
        
        
        if( 
    count ( $error_msg ) >  ) {
            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 () ==  )
            {
                
    header ( 'Location: danke.html' );
                exit;
            }
            else
            {
                echo 
    '<h3>Der Datensatz konnte <span class="hinweis">nicht</span> hinzugefügt werden!</h3>' ;
            }

        }
    }
     
  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 ( ==  $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
     
  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);
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.