为什么这个代码显示异常行为?(未提交表格)
Why is this code showing anomalous behaviour? (form not submitted)
我正在尝试使用PHP和Ajax提交表单。但问题是,有时它插入一个值,有时插入2,有时插入全部,而现在它什么都不插入。为什么会这样?我该如何更正?
这是我的代码:Ajax
$(document).ready(function(){
$("button").click(function(){
$.ajax({
url: "submitform.php",
type: "POST",
data: $("form").serialize(),
success: function(data){
alert("well");
},
error: function(){
alert("Error");
}
});
});
});
HTML
<form id="signupform" name="form1" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input type="text" name="name" placeholder="Enter your name" required /></td>
<td rowspan="3"><div class="propic"><img id="imgid" src="images/dp.png" /></div>
<input id="imgInput" type="file" name="image"/></td>
</tr>
<tr>
<td><input type="text" name="username" placeholder="Enter username" required /></td>
</tr>
<tr>
<td><input id="digits" type="text" name="phone" maxlength="10" placeholder="Enter your phone no." required /></td>
</tr>
<tr>
<td><input type="password" name="password" maxlength="12" placeholder="Enter password" required /></td>
<td><input id="button" type="submit" name="submit" value="Sign Up" /></td>
</tr>
</table>
</form>
PHP
<?php
$conn=mysqli_connect("localhost", "root", "", "winkcage");
//$im=$_SESSION["pathsession"];
$nam=""; $usernam=""; $phon=""; $pass="";
$nam=$_POST["name"];
$usernam=$_POST["username"];
$phon=$_POST["phone"];
$pass=$_POST["password"];
$signquery="INSERT INTO signup(name, username, phone, password) VALUES('$nam', '$usernam', '$phon', '$pass')";
$signqueryrun=mysqli_query($conn, $signquery);
?>
注意:我现在不想插入图像值。这个问题解决后我会插入它。
您可能输入了一个'
引号,它终止了您的sql语句。这称为sql注入。为了防止sql注入,可以使用pdo-prepared语句。你还需要散列密码,以防止人们在访问你的数据库时窃取密码。哈希密码是一种易于检查的单向加密。
$pdo = new PDO("mysql:host=$db_host;dbname=$DB_name", $user, $pass);
$sql = "INSERT INTO signup(name, username, phone, password) VALUES(':name', ':username', ':phone', ':pass')";
if ($con = $pdo->prepare($sql)) {
$con->execute([
':name' => $_POST["name"],
':username' => $_POST["username"],
':phone' => $_POST["username"],
':pass' => $_POST["password"]
]);
}
就html和javascript而言。使用jquerys的.submit()
函数捕获提交的表单。
$('form').submit(function(e){
e.preventDefault();
$.post('submit.php',$(this).serialize(),function(response){
alert('complete');
}).error(function(){
alert('wrong');
});
});
这确保了比任何提交事件都能触发ajax。
由于您使用的表单带有提交按钮,当您单击该按钮时,它将提交表单。您可能在AJAX操作和表单提交之间存在冲突。尝试阻止按钮上的默认操作点击,看看它是否按如下方式工作:
$(document).ready(function(){
$("#button").click(function(event){
if($("form").get()[0].checkValidity()){
$.ajax({
url: "submitform.php",
type: "POST",
data: $("form").serialize(),
success: function(data){
alert("well");
},
error: function(){
alert("Error");
}
});
});
}
event.preventDefault();
});
您将onclick分配给一个按钮元素,但页面上没有按钮元素,您的按钮是一个输入元素。把它改成一个按钮,它可能会工作。我个人建议使用id,而不是元素类型,我认为这会让事情变得更清楚,并允许您在不破坏代码的情况下拥有多个相同类型的元素。
更改
$("button").click(function(){
至
$("#button").click(function(){
和
data: $("form").serialize(),
至
data: $("#signupform").serialize(),
相关文章:
- 是否可以使用动作=“;someFunction()"提交表格时
- 在提交过程中使用同步确认灯箱提交表格
- 在提交未提交表格时替换Div
- 返回假后提交表格
- NG模型在提交表格时未注册
- 提交表格前检查条款和条件
- 可以'不要在express/angular应用程序上提交表格
- return false dos't禁止提交表格
- 使用Greasemonkey提交表格
- 使用AngularJS在视图中预先填写并提交表格
- 在提交表格之前,请检查是否填写了重述2
- 提交表格后留下的表格
- 避免在按下“”时提交表格;输入“;按钮
- 在提交表格时IE8赢得了't将来自输入的属性以外的属性添加到请求中
- 为什么这个代码显示异常行为?(未提交表格)
- 为什么这不足以防止重复提交表格
- 点击链接提交表格并发送到多个电子邮件 ID
- Phonegap Camera API (iOS) 提交表格
- 验证通过后提交表格
- 提交表格后在同一页面上统计