8768 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai un souci avec le duo ajax-php. Je suhaite insérer dans une base de données la valeur d'un lien cassé transmise par l'utiliisateur :
var data = 'lien-kaputt=' + document.querySelector('input[name = lien-kaputt]:checked').value;
alert (data);
var xhr = getHttpRequest();
xhr.open('POST', 'traitement.php', true);
xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest');
xhr.send(data);

L'alerte me donne bien :
lien-kaputt=http:/www.unliencassé.fr/

Côté PHP :
<?php
header('application/x-www-form-urlencoded');
if( $_POST){
  if (isset( $_POST['lien-kaputt'])){
   $lienkaputt = $_POST['lien-kaputt'];
   $link= mysqli_connect("localhost", "root", "motdepasse", "nomdelabase");
   if (!$link) {
     echo "Error: Unable to connect to MySQL." . PHP_EOL;
     echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
     echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
     exit;
     }
   $sql=mysqli_query($link,"INSERT INTO liammou_torr (liamm) VALUES ('$lienkaputt')");
 }
}
?>

Et ça ne passe pas : rien n'est inséré dans la base. Pourtant les outils de développement du navigateur me disent que la requête s'est bien passée...
Merci de votre aide !
Modifié par Titen (13 May 2021 - 07:03)
Modérateur
Titen a écrit :
les outils de développement du navigateur me disent que la requête s'est bien passée...


Et l'eau,

ça m'étonnerait puisque ton code JS est faux. D'ailleurs et en complément, j'ai un doute sur ton code de la checkbox. Regarde Dans un premier temps :XMLHttpRequest

Dans ton code php, je ne vois pas à quoi sert ton :

if( $_POST){
....

Modifié par niuxe (13 May 2021 - 07:34)
upload/1620888745-76718-capture.png
niuxe a écrit :
ça m'étonnerait puisque ton code JS est faux.


Si tu peux me dire où ? Je joins une capture d'écran : tout a l'air normal.
J'ai viré le premier if ($_POST) : sans résultat (mais merci de ta remarque).
Je me demande si ce n'est pas le header qui est en cause, mais j'ai essayé plusieurs modifs sans résultat non plus...
Modifié par Titen (13 May 2021 - 12:01)
Après moult tâtonnements infructueux, j'ai eu l'idée de passer par GET plutôt que par POST.
Nouveau code :
var data = '?lien-kaputt=' + document.querySelector('input[name = lien-kaputt]:checked').value;
var xhr = getHttpRequest();
xhr.open('GET', 'traitement.php' + data, true);
xhr.send();

, avec remplacement des $_POST par $_GET dans traitement.php, et... ça _marche_ !

Je ne sais pas où était l'erreur avec POST, mais tant pis, je passe à autre chose. Merci à niuxe de son aide.