Page 1 sur 2

Responsetext renvoie le script et pas le traitement

Posté : 01 oct. 2008, 22:19
par fitz7689
Bonjour,

je débute totalement en php et en ajax (oui je cumule). J'ai créé un fichier nommé : PHP_Jour_Fermeture.php comme suit :
<?php
  $liendb = mysql_connect("localhost", "login", "password");
  mysql_select_db("Planning");
  $sql = "SELECT * FROM T_Fermeture";
  $resultat = mysql_query ($sql);
  echo json_encode($resultat);
?>
Le script appelant cette page est le suivant :
function cherche_page_jour(Lobjet){

  Lerang=parseInt(Lobjet.id.replace('Case', ''));
  var xhr = null;
  if(window.XMLHttpRequest){ // Firefox
    xhr = new XMLHttpRequest();
  }
  else if(window.ActiveXObject){ // Internet Explorer
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else {
    alert("Votre navigateur ne prend pas en charge XmlHttpRequest");
  }

  xhr.open("GET", "PHP_Jours_Fermeture.php", true);
  xhr.send(null);
  //xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

  resultat=Ajax_reussi(xhr);
  alert(xhr.responseText);
}

function Ajax_reussi(XHR){
  XHR.onreadystate=alert(XHR.readyState);
}
Le ResponseText me renvoie... le script PHP sans traitement. Je pense que j'oublie un point fondamental et évident mais je ne trouve pas lequel. Quelqu'un a une idée ?
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 01 oct. 2008, 23:17
par Berzemus
Tu as installé un serveur ? Sans serveur, le php n'est pas interpreté..

Easyphp ou wampserver sont des solutions pour un environnement de dev sous windows (mais jamais de production !!)

Posté : 02 oct. 2008, 12:57
par fitz7689
J'ai installé un serveur Lamp. A priori tout fonctionne, phpmyadmin m'a permis de créer mes tables. Est-ce qu'un détail m'aurait échappé sur ce point ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 02 oct. 2008, 13:34
par Berzemus
Comment accèdes-tu à ta page (l'url) ?

A travers ton adresse ip locale (localhost ou 127.0.0.1) ou par fichier (file:\\) ?

Posté : 02 oct. 2008, 16:18
par fitz7689
J'accède à la page par fichier. Je n'avais pas songé à placer cette page dans le répertoire \www\, penses-tu que le problème vient de là ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 02 oct. 2008, 17:20
par Berzemus
penses-tu que le problème vient de là ?
J'en suis sur. à 15.10^381749 %.

Si tu ne passes par par le serveur (en utilisant localhost ou 127.0.0.1), mais par le système de fichiers, tu n'utilises pas le serveur, et donc ton script n'est pas interprété.

Le serveur est à l'écoute sur le port 80. En rentrant l'adresse locale (127.0.0.1 ou localhost), le navigateur demande a ton ordi s'il y a un serveur ou l'autre de présent, et lui demande de servir son contenu.

En passant par les fichiers, ton navigateur va simplement lire le contenu du fichier, et c'est ce qu'il fait.

Donc, place tes fichiers dans le répertoire www, et utilises ton serveur local. :wink:

Posté : 02 oct. 2008, 21:14
par fitz7689
heuuuu... peut-être y a-t-il un autre problème en même temps alors...
Bon j'ai modifié le code histoire de simplifier au maximum et réduire les sources possibles de problème. Voici la dernière version :

Code : Tout sélectionner

var xhr = null; if(window.XMLHttpRequest){ // Firefox xhr = new XMLHttpRequest(); } else if(window.ActiveXObject){ // Internet Explorer xhr = new ActiveXObject("Microsoft.XMLHTTP"); } else { alert("Votre navigateur ne prend pas en charge XmlHttpRequest"); } resultat=8; xhr.open("GET", "PHP_Jours_Fermeture.php", true); xhr.send(null); resultat+=xhr.readyState; xhr.onreadystate=function(){ alert(xhr.readystate); } //xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); alert(xhr.responseText);


Le script appelé est :

<?php

$link = mysql_connect('localhost', 'root', 'tsstsstss') or die("Impossible de se connecter : ".mysql_error());
mysql_select_db("Planning");
if(!$link) {
die('Impossible de se connecter : ' . mysql_error());
}
$sql = "SELECT * FROM 'T_Fermeture' LIMIT 0 , 30 ";
$resultat = mysql_query ($sql);
echo "bidibule" /*json_encode($resultat);*/
?>
Et il ne me renvoie... rien. Est-il possible qu'un conflit passé avec mon ordinateur soit à l'origine du problème ? Dois-je prendre le temps de parler davantage avec lui ? Lui exprimer mes sentiments, lui expliquer que s'il ne me sort pas une pitite fenêtre comme je lui ai demandé je vais être contraint de passer sa toute mignonne carte graphique dans un adorable grille pain puis de plier en quatre sa rutilente carte mère pour qu'elle rentre sans difficulté dans la poubelle ? C'est que c'est sensible ces machines...

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 02 oct. 2008, 21:19
par jojolapine
et si tu vas directement sur le script?
(http://localhost/chemin/vers/PHP_Jours_Fermeture.php)
ça donne quoi?

Posté : 02 oct. 2008, 23:01
par Berzemus
hmm.. peut-être que le problème se situe, comme dans la majorité des cas, quelque part entre la chaise et l'écran.. :wink:

Posté : 03 oct. 2008, 00:01
par fitz7689
Un accès direct au fichier me donne le message prévu ("bidibulle"). Par contre, dès que j'essaie la conversion du résultat de la requête au format json j'obtiens un peu moins que pas grand chose.

Posté : 03 oct. 2008, 09:36
par Berzemus
Au fait, maintenant que je scrute un peu plus loin.

ça:
$resultat = mysql_query ($sql); 
ça marche pas. Essaie un echo sur $résultat, tu verras. C'est un pointeur vers un résultat, pas un résultat en tant que tel.

regarde la doc de fonctions telles que mysql_fetch_assoc() et associés.

Posté : 04 oct. 2008, 16:31
par fitz7689
Bonjour,

voici les dernières nouvelles du front. Suivant ton conseil je me suis documenté. Après avoir enfouie ma tête dans un sac en papier pour masquer ma honte au reste du monde, je me suis documenté sur mysql_fetch_array. J'ai alors réécrit le script php comme suit :
<?php

  $link = mysql_connect('localhost', 'root', 'tsstsstss');
  mysql_select_db("Planning");
  $sql = "SELECT * FROM 'T_Fermeture' LIMIT 0 , 30 ";
  $resultat = mysql_query ($sql);
  for($i=0;$i<mysql_num_rows($resultat);$i++){
	$tab= mysql_fetch_array($resultat);
  }
  echo $tab[0];
?>
La console d'erreur de firefox me retourne : "aucun élément trouvé" en surlignant vers "?<" lorsque je veux vérifier la source. j'ai également essayé avec $tab[1]. J'ai revérifié que la table comportait des champs, contrôlé autant que je pouvais la syntaxe, placé des cierges autours de l'écran, récité des incantations, changé 7 fois de religions, sacrifié un poulet et lancé trois dés six pour réduire le PV de l'ordi. [/php]

Posté : 07 oct. 2008, 09:26
par fitz7689
fichtre, c'est si grave que ça docteur. Ce silence ne me dit rien qui vaille. Dois-je préparer des funérailles ?

Posté : 07 oct. 2008, 10:28
par Berzemus
Lors d'un pèlerinage en Alaska, ou un moine tibétain m'a enseigné quelque particularités du langage SQL, j'ai aussi du mettre ma tête dans un sac en papier. C'était plutôt son conseil pour éviter de se mouiller les cheveux, mais le principe était le même. D'autant que ça marchait pas. Un sac en papier sous une chute d'eau, ça craint.

En changeant de religion, tu aurais pu t'apercevoir de quelques aspects persistants, a travers les religions et les ages. C'était un savoir inquantifiable mais absolu, le cœur de toute croyance, qui te poursuivait à travers les poulets, les cierges et des incantations. C'était la parole de Michael Widenius lui-même qui tentait de venir à toi. Il à échoué, mais me voilà.

Regarde bien ta requête:

Code : Tout sélectionner

SELECT * FROM 'T_Fermeture' LIMIT 0 , 30
L'as-tu essayé sous phpmyadmin ? As-tu fais un dump des résultats (avec print_r plutôt qu'avec echo) ? (il s'agit de quelques trucs pour voir vraiment ce qui se passe dans le code. C'est un bon réflexe, car souvent, l'erreur est si insidieuse que la seule façon de le trouver c'est de rendre le code très bavard).

En fait, l'apostrophe ' délimite un texte dans une requête. SQL interprète donc T_Fermeture comme du texte, plutôt que comme le nom d'une table. Pour délimiter le nom d'une table (qui n'est utile que si, pour des raisons historiques, les noms de tables contiennent des caractères exotiques ou sont des mots clés du langage SQL), on utilise l'accent ` (grave ou aigu, sacrifie un âne le jour ou la lune apparaitra trois fois entre 12H et 5h35 pour connaitre la réponse).

Donc, ta requête devrait plutôt ressembler à ceci:

Code : Tout sélectionner

SELECT * FROM `T_Fermeture` LIMIT 0 , 30

Posté : 07 oct. 2008, 12:43
par sadeq
Le code php doit être :
<?php
// début de connexion
  $link = mysql_connect('localhost', 'root', 'tsstsstss') or die("Connexion non établie");
  mysql_select_db("Planning", $link) or die("Base de données non ouverte");
  $sql = "SELECT * FROM T_Fermeture LIMIT 0,30";
  $resultat = mysql_query ($sql, $link) or die("Erreur de requête");
  $tab = array();
  // si il y a résultat non vide
  if ($resultat && mysql_num_rows($resultat) >0){
       // parcourir le résultat pour en extraire les enregistrements (lignes)
       while ($row = mysql_fetch_array($resultat)){
           // dans cet exemple, on stocke l'enregistrement lu dans un tableau $tab
           $tab[] = $row;
       }
       // affiche tout le tableau $tab
       print_r($tab);
  }
  // sinon : le résultat est vide
  else echo "Réponse vide!";

// fin de connexion
mysql_close($link);
?>