2012-05-26 126 views
0

我有一个关于从表单验证PHP变量的问题。服务器端验证 - 如何启动?

例如: 我将表单中的变量发布到PHP文件。

$event_name = mysql_real_escape_string($_POST['event-name']); 
if ($event_name=='' || $event_name==null) 
{ 
    /* send error message */ 
} 

我使用了上述代码,并且$ _POST ['event-name']为空时出现错误。 会不会有什么问题/后果,如果我使用它像:

$event_name = $_POST['event-name']; 
if (mysql_real_escape_string($event_name)=='' || mysql_real_escape_string($event_name)==null) 
{ 
    /* send error message */ 
} 

还是我做错了?

感谢

+3

你应该逃避字符串*后*验证。最好的方法是在插入数据库之前进行转义 - 您不希望在代码的其他部分使用转义数据。 –

回答

1

的PHP isset方法来查看是否有东西在后。建议使用以下方法:

if (!isset($_POST['event-name']) || $_POST['event-name'] == "") 
{ 
    /* send error message */ 
} 
else 
    $event_name = $_POST['event-name']; 

只在发出MySQL查询点使用mysql_real_escape_string

+0

谢谢!我会用这个。 – RRikesh

0

如果启用了E_STRICT错误报告,那么您可能有错误“未定义索引事件名称”。

所以最好检查变量不是empty

if (!empty($_POST['event-name'])) { 
    $event_name = mysql_real_escape_string ($_POST['event-name']); //espace variables after validation. 
} 
+0

要注意,如果您将&event-name = 0作为查询参数,则空值为true。空函数是一个虚假的朋友和“0”。 cf http://www.php.net/manual/fr/function.empty.php –

+0

是的你是对的,也许在这里需要这种检查。 –

0

我认为更好的办法做到这一点:

$clean = array(); 

if(isset($_POST['event-name']) && ctype_alpha($_POST['event-name']) && trim($_POST['event-name']) != "") 
{ 
    $clean['event-name'] = mysql_real_escape_string($_POST['event-name']); 
} 
else 
{ 
    // process error message 
}