8768 sujets

Développement web côté serveur, CMS

Bonjour l'Alsace et le monde,

J'ai une page web qui fonctionnait bien en PHP7. Le passage a la version 8 s'est faite sans douleur sauf pour la partie concernée par AJAX qui ne marche plus. Enfin, je suppose que l'erreur vient de là mais j'ai peut-être fait une frappe malencontreuse quelque part qui n'a rien à voir avec le changement de version... Les fichiers concernés :

ajax.js
var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject() 
{
  var xmlHttp;
  try
  {
    xmlHttp = new XMLHttpRequest();
  }
  catch (e)
  {
    try
    {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e) { }
  }
  if (!xmlHttp)
    alert("Erreur de création de l'objet XMLHttpRequest.");
  else 
    return xmlHttp;
}

function process()
{
  
  if (xmlHttp)
  {
    try
    {
      name = encodeURIComponent(document.getElementById("ger").value);
      if (name == "") {name = 'x'};
      console.log("name : " + name);
      xmlHttp.open("GET", "ajax.php?name=" + name, true);
      xmlHttp.onreadystatechange = handleRequestStateChange;
      xmlHttp.send(null);
    }
    catch (e)
    {
      alert("Connexion au serveur impossible :\n" + e.toString());
    }
  }
}

function handleRequestStateChange() 
{
  if (xmlHttp.readyState == 4) 
  	 if (xmlHttp.status == 200 || xmlHttp.status == 304) 
         handleServerResponse()
 }

function handleServerResponse()
{
  var xmlResponse = xmlHttp.responseXML; 
  console.log("XML Response : " + xmlHttp.responseXML);
  xmlRoot = xmlResponse.documentElement;  
  kinnigArray = xmlRoot.getElementsByTagName("kinnig");
  var html = "";  
  for (var i=0; i<kinnigArray.length; i++)
  {html += '<a onclick="onKlik(this.textContent, 0)">' + kinnigArray.item(i).firstChild.data + '</a>';}
  var myDiv = document.getElementById("goulakaat");
  myDiv.innerHTML = html;
}


ajax.php
<?php
header('Content-Type: application/xml ; charset = utf-8');
mb_internal_encoding("UTF-8");
//error_reporting(E_ALL);
//ini_set("display_errors", 1);
include ('connect.inc.php');


$dom = new DOMDocument();
$respont = $dom->createElement('respont');
$dom->appendChild($respont);

$name = $_GET['name'];
$name= mysqli_real_escape_string($link, $name);
$kinnigou = mysqli_query($link,"SELECT poz FROM ajaks WHERE poz LIKE  '".$name."%"."' ORDER BY poz LIMIT 20");

while ($linenn = mysqli_fetch_array($kinnigou))
{
$kinnig = $dom->createElement('kinnig');
$encoded=htmlentities ("$linenn['poz']", ENT_QUOTES, 'UTF-8');
$kinnigText = $dom->createTextNode("$encoded"); 
$kinnig->appendChild($kinnigText);
$respont->appendChild($kinnig);
}

$xmlString = $dom->saveXML();

echo $xmlString;
?>


et index.php (extrait) :
<?php
   header( 'content-type: text/html; charset=utf-8' );
   error_reporting(E_ALL);
   ini_set("display_errors", 1);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"><title>ar penefi gourt</title>
<script language="JavaScript">

function non_vide()
{
envoi=MyForm.ger.value;
envoi=envoi.trim();
if (envoi == "")
 { MyForm.ger.value=''; return false;}
 else
 { MyForm.ger.value=envoi; return true;}
}

</script>
<script type="text/javascript" src="ajax.js"></script>
</head>

<body>


<div id="colg">
  <div id="enva">
  <form class="klask" action="" method="post" id="MyForm" onsubmit= "return (non_vide());">
  <input name="ger" id="ger" size="8" type="text" onKeyup="process()" autocomplete="off" autocapitalize="none"/> 
  <input value="" type="submit"></form>
  </div>
  <div id="suggestions">
  </div>
</div>


</body>
</html>

La console me dit :
a écrit :
localhost/test-ajax/ajax.php?name=a 500 (Internal Server Error)
process @ ajax.js:36 (ligne de code : xmlHttp.send(null);)
onkeyup @ (index):27


J'ai beau lire et relire, je ne vois rien... Merci de votre aide
Salut,

la console c'est le coté client, il faudrait regarder coté serveur dans les logs de php.
Le fichier ajax.php doit retourner une erreur quelque part, ce qui fait que coté client tu obtiens null.
Modérateur
Bonjour,

Ton message indique aussi l'événement onkeyup ... , c'est probablement de là que tu appelles ton script ajax avec un passage de paramètres. J'y jetterais un œil Smiley cligne et un console.log().

Cdt
Modifié par gcyrillus (20 Jun 2023 - 13:00)
Merci à tous les deux. L'erreur était définie comme ça dans les logs :
HP Parse error: syntax error, unexpected string content "", expecting "-" or identifier or variable or number in /var/www/html/geriadur php7/ajax.php on line 20, referer: http://localhost/geriadur%20php7/
Comme ça ne m'avançait pas vraiment et que j'étais énervé parce que ça marchait avant, je me suis tourné vers... chatGPT. En deux coups de cuiller à pot, il m'a pondu un code ajax qui fonctionne, mais en utilisant d'autres méthodes..
Je le mettrai en ligne si ça vous intéresse.
Cordialement
Je pense que ton problème venait des "" autour des variables "$linenn['poz']" et "$encoded" .
Ce qui donne:

$encoded=htmlentities ($linenn['poz'], ENT_QUOTES, 'UTF-8');
$kinnigText = $dom->createTextNode($encoded);