Cómo insertar en la base de datos mediante ajax en php?

He formulario html con tres valores, fname,lname,la edad. Quiero enviar en el lado del servidor php archivo e insertar en la base de datos.

Mi formulario html es como este:

<html>
<head>
<script>
function insert(fname,lname,age)
{

if (window.XMLHttpRequest)
  {//code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {//code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }

xmlhttp.open("GET","ajax_db_php.php?fname=fname&lname=lname&age=age",true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<table>

<tr><td>First Name : </td><td> <input type="text" fname="fname"/> </td> </tr>
<tr><td>Last Name : </td><td> <input type="text" fname="lname"/> </td> </tr>
<tr><td>City : </td><td> <input type="text" fname="age"/> </td> </tr>

<input type="submit" onclick="insert(fname,lname,age)">

</table>
</form>
</body>
</html>

Que la he usado ajax no debe cargar toda la página, pero cuando hago clic en el botón enviar que se cargue toda la página. por qué?
Y la página php que recibe los valores y los inserte en la base de datos es:

<html>
<body>

<?php

$fname=$_GET['fname'];
$lname=$_GET['lname'];
$age=$_GET['age'];

//echo "firstname : " $fname;

$con=mysqli_connect('127.0.0.1:3306' ,'root','root','my_db');
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


$sql="INSERT INTO table1 (fname, lname, age)
VALUES
('$_POST[fname]','$_POST[lname]','$_POST[age]')";

$result=mysql_query($sql);

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";
mysqli_close($con);


?>

</body>
</html>

Cuando hago clic en el botón de enviar no muestra nada, no hay error y no hay ninguna actualización en la base de datos también.

InformationsquelleAutor | 2013-06-16

2 Kommentare

  1. 0

    Cambio como dijo Nikola
    entonces
    Cambio en HTML

    input type="submit" 

    a

    input type="button"

    Esto no va a volver a cargar la página.
    Entonces
    Eliminar por debajo de las etiquetas de PHP

    <html>
    <body>
    </html>
    </body>

    Voy a recomendar el uso de jQuery para hacer llamadas ajax.

    Actualización de cómo utilizar ajax y serializar:

    Este es test.php

    <html>
    <head>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js" ></script>
    <script>
    $(document).ready(function(){
        $("form").on('submit',function(event){
        event.preventDefault();
            alert("Hello");
            data = $(this).serialize();
    
            $.ajax({
            type: "GET",
            url: "test2.php",
            data: data
            }).done(function( msg ) {
            alert( "Data Saved: " + msg );
            });
        });
    });
    </script>
    </head>
    <body>
    <form>
    <table>
    
    <tr><td>First Name : </td><td> <input type="text" name="fname"/> </td> </tr>
    <tr><td>Last Name : </td><td> <input type="text" name="lname"/> </td> </tr>
    <tr><td>City : </td><td> <input type="text" name="age"/> </td> </tr>
    
    <input type="submit" value="Submit" />
    
    </table>
    </form>
    </body>
    </html>

    este es test2.php

    <?php
    if($_GET)
    {
    $fname=$_GET['fname'];
    $lname=$_GET['lname'];
    $age=$_GET['age'];
    
    echo "firstname : ".$fname;
    }
    ?>
    • Vivek: Este no haga ningún cambio! Mismo problema todavía. Reloadin problema resuelto, pero el principal problema todavía!
    • creo que el cambio esta línea xmlhttp.open(«GET»,»ajax_db_php.php?fname=fname&lname=lname&edad=edad»,true); como xmlhttp.open(«GET»,»ajax_db_php.php?fname=»+fname+»&lname=»+lname+»&edad=»+edad+»,true);
    • el código parece estar bien, ¿estás seguro de ajax se realiza una llamada al servidor? el uso de jquery para hacer llamadas ajax. Ver aquí api.jquery.com/jQuery.ajax
    • Soy nuevo en php y ajax, no sé exactamente que el código es correcto o no!
    • ok a esperar voy a actualizar mi respuesta
    • compruebe el código actualizado tiene dos archivos test.php y test2.php
    • Vivek Muthal: Cuando ejecuto esta muestra hola alerta, el código deja de funcionar después de $ajax bloque de inicio! Y cómo es que la tienda fname,lname,la edad en la base de datos? No hemos especificado en código actualizado!
    • sí, no he escrito código de base de datos. Es la voluntad de alerta «Hola», luego llamada ajax se hace, a continuación, se enviará una alerta «fname» causa en php estoy haciendo eco de lo fname. Su ajax no funciona pruebe con otro navegador. el código anterior trabajo está bien en mi final.
    • Sí, problema resuelto!
    • El uso de un presente era buena idea, Y el otro problema era que yo era la mezcla de mysql y mysqli. Acabo de utilizar mysqli, a continuación, comenzó a trabajar currectly!

  2. 1

    Establece $fname, $lname y $age correctamente, pero nunca se uso, en lugar de que el uso de $_POST variables que no existen.

    Lugar de
    ('$_POST[fname]','$_POST[lname]','$_POST[age]')";

    debe utilizar el $_GET variables por ejemplo,

    ('$fname','$lname','$age')";


    También me gustaría sugerir que usted pueda escapar de las cuerdas cuando se añade a la base de datos. Una posible solución puede ser Declaraciones preparadas.

    • Nikola: he actualizado es : $sql=»INSERT INTO tabla1 (fname, lname, edad) VALUES (‘$_GET[fname]’,’$_GET[lname]’,’$_GET[edad]’)»; Pero no cambio!

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea