Bonjour,
Pourquoi lorsqu'on appelle une page PHP par l'intermédiaire d'une requête HTTP xmlHTTPRequest, les "includes" en tête de fichier ne sont pas gérés.
Merci.
Version imprimable
Bonjour,
Pourquoi lorsqu'on appelle une page PHP par l'intermédiaire d'une requête HTTP xmlHTTPRequest, les "includes" en tête de fichier ne sont pas gérés.
Merci.
ils sont gérés. il doit y avoir un autre problème.
C'est bizarre, j'ai un fichier util.php dans lequel j'ai implémenté de nombreuses fonctions PHP. Quand je l'include dans mon fichier PHP (lequel est appelé par xhr.open("GET","../../includes/bd_action.php?act=addPlanif&idOrg=" + id_org , false);), les fonctions ne sont pas connues de ce dernier...
Alors que lors d'un rechargment complet de la page, il n'y a aucun problème, les fonctions sont appelées correctement.
quel message d'erreur obtiens-tu ?
Salut,
Tu as un include('util.php'); dans ton fichier bd_action.php ?
Ca a l'air bête mais on sait jamais :mouarf:
Oui oui t'inquiète pas. Je ne suis pas si c** :mouarf3:Citation:
Envoyé par rieppe
Je n'obtiens aucun message d'erreur précis.Citation:
Envoyé par marcha
C'est juste que ma fonction n'est pas appelée. Pour exemple, j'ai fait une fonction pg_insert_id (correspondant au mysql_insert_id pour MySQL pour déterminer le nouvel identifiant créé) dans mon util.php et ça a toujours bien fonctionné.
Depuis que je suis passé à AJAX, je fais de nombreuses requêtes xmlHTPPRequest et lorsque je fais un echo"a" après l'appel de cette fonction et que je récupère cela avec un alert (xhr.responseText) : aucun message.
De plus, ma requête SQL suivante ne s'exécute pas.
En revanche, lorsque je mais directement la fonction pg_insert_id dans le fichier bd_action.php, là ça fonctionne.
Le souci, c'est que c'est c** d'avoir un fichier util.php contenant toutes les fonctions si je suis obligé de les recopier toutes dans tous mes fichiers php...
Salut,
est-ce que les chemins relatifs d'inclusion ne seraient pas à l'origine
du problème ? peux-tu donner l'emplacement des fichiers concernés
dans les deux cas ?
Non non c'est pas ça c'est sûr, j'avais essayé de lui fournir des chemins erronés ou de supprimer le fichier et dans les cas là il me fournit un message d'erreur clair.
Tu arrives à donner un code le plus simple possible qui provoque l'erreur ?
qu'on puisse tester ?
Désolé, là ça va pas être possible dans l'immédiat...
Demain, je vous envoie un extrait de code, pas de problème.
Mon util.php :
Mon bd_action.php :Code:
1
2
3
4
5
6
7
8
9
10
11 function pg_insert_id($link,$tablename,$fieldname) { $sql = "SELECT last_value FROM ${tablename}_${fieldname}_seq;"; $result=pg_query($link,$sql); if ($result) { $arr = pg_fetch_row($result,0); pg_free_result($result); if (isset($arr[0])) return $arr[0]; } return false; }
Finalement, mon script :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 include ('/util.php'); if ($_GET["act"] == "test") { $var = 'OUI'; $pg_host = "localhost"; $pg_user = "u"; $pg_passw = "pw"; $pg_db = "bd"; $conn_string = "host=" . $pg_host . " port=5432 dbname=" . $pg_db . " user=" . $pg_user . " password=" . $pg_passw; $link = pg_connect($conn_string) or die("Connexion Impossible! "); $sql = "INSERT INTO T_table "; $sql .="(table_nom,table_visible,is_group) "; $sql .="VALUES ('" . strtoupper($_GET['name']) . "', '$var','OUI') "; $res=pg_query($link,$sql); $new_id = pg_insert_id($link,'T_table','id_table'); echo $new_id; }
Voilà, j'ai essayé de réduire au maximum pour alléger mais normalement la structure globale est fonctionnelle.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function test (n) { try { var xhr=getXhr(); xhr.open("GET","../bd_action.php?act=test&name=" + n , false); xhr.send(null); if(xhr.readyState == 4 && xhr.status == 200){ alert (xhr.responseText); } else { alert("Erreur:" + xhr.responseText); } } catch (ex) { alert("Exception: " + ex.message); } }
Là vous verrez que la fonction pg_insert_id bloque...
Sinon pour éviter de travailler avec une BDD :
util.php :
bd_action.php :Code:
1
2
3
4
5 function en_to_re_date2($date_en) { list($aaaa,$mm,$jj) = split('-',$date_en); $date_re = $jj . $mm . substr($aaaa,2,2); return($date_re); }
Script :Code:
1
2
3
4
5 include ('util.php'); if ($_GET["act"] == 'test') { echo en_to_re_date2($_GET["date"]); }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function test (d) { try { var xhr=getXhr(); xhr.open("GET","../bd_action.php?act=test&date=" + d , false); xhr.send(null); if(xhr.readyState == 4 && xhr.status == 200){ alert (xhr.responseText); } else { alert("Erreur:" + xhr.responseText); } } catch (ex) { alert("Exception: " + ex.message); } }
Salut,
et que reçoit tu dans xhr.responseText ?
Chez moi ça fonctionne,
mais j'ai mis les trois fichiers dans un même dossier pour mon test.
xhr.open("GET","bd_action.php?act=test&date=" + d , false);
d'autre part, j'ai ma propre fonction getXhr() puisque tu l'as pas postée,
le problème vient peux-être de là ?
tu as regardé dans la console javascript ?
Justement rien.Citation:
Envoyé par marcha
Moi ils ne sont pas dans le même dossier, j'ai l'arborescence classique : cgi-bin, includes, javascript, html, class-styleCitation:
Envoyé par marcha
Mon util.php se trouve dans /includes, mon bd_action.php également et mon script dans /javascript.
Voici mon getXhr() :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function getXhr(){ if(window.XMLHttpRequest) // Firefox et autres var GetXmlHttpRequest = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { GetXmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { GetXmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); GetXmlHttpRequest = false; } return GetXmlHttpRequest; }
La console ne me dit rien...Citation:
Envoyé par marcha
Euh, le chemin dans ton get est relative à la page appellante, et n'a rien à voir avec l'emplacement physique de tes fichiers de scripts.Citation:
Envoyé par linar009
Quelle est l'adresse de la page sur laquelle tu souhaites executer le script?
Tu peux donner le code de getXhr() stp
Je viens de le donner...Citation:
Envoyé par marcha
Voilà en fait la page php s'affichant est à l'adresse suivante : /base/www/test/cgi-bin/test/edit.phpCitation:
Envoyé par denisC
Mon util.php :
/base/www/test/includes/util.php
Mon bd_action.php :
/base/www/test/includes/bd_action.php
Mon script :
/base/www/test/javascript/script.js
Le script est appelé dans la page edit.php
Citation:
Envoyé par linar009
Arrives-tu à faire fonctionner ton exemple de code en mettant les trois
fichiers dans un même dossier pour tester ?
Ben alors, il faut que tu appellesCitation:
Envoyé par linar009
Non?Code:
1
2
3 xhr.open("GET","../../includes/bd_action.php?act=test&date=" + d , false); xhr.send(null);
J'ai essayé en mettant les fichiers dans le meme repertoire, ca ne change rien.Citation:
Envoyé par marcha
Non mais je ne pense pas qu'il s'agisse d'un problème d'emplacement de fichiers, puisque lorsqu'il ne trouve pas les fichiers, il y a une erreur de toute façon.
Par contre, j'ai oublié de vous dire : je fais déjà un include ('util.php') dans ma page edit.php. C'est peut-être ça le problème, qu'en pensez-vous? Mais à ce moment là si le util.php est déjà inclut il devrait trouvé ses fonctions...
Oui ne t'inquiète pas c'est ce que je fais . Là c'était juste pour vous donner un exemple...Citation:
Envoyé par denisC
Qu'en pensez-vous ?
Le double include est peut-être la cause,
pour inclure des fichiers utilitaires nécessaires
à plusieurs pages, utilise plustot
include_once
ou
require_once
Ok merci je vais essayer
Je me demande si le problème SQL depuis AJAX n'a pas déjà été traité dans un autre thread... Le include marche bien, à mon avis, mais plus le SQL...
Faudrait faire une recherche (Forum JS & PHP)...
Ah ouais tu crois ? c'est possible ça ?Citation:
Envoyé par FremyCompany
J'en sais rien, je fais pas de PHP ;)Citation:
Envoyé par linar009
Moi j'utilise ASP .Net et je n'ai jamais eu aucun problème, mais en y repensant, je me demande si je ne me souviens pas d'un post parlant de problèmes avec SQL+AJAX....
Je peux me tromper bien sur, mais je te conseille tout de même de faire une recherche, on sait jamais ;)
marcha avait raison il suffit de mettre include_once.
Merci à vous!