需要一些SQL的帮助

时间:2009-05-04 10:25:11

标签: php sql

<?php

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

$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);

mysql_query("INSERT INTO accounts (email, password) VALUES ('$email', '$password')");

}

?>


<h1>Create Account</h1>

<form action="" method="post">
<table cellspacing="3">

<tr>
 <td valign="top">E-mail address:</td>
 <td><input type="text" name="email" size="28"></td>
</tr>

<tr>
 <td valign="top">Password:</td>
 <td><input type="text" name="password" size="28"></td>
</tr>

<tr>
<td colspan="2" align="center">
  <input type="submit" value="Submit">
</td>
</tr>

</table>
</form>

如何阻止人们进入空格并插入空条目? :/ 您是否看到任何其他潜在威胁?

感谢。 /新手

5 个答案:

答案 0 :(得分:2)

if(!empty($_POST['email']) && !empty($_POST['password'])){
  $email = trim($_POST['email']); // Remove trailing and leading spaces
  $password = trim($_POST['password']); 
  if( $email != "" && $password != ""){
    $email = mysql_real_escape_string($email);
    $password = mysql_real_escape_string($password);
    mysql_query("INSERT INTO accounts (email, password) VALUES ('$email', '$password')");
  } else {
    //DISPLAY ERROR MSG
  }
}

答案 1 :(得分:0)

您应该在调用任何SQL之前对字段进行验证,以防止不需要的条目和SQL注入。

您可能还想对密码长度/强度,电子邮件上的正则表达式等进行一些检查。

现在,在您的代码中,有人可以输入任何内容。

另外,您是否在数据库方面使用唯一的电子邮件/用户名约束处理duplciate条目?

编辑 - 看起来您可能已经使用mysql_real_escape_string

覆盖了SQL注入

答案 2 :(得分:0)

您可以修剪这些值并检查空字符串,然后向用户询问真实的电子邮件地址。您还可以使用正则表达式作为某些验证的一部分。最后,我不确定如何使用PHP实现此目的,但您可以参数化SQL。

答案 3 :(得分:0)

你应该考虑可用性和安全性。

可用性:添加javascript-validators,当用户以错误的格式编写电子邮件等时,将为用户显示一些工具提示。

为了安全起见:你应该在执行insert-query之前验证数据,验证器可以和js-validators相同(但'smart'用户可以简单地在浏览器中禁用javascript)

答案 4 :(得分:-1)

正如schooner所说,你应该在调用sql查询之前验证字段。我认为保留具有用于验证字段的常用函数的文件是一种很好的做法,因此您可以在代码中多次重用此函数。可以使用常规表达式进行此验证。我给你留了一个例子。

function checkEmail($email) 
{
  if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])
               *@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",
               $email)){

    return true;
  }
  return false;
}

另外......如果您需要验证很多输入条目,也许您会对在php中搜索开源验证库感兴趣。