我是jquery的新手,试图在我的电子邮件输入中添加验证规则。它会检查电子邮件是否在数据库中。 我的html输入我正在尝试添加验证规则。
<input id="email" name="email" type="text" class="easyui-validatebox" validType="email" required="true" >
MY JS
$("#regform").validate();//block below was nested in validate in OP
$('input[name="email"]').rules("add",
{
remote :
{
url: 'checkMaila.php',
async: false,
type: "POST",
data:
{
email: function()
{
return $('input[name="email"]').val()
}
}
}
});
我的PHP
<?php
/ *检查电子邮件是否已注册* /
//使用mysqli连接到db
include 'conn.php';
if(isset($_POST['email']))
{
//op had this line instead of the line below:$maila= $_POST['email']
$maila = $mysqli->real_escape_string($_POST['email']);
//op line changed to one below $result = mysql_query("select * from user where email= '"+$maila+"';");
$sql = "SELECT * FROM user WHERE email = '".$maila."'";
$result = $mysqli->query($sql);
if($result->num_rows == 0){
echo "true";
}
else
{
echo "false";
}
}
else
{
echo "false"; //invalid post var
}
?>
更多信息: 我的内联验证规则可以正常工作。我的js代码在外部js文件中,其中包含使用jquery的其他js函数,它们可以工作。
答案 0 :(得分:0)
您正在将$maila
设置为布尔值(是否设置了$_POST['email']
)。应该是:
$maila = $_POST['email'];
post中的电子邮件数据也应该在sql中执行之前进行验证和转义,这是因为SQL注入。如果我输入10'; DROP TABLE user /*
,则执行的查询类似于:SELECT * FROM user WHERE email = '10'; DROP TABLE user /*'
,您的用户表将从数据库中删除。
要验证它,请使用正则表达式检查它是否为电子邮件地址格式。要转义字符串,请使用real_escape_string()
(http://php.net/manual/en/mysqli.real-escape-string.php)。
您遇到的另一个错误是您尝试使用+
加入字符串,在php中您必须使用.
,所以
$sql = "SELECT * FROM user WHERE email = '"+$maila+"'";
应该是:
$sql = "SELECT * FROM user WHERE email = '".$maila."'";
这里使用的mysql:mysql_query
已弃用,因此应使用PDO或Mysqli代替。
在jQuery中也存在一个问题,规则不应该嵌套在validate中,而应该是这样的:
$("#regform").validate();
$('input[name="email"]').rules("add", {
...
答案 1 :(得分:0)
以下答案适用于早期版本的OP:
https://stackoverflow.com/revisions/13380448/2
您不应将.rules()
嵌套在.validate()
内。在{/ em> .rules()
被调用后,As per documentation,.validate()
也必须出现在某个地方。
http://docs.jquery.com/Plugins/Validation/rules
$(document).ready(function() {
$("#regform").validate();
// .validate(); must appear above .rules()
$('input[name="email"]').rules("add", {
remote : {
url: 'checkMaila.php',
async: false,
type: "POST",
data: {
email: function() {
return $('input[name="email"]').val()
}
}
}
});
});
答案 2 :(得分:0)
提示:在开始使用ajax之前,请确保您的php源工作正常,这样您就可以更轻松地找到指定内容(php | html | js | css)中的错误。
我在你的php代码上看到的第一个重大错误:
$maila = isset($_POST['email']);
你必须将$ maila设置为布尔值true或false,你想要的是
$maila = isset($_POST['email'])?$_POST['email']:'';
第二个错误
$sql = "SELECT * FROM user WHERE email = '"+$maila+"'";
这不是有效的php(查看错误报告)字符串通过点连接。
$sql = "SELECT * FROM user WHERE email = '".$maila."'";
最后但并非最不重要的是,搜索sql-injections