我希望有人能帮我写一个小脚本,我的主要目标是让注册页面尽可能安全,我认为最好的开始是使用 mysql_real_escape_string 但它不会保留我只是保留在第 1 行出现错误,所以这是我的代码:
<?php
if(isset($_POST['submit'])){
if($_POST['username'] == "" || $_POST['password'] == ""){
header("Location: tryagain.php");
exit;
}else{
mysql_connect("localhost", "root", "Root") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$username = $_POST['username'];
$password = $_POST['password'];
$sql = sprintf("INSERT into login(id,username,password) values('','%s','%s'", mysql_real_escape_string($username), mysql_real_escape_string($password));
$result = mysql_query($sql) or die(mysql_error()) ;
echo "Congratulations it worked woooo";
}
}
?>
这是 html
<form method="post" action="sql.php">
<table>
<tr>
<td>
<input type="text" name="username"/>
</td>
<td>
<input type="text" name="password"/>
</td>
<td>
<input type="submit" name="submit" value="submit">
</td>
</tr>
</table>
</form>
如果我将 $sql 语句更改为此,代码可以正常工作
$sql = "INSERT into login(id,username,password) values('','$username','$password')";
谁能看出我做错了什么:当我调整它以使用真正的转义登录时,它工作得很好。
我还可以使用哪些其他方法来验证数据?我计划让 if 语句只检查数字和字母,并防止任何特殊字符一起出现。谢谢。
附带说明,是的,我知道应该使用 mysqli 和 pdo 而不是 mysql,遗憾的是他们不使用它们。
最佳答案
您的 SQL
语句已损坏:
INSERT into login(id,username,password) values('','%s','%s'
应该是
INSERT into login(id,username,password) values('','%s','%s')
关于php - 注册页面上的 mysql_real_escape_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640212/