2012-03-24 88 views
0

我想验证我的php表单使用异常,但不知何故它不起作用。如果用户在“nameg”中输入任何不是字符串的字符,并在“amountg”中输入任何非整数的字符,都会抛出异常。应例外,即使在这种情况下使用:php脚本不会抛出异常

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

    try{ 
     if(!is_int($amountg) || !is_string($nameg)){ 
      throw new Exception("This is the exception message!"); 
     } 
    } 
    catch (Exception $e){ 
     $e->getMessage(); 
    } 

    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>"; 
} 
+0

您的代码很容易受到SQL注入和mysql_ *轻轻地弃用。 – Paul 2012-03-24 14:07:36

+0

你作为'$ _POST ['amountg']'发布了什么,值? – safarov 2012-03-24 14:08:38

+0

是$ _POST ['amountg']是用户通过表单输入的值。 – tutak 2012-03-24 14:15:29

回答

3

想必你想输出异常?这样做:

echo $e->getMessage();

编辑:在回答您的评论以后就结束脚本,就把MySQL的查询try块。

编辑2:响应您的意见更改验证。

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

只需修改代码并尝试,它确实有效!但现在它会抛出异常,即使“nameg”包含字符串,“amountg”包含整数。每次都会抛出!我是否喜欢例外? ( – tutak 2012-03-24 14:32:59

+1

)在catch块中,放入'var_dump($ amountg)'和'var_dump($ nameg)'并向我们显示输出。 – MichaelRushton 2012-03-24 14:34:58

+0

这就是我得到的:这是异常消息!string(2)“45”字符串(7)“testone” – tutak 2012-03-24 14:37:46

1

你正在追赶它,表演的是几乎没有任何的声明。

$e->getMessage();只是将它作为一个字符串并将其抛出而不回显它。

要么呼应,或重新抛出或者,如果你只是想在这一点上退出,不抓在所有异常(你可以同时删除try和catch块)。

+0

的确,我刚刚补充说。不过,如果引发异常,我希望脚本中断。我补充了休息;在catch块,但它给了我一个错误:致命错误:无法打破/继续1级在c:\ 是我用表单验证异常的方式正确或应该如果/其他条件使用像初始检查,看看是否表单是空的? – tutak 2012-03-24 14:12:37

+0

我想你只是想抛出,所以我编辑了它。抛出没有捕获将导致异常向上冒泡直到它被捕获或它到达任何set_exception_handler。 – Paul 2012-03-24 14:16:48

+0

嗯,我想这样的事情: 尝试{} catch {echo“enter again!”; include(“form.php”); break;} 类似的东西显示窗体再次带有消息,抛出没有捕获该例外给我一个异常错误。 – tutak 2012-03-24 14:20:55

1

它的确如此,但除了捕获它外,你对你的异常什么都不做。

尝试

echo $e->getMessage()