2011-11-18 87 views
-2

通常我使用trim() PHP函数来检查数据是否为空。另外对于MySQL我使用mysql_real_escape_string()。这是否够用,还是我需要执行额外的检查?

+0

**快速提示:**如果在trim()之前检查空白,您仍可以在数据库中以空值结束。想象一下,如果发送的数据只包含一个或多个不是“空”的空间,而是在修剪之后。的 – kapa

+0

可能重复的[Kohana的3:验证模型的示例](http://stackoverflow.com/questions/2462201/kohana-3-example-of-model-with-validation) - 你具有标记接力和Kohana中,我猜猜这就是你要找的。 – hakre

回答

3

要检查数据是否为“空”,可以使用empty()

是的,为了逃避你使用MySQL的mysql_real_escape_string()的数据。默认情况下,trim()用于修剪尾随和前导空白(如果没有附加参数使用)。

是否很难检查手册每个功能的作用?

1

我经常这样做:

$foo = isset($_POST['bar']) ? trim($_POST['bar']) : ''; 
if (!empty($foo)) 
    $db->query("UPDATE table SET foo = '".mysql_real_escape_string($foo)."'"); 
0
if (!empty($_POST['data']) && other controls) { 
    // Success 
    $data = mysql_real_escape_string($data) 
    $sql = "SELECT * FROM users WHERE data = '$data'"; 
    mysql_query($sql); 
} 
0

我倾向于使用isset($ _ POST [ '键1'],$ _ POST [ '键2'],$ _ POST [ 'keyn'])作为确定表单是否已提交所有必需数据的起点,以及诸如$ _SERVER ['REQUEST_METHOD'],$ _SERVER ['SERVER_PORT'],$ _SERVER ['REQUEST_URI']等测试项目。修剪不是有害的,但我只是用preg_match($ needle,$ haystackenter)去做颈静脉,并且使正则表达式非贪婪和非缓冲区捕获。总之,为什么条件输入,当你可以只是使测试失败?

语言结构empty()可以工作,但是如果该值与您正在查找的模式不匹配,它真的很重要吗?对于表演,谁可以说是否有人复制并粘贴了牛津英语词典,在这两种情况下都会发生什么。

function ValidatePostKeyAndValue($input, $pattern, $length) 
{ 
    if(isset($input) && 
      preg_match($pattern, $input) && 
      ctype_print($input) && 
      strlen($input) <= $length && 
      is_string($input)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

} 

根据具体情况我可以做更多或更少。布尔函数是你的朋友。

至于你的$ data变量,我认为这将是明智的考虑,如果通配符_和%可能会出现在你的数据。如果是这样,可以使用addcslashes()来定位字符串中的那些字符。不过,移至mysqli()将使您不必使用mysql_select_db()。 mysqli_connect()为你做到这一点!很值得转换。

相关问题