Home > database >  jQuery AJAX and PHP don't connect to database
jQuery AJAX and PHP don't connect to database

Time:11-02

I have this html code:

<div >
    <button type="button"  data-bs-dismiss="modal">Chiudi</button>
    <button type="submit" id="pulsanteModificaLibro" >Modifica</button>
</div>

and when I click in the second button (#pulsanteModificaLibro) I want to start this code:

$(document).on('click', '#pulsanteModificaLibro', function(event) {
  event.preventDefault();

  var idLibro = this.getAttribute("data-id"); // estraggo l'id del libro

  alert($('#sottotitoloLibroModifica').val());

  var libroMod = new FormData();

  libroMod.append('titolo', $('#titoloLibroModifica').val());
  libroMod.append('sottotitolo', $('#sottotitoloLibroModifica').val());
  libroMod.append('autore', $('#autoreLibroModifica').val());
  libroMod.append('casa', $('#casaLibroModifica').val());
  libroMod.append('anno', $('#annoLibroModifica').val());
  libroMod.append('volume', $('#volumeLibroModifica').val());
  libroMod.append('pagine', $('#pagineLibroModifica').val());
  libroMod.append('genere', $('#genereLibroModifica').val());
  libroMod.append('trama', $('#tramaLibroModifica').val());
  libroMod.append('tipologia', $('#tipologiaLibroModifica').val());
  libroMod.append('sede', $('#sedeLibroModifica').val());
  libroMod.append('scaffale', $('#scaffaleLibroModifica').val());

  $.ajax({
      url: '../PHP/getUser.php?az=modificaSchedaLibroFinale&idLibro='   idLibro,
      data: libroMod,
      processData: false,
      contentType: false,
      type: 'POST',
      dataType: 'json'
    })
    .done(function(data) {
      alert("Andata!!");
    })
    .fail(function(data) {
      alert("Ciao");
    });
});

the ajax function callS a PHP page to take the data from the database. Here the PHP page:

if($_REQUEST['az']=="modificaSchedaLibroFinale") {
    $id=$_GET['idLibro'];
    
    $sql="select prest_lib from libro where id_libro=:id_libro";
    $dbo->query($sql);
    $dbo->bind(":id_libro",$id);
    $book=$dbo->single();
    
    $sql="UPDATE libro SET autore_lib=:autore_lib, titolo_lib=:titolo_lib, sottotitolo_lib=:sottotitolo_lib, volume_lib=:volume_lib, pag_lib=:pag_lib, casa_ed_lib=:casa_ed_lib, anno_lib=:anno_lib, genere_lib=:genere_lib, descr_lib=:descr_lib, tipo_lib=:tipo_lib, prest_lib=:prest_lib, scaffale_lib=:scaffale_lib, edificio_lib=:edificio_lib where id_libro=:id_libro";
    $dbo->query($sql);
    $dbo->bind(":autore_lib", $_POST['autore']);
    $dbo->bind(":titolo_lib", $_POST['titolo']);
    $dbo->bind(":sottotitolo_lib", $_POST['sottotitolo']);
    $dbo->bind(":volume_lib", $_POST['volume']);
    $dbo->bind(":pag_lib", $_POST['pagine']);
    $dbo->bind(":casa_ed_lib", $_POST['casa']);
    $dbo->bind(":anno", $_POST['anno']);
    $dbo->bind(":genere_lib", $_POST['genere']);
    $dbo->bind(":descr_lib", $_POST['trama']);
    $dbo->bind(":tipo_lib", $_POST['tipologia']);
    $dbo->bind(":prest_lib", $book['prest_lib']);
    $dbo->bind(":scaffale_lib", $_POST['scaffale']);
    $dbo->bind(":edificio_lib", $_POST['sede']);
    $dbo->bind("id_libro", $id);
    $dbo->execute();
    
    $sql="select * from libro";
    $dbo->query($sql);
    $row=$dbo->resultset();
    
    
    echo json_encode($row);
    exit();
}

But something is wrong because the AJAX function return is always .fail().

I've create a web site to extract some data from database but something is wrong because of this code fail.

CodePudding user response:

PHP PDO query() executes without placeholders.

$sql="select prest_lib from libro where id_libro=:id_libro";
$dbo->query($sql);
$dbo->bind(":id_libro",$id); // <-- oops
$book=$dbo->single();

Rather use prepare(), then bindParam(), execute(), and fetch():

$sql="select prest_lib from libro where id_libro=:id_libro";
$sth = $dbo->prepare($sql);
$sth->bindParam("id_libro",$id, PDO::PARAM_INT);
$sth->execute();
$book=$sth->fetch();

Or just prepare(), then execute(), and fetch():

$sql="select prest_lib from libro where id_libro=:id_libro";
$sth = $dbo->prepare($sql);
$sth->execute(array(':id_libro' => $id));
$book=$sth->fetch();

And the UPDATE:

$params = array(
    ":autore_lib" => $_POST['autore'], 
    ":titolo_lib" => $_POST['titolo'], 
    ":sottotitolo_lib" => $_POST['sottotitolo'], 
    ":volume_lib" => $_POST['volume'], 
    ":pag_lib" => $_POST['pagine'], 
    ":casa_ed_lib" => $_POST['casa'], 
    ":anno_lib" => $_POST['anno'], 
    ":genere_lib" => $_POST['genere'], 
    ":descr_lib" => $_POST['trama'], 
    ":tipo_lib" => $_POST['tipologia'], 
    ":prest_lib" => $book['prest_lib'], 
    ":scaffale_lib" => $_POST['scaffale'], 
    ":edificio_lib" => $_POST['sede'], 
    "id_libro" => $id
);

$sql="UPDATE libro SET autore_lib=:autore_lib, titolo_lib=:titolo_lib, sottotitolo_lib=:sottotitolo_lib, volume_lib=:volume_lib, pag_lib=:pag_lib, casa_ed_lib=:casa_ed_lib, anno_lib=:anno_lib, genere_lib=:genere_lib, descr_lib=:descr_lib, tipo_lib=:tipo_lib, prest_lib=:prest_lib, scaffale_lib=:scaffale_lib, edificio_lib=:edificio_lib where id_libro=:id_libro";
$sth = $dbo->prepare($sql);
$sth->execute($params);
$row=$sth->fetchAll();

Also, I'm not familiar with resultset(). I use fetchAll() for multiple rows of data:

$row=$dbo->fetchAll();
  • Related