注册脚本提示

时间:2009-07-31 20:00:28

标签: php sql registration

Register.php

if (isset($_POST['submit'])) {

$username = mysql_real_escape_string(trim($_POST['username']));    
$email = mysql_real_escape_string(trim($_POST['email']));
$passwd = mysql_real_escape_string(trim($_POST['passwd']));

if (empty($username)) {
   die ('You need to enter a username.');
}...... else insert



}

?>

使用mysql_real_escape_string并修剪这样好吗?或者是一种确保没有人可以注册空白用户名等的方法

由于

4 个答案:

答案 0 :(得分:2)

我发现该代码没有问题。通常我会首先修剪(),然后执行所需的任何验证,然后执行mysql_escape()(保存mysql_escape直到最后一刻。如果你要做的唯一验证是检查空字符串,那么我认为没有问题。

答案 1 :(得分:1)

是和否。

“是”部分

清理SQL注入的用户输入是很好的。由于它不会影响空字符串,因此使用此方法不会产生任何误报或其他副作用。

“不”部分

从技术上讲,您不希望过早过滤数据。我会先修剪,检查值,然后在知道数据有效时将其转义为查询。

if ( isset( $_POST['submit'] ) )
{
  $username = trim( $_POST['username'] );

  if ( '' == $username )
  {
    die ( 'You need to enter a username.' );
  } else {
    mysql_query( sprintf(
        "INSERT INTO table (username) VALUES('%s')"
      , mysql_real_escape_string( $username )
    ) );
  }
}

答案 2 :(得分:0)

当您检查0长度字符串时,使用 strlen()而不是 empty()为空函数... < / p>

  

考虑以下事项   是空的:

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

如您所见,并非所有这些值都是空字符串。

答案 3 :(得分:0)

你应该同时使用两者。我还建议使用filter_var,因为它也会清理数据。还有许多其他事情需要考虑。

  • 用户名应该只是字母和数字
  • 电子邮件应采用正确的格式
  • 你应该修剪()一切