1

我的问题是,当我在我的 jQuery ajax 顶部有一个 on.('click') 时单击提交按钮时,成功工作但不会将信息发送到我的数据库。否则,当我在 jQuery 上使用 on.('submit') 时,ajax 不起作用,但 PHP 可以。

这是我的表格的代码。

<div id="seccion_registro">
<div id="login_error">Campo no valido!</div>
<div id="registro_succes"></div>


            <form id="form2" name="form2" action="usuario.php" method="POST">
                <label for="nombre">Nombre</label>
                <input id="nombre"type="text" class="text" size="20" name="nombre">

                <label for="usuario">Usuario</label>
                <input id="password1" type="text" class="text" size="20" name="usuario">

                <label for="contrasena">Contraseña</label>
                <input id="password1" type="password" class="text" size="20" name="contrasena">

                <label for="confirmar">Confirmar contraseña</label>
                <input id="password2" type="password" class="text" size="20" name="confirmar">

                <label for="email">Email</label>
                <input type="text" class= "text" size="20" name="email">

        <div>
                <input type="submit" class="boton1" value="Regístrate" size="56">
        </div>
 </form>

这是我的jquery ajax 函数,我使用fancybox 来显示表单和成功或错误响应。

$(document).ready(function(){   

$('.boton1').on('click', function(e){


e.preventDefault();

var name = $('#nombre').val();
var password1 = $('#password1').val();
var password2 = $('#password2').val();
var errors = '';

if(name.length < 5 || name == ''){
errors += '<p>tsads</p>'; 
} 




if(errors != ''){    
$("#login_error").show();       
$.fancybox.resize();

//$("#login_succes").hide();

} else {
var datos = $('#form2').serialize();
$.ajax({
    url:'Usuario.php',
    data:'datos',
    type:'POST',
    beforeSend: function(){
          $('#seccion_registro').html('<div id="carga" style="margin:0 auto;width:auto;background-position:center center;"></div>');
        },
    success: function(){
         $('#seccion_registro').html('<p class="text_enhorabuena">Enhorabuena, has sido registrado!</p>');
        $("#registro_succes").show();       
        $.fancybox.resize();
}
 });

 }



 });

最后这是我的 PHP 脚本。

<?php

include 'conexion.php';

$_POST['nombre'];
$_POST['usuario'];
$_POST['contrasena'];
$_POST['email'];

$consulta = "INSERT INTO usuario (Usuario, password, email, nombre ) VALUES ('".$_POST['usuario']."', 
  '".$_POST['contrasena']."', '".$_POST['email']."', '".$_POST['nombre']."')";


if (!mysqli_query($conexion,$consulta))
  {
      die('Error: ' . mysqli_error($conexion));
  }
else{

//Do stuff

};
mysqli_close($conexion);

?>
4

1 回答 1

2

发送请求

看看这个:

<form id="form2" name="form2" action="usuario.php" method="POST">

这样,您就告诉我们的浏览器,当用户单击提交按钮时,将所有表单变量发送到usuario.php. 你有一个完全相同的脚本。

因此,您使用两种方式发送表单数据:HTML 和 Jquery。

我建议您只使用一种方式将数据发送到usuarios.php,也许事情会变得更清楚一些。例如,将表单标签更改为:

<form id="form2" name="form2">

没有方法,也没有动作,因为 jQuery 会处理这些东西。

然后检查是否一切正常。

jQuery

更改$('.boton1').on('click', function(e){

为了$('#form2').on('submit', function(e){

还要检查你发送的东西

查看您的 Ajax 请求:

$.ajax({
    url:'Usuario.php',
    data:'datos',

我认为应该是这样的:

$.ajax({
    url:'Usuario.php',
    data:datos,

(检查datos变量)

Mysql注入

如果一切顺利,下一步就是防止 mysql 注入。我看到你正在使用mysqli,但你没有使用准备好的语句!因此,您有可能对 mysql 注入攻击持开放态度。

更改准备好的语句:

/* crear una sentencia preparada */
$consulta = "INSERT INTO usuario (Usuario, password, email, nombre ) VALUES ('?','?', '?', '?')";

if ($stmt = mysqli_prepare($link, $consulta)) {
    /* ligar parámetros para marcadores */
mysqli_stmt_bind_param($stmt, "ssss", $_POST['usuario'],$_POST['contrasena'],$_POST['email'],$_POST['nombre']);

/* ejecutar la consulta */
mysqli_stmt_execute($stmt);
}

要查看有关准备好的语句的更多信息:http: //es1.php.net/manual/en/mysqli.prepare.php

于 2013-05-30T15:12:51.593 回答