2012-03-24 8 views
0

Ich versuche, meine PHP-Formular mit Ausnahme zu validieren, aber irgendwie funktioniert es nicht. Die Ausnahme soll ausgelöst werden, wenn der Benutzer in "nameg" ein beliebiges Zeichen eingibt, das keine Zeichenfolge ist, und in "amountg" alles, was nicht ganzzahlig ist. Sollten in diesem Fall Ausnahmen verwendet werden:PHP-Skript wird keine Ausnahme werfen

+0

Ihr Code für SQL-Injection verwundbar ist und mysql_ * ist weich veraltet. – Paul

+0

Was hast du als '$ _POST ['amountg']', der Wert? – safarov

+0

Ja $ _POST ['MengeG'] ist der Wert, den der Benutzer über das Formular eingibt. – tutak

Antwort

3

Vermutlich möchten Sie die Ausnahme ausgeben? Do:

echo $e->getMessage();

Edit: Als Antwort auf Ihren späteren Kommentar bezüglich Skript beenden, legen Sie die MySQL-Abfragen im try-Block.

Bearbeiten 2: Geändert Validierung als Reaktion auf Ihre Kommentare.

if(!empty($_POST['nameg']) && !empty($_POST['amountg'])) 
{ 
    $user="rootdummy"; 
    $pass="password"; 
    $db="practice"; 
    $nameg=$_POST['nameg']; 
    $amountg=$_POST['amountg']; 

    try{ 

     if(!ctype_numeric($amountg) || !ctype_alpha($nameg)){ 
      throw new Exception("This is the exception message!"); 
     } 

     mysql_connect('localhost',$user,$pass) or die("Connection Failed!, " . mysql_error()); 
     $query="INSERT INTO practable (name,given) VALUES('$nameg',$amountg) ON DUPLICATE KEY UPDATE name='$nameg', given=IFNULL(given + $amountg,$amountg)"; 
     mysql_select_db($db) or die("Couldn't connect to Database, " . mysql_error()); 
     mysql_query($query) or die("Couldn't execute query! ". mysql_error()); 

     mysql_close() or die("Couldn't disconnect!"); 
     include("dbclient.php"); 
     echo "<p style='font-weight:bold;text-align:center;'>Information Added!</p>"; 

    } 
    catch (Exception $e){ 
     echo $e->getMessage(); 
    } 
} 
+0

Nur den Code geändert und versucht, es funktioniert! ABER jetzt wirft es die Ausnahme sogar "nameg" enthält Zeichenfolge und "Menge" enthält Ganzzahl. Wirft es jedes Mal! Bin ich auch zu Ausnahmen bereit? :( – tutak

+1

Setze im catch-Block 'var_dump ($ amountg)' und 'var_dump ($ nameg)' und zeige uns die Ausgaben. – MichaelRushton

+0

Das bekomme ich: Dies ist die Ausnahmebotschaft! String (2) "45" string (7) "testone" – tutak

1

Sie fangen es und führen eine Anweisung aus, die praktisch nichts tut.

$e->getMessage(); bekommt es einfach als String und wirft es weg, ohne es zu widerhallen.

Entweder echo es oder erneut oder, wenn Sie nur an diesem Punkt beenden wollten, fangen Sie die Ausnahme überhaupt nicht (Sie können sowohl die Versuchs- als auch die Catch-Blöcke entfernen).

+0

Stimmt, ich habe das gerade hinzugefügt. Ich möchte jedoch, dass das Skript bricht, wenn die Ausnahme ausgelöst wird. Ich habe Pause gemacht; im catch-Block, aber es gibt mir einen Fehler: Schwerwiegender Fehler: Kann 1 Ebene in c: \ nicht brechen/fortsetzen Ist die Art, wie ich Ausnahmen mit Formularvalidierung korrekt verwendet oder sollte/sonst Bedingungen wie die ursprüngliche Überprüfung verwendet werden, um zu sehen, ob das Formular ist leer? – tutak

+0

Ich denke, du willst nur werfen, also habe ich das bearbeitet. Das Werfen ohne zu fangen wird die Ausnahme dazu bringen, nach oben zu blasen, bis sie aufgefangen wird oder irgendeinen set_exception_handler erreicht. – Paul

+0

Nun wollte ich etwas wie das: versuchen {} fangen {echo "wieder bitte eingeben!"; Include ("form.php"); break;} etwas wie das zeigt die Form wieder mit einer Nachricht, werfen ohne zu fangen Die Ausnahme gibt mir einen Ausnahmefehler. – tutak

1

Es tut, aber Sie tun nichts mit Ihrer Ausnahme, außer es zu fangen. Versuchen

echo $e->getMessage()