Script Php distant : cmt recevoir la réponse.

WRInaute discret
Bonjour,

j'ai un problème et je sais pas trop dans quelle direction partir.
Sur le site A, j'ai un script qui a besoin de données stockées dans la base de donnée du site B. Il ne peut pas afficher le résultat directement mais le site A doit récupérer les valeurs qu'ils stockent dans deux variables.

Admettons que l'appel du script soit le suivant :
http://www.siteB.com/sitea.php?data=Fus ... 2012-02-05

Le site B récupère donc une chaine de caractère qu'il décompose, avec ça, il effectue une recherche dans sa base de donnée, il obtient un résultat (ce sera toujours un ou zéro résultat, garantit par les critères de recherche).
Le site A doit récupérer ce résultat via deux variables :
$texteretour="CHRISTIAN SMITH @ Fuse Start : 23h Price : 4€ < 0h > 8€"
$from="Nom du site B".

Ma question est comment transmettre la réponse du script B dans le script A via deux variables que le script A doit ensuite utiliser pour continuer son exécution.

Merci d'avance de votre aide,

Cordialement
 
WRInaute occasionnel
sultan a dit:
Ma question est comment transmettre la réponse du script B dans le script A via deux variables que le script A doit ensuite utiliser pour continuer son exécution.

En PHP, a priori, tu peux faire:
Code:
$arrstr = file('http://www.siteB.com/sitea.php?data=Fuse%20BXL%2012-02-05');
Ça va te renvoyer le "fichier" dont tu as passé l'adresse dans un tableau, une ligne par entrée du tableau.
Donc si ton siteB répond à cette requête en renvoyant un fichier texte de deux lignes:
Code:
CHRISTIAN SMITH @ Fuse Start : 23h Price : 4€ < 0h > 8€
Nom du site B
C'est tout bon (attention à la sécurité)
Code:
$texteretour= $arrstr[0];
$from = $arrstr[1];
 
WRInaute discret
Pour les puristes voici la date exacte :
12-02-2005 ;-) (cf. theclubbing.com pour plus d'infos) lol

Je suis pas webmaster de formation donc pour être sur de tout comprendre...

Je mets l'appel de cette fonction sur le site A :
Code:
$arrstr = file('http://www.siteB.com/sitea.php?data=Fuse%20BXL%2012-02-05');
Le script du site B execute le tout en récupérant, triant, flitrant les réponses, se connecte à sa base de données, réucpère les informations et renvoie au site A ceci :
Code:
$texteretour= $arrstr[0]; 
$from = $arrstr[1];

Les variables $texteretour et $from sont donc utilisables directement sur le site A ? Merci d'avance de votre aide, c'est pas toujours facile de tout capter en php quand on apprend sur le tas... lol
 
WRInaute discret
J'ai fait un script schématique ici, c'est viable comme solution ?

Sur le siteA, on met une page PHP de ce type, afin de envoyer le texte brut.

$data=urlencode(CLUB Fuse BXL 12-02-2005);
Header ('Location: www.siteB.com/soiree.php?data=$data);

Le script « soiree.php » sur le site B, récupère la variable « data », la décompose, trie les informations, il se connecte sur le serveur de base de données, récupère l’information (qui sera toujours unique ou nul). Il formatte le texte de retour en deux variables et les renvoie au siteA via:

$texte=urlencode(CHRISTIAN SMITH @ Fuse || Start :23h || Prix : 4euros < 0h > 8euros);
$idr=urlencode(nomexpe);
Header ('Location: www.siteA.com/retour.php?texte=$texte&idsender=$id);

Le script du site A n’a plus qu’à utiliser la fonction urldecode() sur les variables $texte et $idsender avant de pouvoir utiliser les données.

$texte=urldecode($texte);
$idsender=urldecode($idsender);

=> Utilisation des données.

Remarque: Aucun test de sécurité n’a été effectué, mais ils seront bien sûr nécessaires. Ici je montre juste un mécanisme et non un script complet.
 
WRInaute occasionnel
Non !!!

Ton serveur B ne parle pas au serveur A !! Il répond tout simplement une page texte à une requête.

Reprenons...

Sur le site A:
Code:
$arrstr = file('http://www.siteB.com/sitea.php?data=Fuse%20BXL%2012-02-05');
$texteretour= $arrstr[0];
$from = $arrstr[1];

C'est tout. C'est comme si A ouvrait un fichier, le lisait, et stockait les lignes du fichier dans les variables $texteretour et $from.
Sauf que ce n'est pas un bête fichier que lit A (mais il en sait rien, le pauvre), c'est le retour d'un appel http.

Donc pour A, c'est bon. Pour B, c'est simplement ta page php "sitea" qui fait un truc comme ça:
Code:
 <?php
// blabla j'interroge la BdD
// blabla je fais plein de trucs
// je stocke mes super calculs dans des variables locales
$ligne1 = 'CHRISTIAN SMITH @ Fuse Start : 23h Price : 4€ < 0h > 8€';
$ligne2 = 'Nom du site B ';
print($ligne1."\n");
print($ligne2);
?>

C'est tout... Le site B a renvoyé du texte brut sur la requête demandée. Il ne "parle" pas à A spécifiquement. Sinon, c'est le binz.
 
WRInaute discret
Merci beaucoup... j'ai essayé comme tu dis mais j'ai un problème... je n'arrive pas à récupérer la variable data sur le siteB afin de pouvoir utiliser le texte envoyé par A. Ceci marche pas...
Code:
$data=$_GET['data'];

J'utilise la mauvaise... comment ça s'appelle en fait ? lol... est-ce le $_GET qui est mauvais ?
 
WRInaute occasionnel
n'utilise pas de GET, le serveur B n'ouvre aucune page, il ne peut donc renseigner aucune variable.
Serveur A -> Ouverture page sur serveur B
Serveur B -> Ligne1 : "Monsieur Machin" / Ligne2: "dans telle boîte"

sur le serveur B, tu fais simplement ta recherche, et tu echo (ou print, tiens, vous utiliseriez quoi, vous ? :twisted:) les réponses. Quand A ouvre la page (et donc exécute la recherche), il récupère AUTOMATIQUEMENT le contenu du fichier de B, et donc, dans notre cas, la réponse, sur deux lignes.
 
WRInaute occasionnel
Si, si, sultan a raison: il faut utiliser le $_GET sur ton site B pour lire les paramètres de l'URL.
Bizarre que ça ne marche pas...
1. Que te renvoie par exemple: isset($_GET['data']) ?
2. Que te renvoie print_r($_GET) ?
 
WRInaute discret
J'ai trouvé le problème... C'est pas le fichier B qui est en tort mais le fichier A. J'ai mal passé mes variables...
La variable $_GET['data'] est bien initialisé sur le script de B mais c'est la valeur transmise par A qui était pas correcte.
J'avais mis
Code:
$data=urlencode("Fuse BXL 12-02-2005");
$arrstr = file('http://www.siteB.com/soiree.php?data=$data'); 
$texteretour= $arrstr[0]; 
$from = $arrstr[1];
Alors qu'il fallait
Code:
$data=urlencode("Fuse BXL 12-02-2005");
$arrstr = file('http://www.siteB.com/soiree.php?data='.$data.''); 
$texteretour= $arrstr[0]; 
$from = $arrstr[1];

En fait, on peut pas passer la variable directement, il faut la "concaténé".
 
WRInaute occasionnel
tu peux passer une variable directement quand tu utilise des double-quotes, dans ce cas les chaines sont "parsées", et les variables remplacées par leur valeur...

Pour être pointilleux, je dois ajouter que les doubles-quotes sont plus "gourmands" en ressources que les simples quotes (avec donc, concaténation)
 
Discussions similaires
Haut