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();