Rechercher : dans
Par :

Problème PHP - AJAX

Dernière réponse le 13 jan 2009 à 13:38:18 BloodyAngel, le 26 aoû 2008 à 05:58:42 
 Signaler ce message aux modérateurs

Hello à tous,
je suis un train d'essayer de programmer une page web en PHP/AJAX qui se connecterait à une BD MySQL.
J'ai trois page :
- la page principale HTML
- la page javascript qui s'occupe de gérer l'ajax proprement dit
- la page PHP qui se connecte à la BD MySQL et qui renvoie le résultat d'un SELECT à la fonction Javascript en format XML.

Mon problème, c'est que je n'ai aucun feedback quand au résultat obtenu. La table sur laquelle porte la requête SQL contient 4 champs mais aucun n'est affiché par la fonction Javascript.
Pourtant, quand j'encadre mon code PHP par des balises html, head, body et que je regarde le résultat, les 4 résultats apparaissent bien.
De même, quand je fais porter ma fonction Javascript sur un fichier XML au lieu de sur mon fichier PHP, j'ai bien un résultat.
Là où ça coince, c'est quand j'utilise ma fonction Javascript ET mon code PHP ensemble...

Mon code :
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="styles.css">
<title>Bienvenue</title>
</head>

<div id="contenu">

<?php

$mysql_host = "monserveur";
$mysql_user = "monuser";
$mysql_password = "monpass";
$mysql_db = "madb";

$connexion = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ('Error connecting to mysql');
if ($connexion != 0)
{
echo ("Connexion établie");
}

mysql_select_db($mysql_db);

$mon_champ = isset($_POST['mon_champ']) ? $_POST['mon_champ'] : '';

if ($mon_champ)
{
$table = "Messages";
$requete = "INSERT INTO Messages(NumMess,Mess) VALUES ('','$mon_champ')";
$resultat = mysql_query($requete) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo ("Résultat : $resultat - Champ = $mon_champ");
}

?>

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

<p>
<a href="javascript:ajax();">Refresh</a>
</p>


<form method="POST">
<input name="mon_champ" type="text" >
<input type="submit" value="OK" >
</form>
</div>
</body>
</html>

JAVASCRIPT
function ajax()
{
var xhr=null;

if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

xhr.onreadystatechange = function() { alert_ajax(xhr); };

xhr.open("GET", "http://belotte.net84.net/reponse.php", true);
xhr.send(null);
}

function alert_ajax(xhr)
{
var docXML= xhr.responseXML;
var items = docXML.getElementsByTagName("donnee");

//alert(items.length);
for (i=0;i<items.length;i++)
{
alert (items.item(i).firstChild.data);
}
}

PHP
<?php
header('Content-Type: text/xml');
echo("<?xml version=\"1.0\"?><exemple>");

//on connecte a la BDD
$dbhost="monserveur";
$dbuser="monuser";
$dbpass="monpass";
$mysql_db = "madb";

$dblink=mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($mysql_db);

$query = "SELECT * FROM Messages";
$result = mysql_query($query,$dblink) or die (mysql_error($dblink));

while ($row = mysql_fetch_array($result))
{
echo("<donnee>".$row[0]."</donnee>");

}
echo("</exemple>");

?>



Quand je valide la ligne mise en commentaire (en gras) dans mon code Javascript, il m'affiche 0. Autrement dit, il n'a aucune donnée.

Mes infos de connexions sont correctes, de même que les noms de mes fichiers (je les ai vérifiés plusieurs fois).

Là je ne sais vraiment plus où j'ai fais une erreur.
Je débute en PHP et en javascript donc c'est peut-être une erreur toute bête...

Si quelqu'un pouvait me filer un petit coup de pouce ça m'arrangerait énormément.

Merci pour votre aide,
BloodyAngel
Aides-toi et le ciel t'aidera...

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Problème PHP AJAX » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
Télécharger PHP FTP Synchronizer VoirLa mise à jour de site web est aussi complexe que sa conception. Alors il faut utiliser le bon outil avec les bon paramètres et une bonne connaissance de programmation pour mettre à jour un site. PHP FTP Synchronizer est une application vous...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

2

BloodyAngel, le 26 aoû 2008 à 16:49:41

Up
Aides-toi et le ciel t'aidera...

Répondre à BloodyAngel

3

BloodyAngel, le 26 aoû 2008 à 18:35:02

Up
Aides-toi et le ciel t'aidera...

Répondre à BloodyAngel

4

dreamfeeder, le 27 aoû 2008 à 05:35:47

Bonjour,


verifie que ton fichier php ne contient rien du tout meme pas de retour a la ligne avant <?php
sinon l'header ne sera pas envoyé.

cordialement dreamfeeder

Répondre à dreamfeeder

6

BloodyAngel, le 27 aoû 2008 à 17:41:03

Hello
je viens de supprimer l'espace superflu dont tu parles mais malheureusement ça n'arrange rien :-/
Aides-toi et le ciel t'aidera...

Répondre à BloodyAngel

5

l_epais, le 27 aoû 2008 à 08:31:27

Premiere chose à faire:
télécharge firebug et test ta page avec la console activée et l'option affiché le flux xmlhttprequest.
vérifie que ta requete est lancé, que tes para metres sont envoyé et regarde quel réponse t'es retournée.
si tout est juste le problème vient de javascript qui ne sait probablement pas quoi faire de la reponse

a mon humble avis ton probleme vient de echo en php. Quand tu envoie une requete ajax il vaut mieux stoqul tout ton html dans une variable string que l'on nommera $html et faire un seul echo $html, car la premiere chose rendue en ajax esrt interprété comme la prière réponse, le reste le serveur est censé le traité tout seul (asynchrone)


Entre paranthèse, à mon avis c'est une mauvaise idée de te lancer dans ajax avec des requetes direct xmlhttprequest, utilise la librairie prototype, ça t'éviteras beaucoup d'ennui et ca te faciliteras la vie en js. J'irais memeplus loin télécharge un framework digne de ce nom:
http://script.aculo.us
par exemple tu y trouveras tout les fonctions de base d'ajax prete à l'emploi
ou dojo
si vraiment tu veux qqch de plus maléable

Si tu n'as besoin que de la fonction ajax de prototype ne prends que celle là, mais ne t'amuse pas à réinventée la roue de chare alors que d'autre ont déjà mis à disposition les jantes alus, les pneus et les amortisseurs.


PS: N'oubliez pas de changer le statuts de vos post une fois­ qu'on a répondu entièrement a votre question

Répondre à l_epais

7

BloodyAngel, le 27 aoû 2008 à 17:52:53

Merci pour ton conseil. Je viens d'ajouter le module Firebug et effectivement ça a l'air très utile.
J'ai également mis toute la réponse du PHP dans une variable avant de l'envoyer en entière dans un seul echo.
Malheureusement ça ne va pas mieux...

Si j'utilise les requêtes xmlhttprequest, c'est parce que je n'ai pas les droits pour installer des frameworks sur le serveur qui héberge mon site :-/
Malheureusement.....
Aides-toi et le ciel t'aidera...

Répondre à BloodyAngel

8

l_epais, le 1 sep 2008 à 12:29:18

Et regardant dans firebug:
tu envois les bons parametre?
tu reçois une réponse? PS: N'oubliez pas de changer le statuts de vos post une fois­ qu'on a répondu entièrement a votre question

Répondre à l_epais

9

dreamfeeder, le 1 sep 2008 à 13:35:24

Ya un ptit truc que je navai pas vu qui vient de minterpeller,


les données de ta table que tu selectionne avec mysql_fetch_array devrait etre recupéré avec:

$row['le_nom_du_champ'] et non $row[0]


dans ton fichier php

Répondre à dreamfeeder

10

 l_epais, le 13 jan 2009 à 13:38:18

En fait avec mysql_fetch_array, tu te laisse le choix, a moins que tu précise un style de retour.
Je pense que tu confond avec mysql_fetch_assoc()

Petite précision:
utiliser les indice asociatif numerique c'est mieu d'utiliser mysql_fetch_row() pour une question de vitesse.
pareil pour mysql_fetch_assoc()

utiliser mysql_fetch_assoc peut etre utile lorsque dans ta requete tu fais un count et un group, si la premiere colonne et ton count tu recupere celui-ci par un row[0] et tes autres champs conserve leur nom normal, mais bon on peut s'eviter ce genre de truc par une requete type count(id) AS nb.

@plus
PS: N'oubliez pas de changer le statuts de vos post une fois­ qu'on a répondu entièrement a votre question

Répondre à l_epais