Responsetext renvoie le script et pas le traitement

Eléphanteau du PHP | 10 Messages

07 oct. 2008, 21:40

Mes biens chers frères,

La requête SQL était en fait un copier coller de ce que me renvoyait phpmyadmin lorsque je visualisais le contenu de la table. J'ai essayé d'enlever les apostrophes sans résultats. J'ai essayé les accents sans résultat. J'ai ensuite décidé qu'il était plus sage de carrément copier l'intégralité du code proposé en substituant le mot de passe. J'ai revérifié login et mots de passe étaient corrects, que les prises étaient branchées, que les plombs n'avaient pas sauté et que ma soeur battait le beurre. J'obtiens encore et toujours le même message d'erreur. Je vous propose donc de vous recueillir avec moi autours de ce qui ne sera bientôt plus qu'un minuscule tas de cendre s'il me sort pas cette foutu requête pask'on est trois, kilé tout seul et qu'on a l'arrogance discrète quand on mesure 40 centimêtres de haut !!!!!!!!!!!!!

ViPHP
ViPHP | 4039 Messages

07 oct. 2008, 22:36

D'accord, d'accord..

Quant tu testes cette requête dans phpmyadmin:

Code : Tout sélectionner

SELECT * FROM T_Fermeture
(qui devrait marcher, s'il y a du contenu dans T_Fermeture) Inutile d'utiliser le limit, phpmyadmin l'utilise pour ne pas devoir tout afficher sur une même page.

Alors, ça donne des résultats ? Oui ? C'est que le souci est dans le code. Non ? C'est que la table est vide ou qu'elle n'existe pas.

Si c'est dans le code, qu'affiche le code de sadeq ? Il a pris le soin de le rendre assez bavard pour qu'il puisse nous dire ce qui cloche de son côté..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 10 Messages

09 oct. 2008, 21:21

j'ai essayé de lancer la requête dans phpmyadmin mais je pense ne pas avoir trouvé la bonne façon de procéder. J'ai finalement lancé une requête sur la table pour m'assurer que la table n'était pas vide (elle ne l'est pas) et que la syntaxe était bonne. PHPmyadmin me donne cette syntaxe :

Code : Tout sélectionner

SELECT `T_Fermeture`.`D_Fermeture` FROM T_Fermeture
lorsque je lance le code avec cette requête (avec ou sans accents) je reprends la même erreur. J'ai la sensation que le code php n'est simplement pas interprété. J'ai essayé de lancer directement la page php (sans passer par la page appelante), firefox me demande si je veux enregistrer la fichier comme s'il ne reconnaissait pas les balises php. J'ai pourtant placé mes pages dans mon répertoire var\www\ Je dois dire que je suis perplexe car j'ai de plus en plus la sensation qu'un truc absolument évident m'échappe.

A priori, si phpmyadmin peut se lancer on peut imaginer que mon install lamp est correctement configurée ou au minimum, qu'il m'est possible de lancer des scripts php. Mon problème est que n'ayant accès à aucun message d'erreur je ne peux même pas deviner d'où vient le problème ou faire une recherche sur le net. C'est dur de désapprendre 12 ans de mauvaises habitudes acquises sous access.

ViPHP
ViPHP | 4039 Messages

09 oct. 2008, 23:33

Tu accèdes bien à ta page à travers le serveur ?

http://localhost/chemin/vers/PHP_Jours_Fermeture.php
ou
http://127.0.0.1/chemin/vers/PHP_Jours_Fermeture.php
?

(fait un copier-coller de ton url sinon, qu'on voie)

Essaye avec un fichier le plus simple possible. Tu verras bien. (et regarde la source du fichier, si tu y vois du php, c'est qu'il y a un souci).

Genre:
<?php
// ça tu le vois pas
echo "<p>Mais moi tu me vois!</p>";
$var = "et hop! <br>";
for ($i=0;$i<6;$i++) { echo $var; }
?>
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 oct. 2008, 10:46

Travailles-tu sous Linux ? Si oui, il faut revoir la procédure d'installation de Lamp et démarrer ton serveur Apache.

Par ailleurs et sur la base du code Ajax que tu as posté, je pense que tu as quelques erreurs logiques.
Il faut savoir que Ajax effectue un appel asynchrone (parallèle et en arrière-plan) au serveur Web et donc reçoit la réponse du serveur d'une manière asynchrone. C'est à dire que ton navigateur ne sait pas quand-est-ce qu'il recevra la réponse d'une requête Ajax asynchrone. C'est pour cette raison que l'on est obligé de déléguer la tâche de réception d'une réponse attendue à une fonction résidente qui se comporte comme un écouteur et qui reste active jusqu'à la réception de la réponse du serveur préalablement appelé par Ajax.

Pour ce faire, Ajax déploie l'événement onReadyStateChange qui écoute le canal de communication entre Ajax et le serveur et retourne les changements d'état et notamment si une réponse est renvoyée par le serveur.
Quand la propriété readyState est à la valeur 4, Ajax a déjà contacté le serveur Web et se met en attente de sa réponse et si la propriété status est à 200, la réponse tant attendue est en vue.

Code : Tout sélectionner

xhr.onreadystatechange = function() { if(xhr.readyState == 4) { // En attente d'une réponse du serveur if (xhr.status == 200){ // Réponse reçue alert(xhr.responseText); window.status = "Ajax a reçu une réponse du serveur."; } else { // Toujours en attente window.status = "En attente..."; } // fin if 2 }// fin if 1 } // fin de l'écouteur d'états
Cette fonction ne sera bien sûr exécutée qu'après avoir démarrer l'appel d'Ajax au serveur Web par:

Code : Tout sélectionner

// Démarrage de l'appel Ajax xhr.open("GET", "PHP_Jours_Fermeture.php", true); xhr.send(null);
La méthode Open construit l'entête HTTP d'appel, elle précise l'url du serveur, la méthode de postage (GET ou POST) et le mode de communication (TRUE = communication asynchrone ou FALSE = communication non asynchrone)
La méthode Send envoie la requête HTTP en passant éventuellement les paramètres de postage. C'est cette méthode qui démarre finalement l'appel Ajax.
Après la méthode Send aucune autre instruction Ajax n'est effective car il est trop tard puisque l'appel est déjà effectué et Ajax bascule en mode écoute du serveur appelé.
Exactement comme si on tape une url dans navigateur, quand on valide l'url, le navigateur appelle le serveur, et reste en attente de sa réponse. Et tant que le serveur n'a pas répondu, le navigateur reste figé.
D'ailleurs c'est tout l'intérêt de l'usage d'Ajax : éviter de figer le navigateur. Le processus Ajax s'occupe en arrière-plan de la communication avec le serveur et de récupérer des données dynamiques alors que le navigateur reste actif pour permettre à l'utilisateur de faire autres choses.

Je pense que c'est cette partie fondamentale du fonctionnement d'Ajax qui manque dans ton script.

Voici le récap:

Code : Tout sélectionner

<script type="text/javascript"> // Tentative de création de l'objet XMLHTTPRequest d'Ajax (XHR) var xhr; try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e2) { try { xhr = new XMLHttpRequest(); } catch (e3) { xhr = false; }//fin try/catch }//fin try/catch } //fin try/catch // Si l'objet XHR est bien construit, programmer alors la fonction qui recevera la réponse Ajax xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if(xhr.status == 200) { // La réponse est prête et reçue alert (xhr.responseText); window.status = "Ajax a reçu une réponse du serveur."; } else { // Sinon, Ajax est toujours en attente de la réponse window.status = "Ajax est en attente d'une réponse du serveur..."; } //fin if status } //fin if readyState }; //fin onReadyStateChange // Démarrage de l'appel Ajax xhr.open("GET", "http://localhost/Ajax/test.php", true); xhr.send(null); </script>
Je rappelle le script PHP (PHP_Jours_Fermeture.php):
<?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);
?> 
Modifié en dernier par sadeq le 10 oct. 2008, 20:24, modifié 6 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

10 oct. 2008, 10:57

Sans rapport direct avec le script, si tu travailles avec Firefox, je te conseille l'extension Firebug
http://getfirebug.com/

Dans la partie Réseau > filtre XHR, tu verras la response de ton serveur.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 10 Messages

11 oct. 2008, 12:03

Quand je parlais d'un truc évident que j'avais la sensation de rater je ne sentais bien que j'étais sur une piste. Pour tester le fichier php, j'utilisais le menu [fichier]->[ouvrir un fichier]. Du coup, il ne risquait pas d'interpréter le code. En ouvrant par 127.0.0.1 puis en suivant les liens, le script fonctionne. Merci pour le cours d'Ajax, je pense en effet ne pas avoir suivi les phases dans le bon ordre. Je vais essayer de travailler quelques jours sur ces scripts afin de m'assurer de les avoir correctement assimilés et je reviendrai vous indiquer si tout est résolu. Merci pour votre patience.

ps : pour ce genre de bug, il faudrait tout de même prévoir un forum PHP pour mentalement déficient. J'ai honte, mais j'ai honte...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 oct. 2008, 15:42

Mais il ne faut pas avoir honte d'apprendre. On apprend tous au fil du temps.
Il faut aller chercher le savoir même jusqu'en Chine. :wink:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 oct. 2008, 11:15

Modération :
fitz7689, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.