afficher les articles d'une autre base

Bonjour,
C’est mon premier développement SPIP et j’ai besoin d’être aiguillé.

J’ai écrit un programme qui affiche des enregistrements d’une table Bota (en fonction de 2 critères donnés par un formulaire), que j’ai crée dans une base gmbvs980887_1krvim.
J’ai donc une page ajax.html et ajax.php qui renvoie le résultat
Hors spip, ça marche.

J’ai tenté de mettre le code html dans un article.
J’ai lu la doc de programmer.spip.net et ça me parait bien compliqué.

Le formulaire s’affiche mais pas le résultat.
Question 1 : dois-je tout convertir en squelette spip ou faire seulement des modifications mineures, même si ce n’est pas très propre ?
Question 2 : comment on fait ensuite appel à ce squelette dans un article ?

Merci de votre aide.

situation actuelle : içi

code html :

<!DOCTYPE HTML>

<html lang="fr">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel = "stylesheet" href = "synonymes.css">
  <script type="text/javascript">
  function Search() 
   {
    genre1=document.getElementById("genre").value;
	espece1=document.getElementById("espece").value;
  if (genre1=="" && espece1=="")
    {
    document.getElementById("txtHint").innerHTML="";
    return;
    }
  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","ajax1.php?q="+genre1+"&e="+espece1,true);
  xmlhttp.send();
  }
  </script>
  </head>
  <body>
  <h2> Recherche des synonymes </h2>
  <p> La recherche s'effectue dans une base de 83545 synonymes</p>
  <form id="monform">
Genre : <input id="genre" type="text"/>&nbsp&nbsp
Espèce : <input id="espece" type="text"/>
<input name="rechercher" type="button" value="Rechercher" onclick="Search()"/>
</form>
   

  <br />
  <div><b>résultats trouvés :</b><br /><br />
      <span id="txtHint"></span>
  </div>
   
  </body>
  </html>

code php :

  <?php
  $genre=$_GET["q"];
  $espece=$_GET["e"];

  //recup
   //$genre = $_POST["titre"];

   $db =  mysqli_connect( $host = 'localhost', $user = 'nom_user', $password = 'password', $database = 'bota', '3307' );
   mysqli_set_charset($db, 'utf8mb4');
   
if ($db -> connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
  exit();
}

// on crée la requête SQL
$result = mysqli_query($db, "SELECT * FROM bota_synonymes where espece LIKE '$espece%' and genre LIKE '$genre%'");

$retour = "";
echo "<table class=\"t1\">";
echo "<tr><th>taxon</th><th>Synonyme</th><th>nom français</th></tr>";
while($donnees = mysqli_fetch_assoc($result))  {
	
	$retour .=  "<tr><td>" . $donnees['Taxon'] . "</td><td>" . $donnees['synonyme'] . " </td><td>" . $donnees['nom_francais'] . "</td> </tr>";
}
//envoi au navigateur
echo $retour;
echo "</table>";

// on ferme la connexion à mysql
$db->close(); 
  ?>

CSS :

table {
border-collapse : collapse;
}
.t1 tbody tr td, .t1 tbody tr th {
border : 1px solid orange;
}
.t1 {
border-spacing : 150px;
}
th, td {
padding-left: 10px;
padding-right: 10px;
}

Il n’y a rien de SPIP dans ton code donc tu devrais donc déjà faire marcher ton code (piste : c’est ajax.php ou ajax1.php ? Et ce fichier existe t il au bon endroit ?) avant de (te) poser la question de comment le convertir en squelette et l’insérer dans un article.

le code fonctionne.
pour preuve il suffit de lancer :
https://gmbvs.fr/squelettes/ajax1.html

désolé, c’est bien ajax1.php

c’est sous SPIP que ça ne marche pas.
J’ai mis ajax1.php et synonymes.css dans le répertoire squelettes.
Même le css n’est pas pris en compte.
Merci de ton aide.

Des erreurs 404 ou autre dans la console / onglet réseau XHR après un clic sur rechercher ?
Si oui c’est possiblement un problème de chemin lors de l’appel au script php.

Cf. cette ligne :

xmlhttp.open("GET","ajax1.php?q="+genre1+"&e="+espece1,true);

Où il faudrait utiliser #CHEMIN{ajax1.php}
Et à combiner avec le filtre |parametre_url pour les query strings.

Mais dans l’absolu ça serait mieux de passer tout ça en formulaire CVT.

Quand SPIP affiche le résultat d’un squelette, son URL est à la racine.
Donc, pour appeler quelque chose depuis le squelette, la balise #CHEMIN (ou son équivalent PHP find_in_path) seront tes amis.

Bonjour,
Ça fonctionne quand on a compris qu’il fallait mettre le chemin depuis la racine du site.

xmlhttp.open(« GET »,« squelettes/ajax1.php ?q= »+genre1+"&e="+espece1,true) ;

reste plus qu’à transformer tout ça avec la syntaxe SPIP, pour poursuivre mon apprentissage.

Merci de votre aide.

Une dernière question : Y a t-il un site, un livre, un formation qui serait basé sur des exercices, des exemples pour progresser pas à pas en programmation SPIP ?

Bonjour,

Tuto pas à pas : pas vraiment.
Mais :

Et il y a des gens qui sont formateurs dans la communauté SPIP…