[PHP]envoyer une variable sur un autre site

Fermé
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 - Modifié par zimeau le 23/03/2010 à 15:47
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 - 26 mars 2010 à 14:26
bonjour,

Voila, j'ai créer un formulaire pouvant être hébergé sur n'importe quel site :
<form action="http://zimeau.fr/index.php" method="post"> 
<select name="test"> 
  <option selected="selected" value="france">France</option> 
  <option value="australie">Australie</option> 
  <option value="autriche">Autriche</option> 
</select> 
<input value="Envoyer" type="submit"> 
</form> 

J'aimerais pouvoir envoyer ma variable "test" sur la page "http://zimeau.fr/index.php" pour que celui ci la traite de façon invisible à l'utilisateur. Si par exemple, sur "http://zimeau.fr/index.php" il est dit de prendre la variable test et de la ranger dans une base de donné, je voudrais que ma page le fasse sans ouvrir la page index.php. enfin c'était plutôt ce que j'aurais voulu car évidement, si je lance pas l'index.php, elle ne sera pas exécuter. mais est-il possible de la charger de manière invisible a l'utilisateur? sans que cela ne change la page web qu'il visite? ou en utilisant "la ruse", ouvrir l'index.php dans un coin caché par du css?
je précise (sa va être le gros problème) que je peut modifier comme je le désire les pages contenant le formulaire mais je ne peux pas touché à index.php.

D'avance merci pour vous solutions!
A voir également:

20 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
23 mars 2010 à 17:49
Je n'ai pas très bien compris.
Tu aimerais envoyer le formulaire sans changer ou recharger la page ?
Si oui ? AJAX
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
23 mars 2010 à 18:20
sa a l'air d'être une solution, je ne connait pas l'ajax, je me renseigne dessus.
ce que je voudrais, c'est envoyer le formulaire de manière transparente. si j'utilise mon code tel quel, il m'affichera index.php lorsque j'appuierais sur valider. je veux qu'il traite les donner sans afficher la page.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
23 mars 2010 à 18:36
AJAX à l'air de correspondre à tes besoins.
Par contre, il faut que la page cible soit sur le même domaine que la page contenant le formulaire.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
23 mars 2010 à 19:17
alors j'ai 2 probleme. le 1er, c'est que ma page cible n'est pas sur le meme domaine que mon formulaire. de plus, mon hebergeur n'a pas l'air de gerer l'ajax. j'ai essayer une code simple :
<html>
<head>
<script>
function submitForm()
{ 
    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;   }
        }
     }
 
    xhr.onreadystatechange  = function()
    { 
         if(xhr.readyState  == 4)
         {
              if(xhr.status  == 200) 
                 document.ajax.dyn="Received:"  + xhr.responseText; 
              else 
                 document.ajax.dyn="Error code " + xhr.status;
         }
    }; 

   xhr.open( GET", "data.xml",  true); 
   xhr.send(null); 
} 
</script>
</head>
                 
<body>
    <FORM method="POST" name="ajax" action="">                  
         <INPUT type="BUTTON" value="Submit"  ONCLICK="submitForm()">
         <INPUT type="text" name="dyn"  value=""> 
    </FORM>
 </body>
 </html> 

cela ne marche pas.
il n'y aurais pas une solution en php (que je connait mieux)? je pensais à faire un include de la page cible dans la page hote, et cacher visuellement ce qui apparait dans l'include avec du css. je ne sais pas si lorsque j'envoie un formulaire, il est aussi transmit à une page situer dans un include. je vais essayer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
23 mars 2010 à 19:35
AJAX est géré côté client, rien à voir avec ton hébergeur.
Crées un script PHP qui va envoyer la requête avec les données POST grâce à cURL.
C'est ce script que tu devras appeler avec AJAX.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
23 mars 2010 à 20:08
j'ai peut être mal coder mon ajax, tu vois une erreur dans mon code? je l'ai mis dans un fichier html (sa devrais marcher ainsi je pense). j'ai utiliser ce tuto pour tester l'ajax https://www.xul.fr/xml-ajax.html
il y a une page de demo pour voir ce que le code qui correspond fait. je prend le code et le met sur mon hébergeur, sa ne marche pas, alors que sa marche sur le site du tuto. (seul l'hébergeur change entre le code du tuto et celui que j'ai mis sur mon hébergeur.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
23 mars 2010 à 22:04
xhr.open( GET", "data.xml",  true);
Je doute que le fichier data.xml soit celui que tu veux "contacter".
Crées un script PHP qui se chargera d'envoyer une requête sur le serveur externe avec les données POST grâce à cURL. C'est ce fichier qu'il faudra contacter avec AJAX.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
23 mars 2010 à 23:44
j'ai fait quelque test avec cURL, le problème est que comme la fonction include, elle ne permet pas de contacter une autre page que celle qui sont sur le serveur. j'arrive bien à afficher ma page d'accueil, mais quand je met une autre page en paramètre, elle ne s'affiche pas.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
Modifié par zimeau le 24/03/2010 à 09:26
j'ai trouvé une petit balise qui fait presque ce que j'ai besoin :
<object type="text/html" data="http://zimeau.fr/index.php" width="500px" height="500px">

ça m'affiche bien index.php a partir de n'importe qu'elle hébergeur, mais le problème est qu'il ne prend pas les variable envoyé.
si dans index.php, j'ai le code
echo $_POST['test'];

il n'affichera pas la variable test envoyé depuis ma page.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 mars 2010 à 13:13
Le but de cURL est justement d'envoyer des requêtes HTTP, donc il y a un problème si tu ne peux en envoyer sur le serveur interne.
Et cURL n'a rien à voir avec include : include() inclus le code source PHP, cURL passe par HTTP donc le PHP est exécuté (comme quand tu vas sur la page avec le navigateur).
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
Modifié par zimeau le 24/03/2010 à 16:14
j'ai essayé l'exemple suivant dans un test.php :
<?php 

$ch = curl_init("http://www.example.com/"); 
$fp = fopen("example_homepage.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
?> 

si je met a la place de http://www.example.com/ une page de qui se situe sur le même serveur que mon test.php, alors j'ai bien le contenu de ma page dans example_homepage.txt. si je met une autre page, alors le fichier example_homepage.txt ne change pas.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
Modifié par zimeau le 24/03/2010 à 16:13
après un peu de persévérance, j'ai finalement réussis à afficher la page google.fr avec curl. le problème viens en faite du site que j'essaye d'afficher qui reste vide lorsque j'essaye de l'afficher avec curl. est ce qu'il y a un moyen de faire afficher les erreur de curl pour savoir pourquoi il affiche bien certain site comme google et pas d'autre?
en attendant, je poursuit mes tests sur google. disons qu'avec mon formulaire, je veuille afficher la page google donnant le résultat de ma recherche. j'ai fait ce petit morceaux :
<?php   
// Création d'une ressource cURL   
$ch = curl_init();   

// Définition de l'URL et autres options appropriées   
curl_setopt($ch, CURLOPT_URL, "https://www.google.fr/?gws_rd=ssl");   

// Récupération de l'URL et passage au navigateur   
curl_exec($ch);   

// mon formulaire
echo "<form name='f' action='/search'>";   
echo "<input value='' title='Recherche Google' class='lst' size='55' name='q' maxlength='2048' autocomplete='off'>";   
echo "<input type='submit' class='lsb' value='test Google' name='btnG'>";   
echo "</form>";   

// Fermeture de la ressource cURL et libération des ressources systèmes   
curl_close($ch);   
?>   

le problème est que lorsque je clique sur "test Google", il essaye de charger la page http://www.mondomaine.fr/search?q=&btnG=Recherche+Google
ce qui est normal vu que ma form pointe vers /search. mais si je demande qu'il pointe vers www.google.fr/search (action='www.google.fr/search'), j'aurai comme recherche http://www.mondomaine.fr/www.google.fr/search?q=&btnG=Recherche+Google. ce qui est normal aussi. comment puis je faire une tentative d'envoi de la variable sur l'url du site curl plutot que sur mon domaine?

Edit :
si je met l'action de ma form vide (action=''), alors j'ai un meilleur résultat : http://www.mondomaine.fr/google.php?q=test&btnG=Recherche+Google
google.php étant la page ou je fait mes test. il passe donc bien les variables dans la barre de navigation, mais elle ne sont pas utiliser par cURL :(
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 mars 2010 à 16:21
Il faut que tu utilises AJAX sur ta page qui contient le formulaire pour contacter ton script PHP en lui passant les variables (et leurs valeurs).
Après, avec cURL, tu te charges d'envoyer la requête sur le serveur externe en repassant ces variables par POST.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
25 mars 2010 à 14:09
Genial! j'ai réussis a utiliser ajax! (je ne connaissait pas du tout ce langage jusque la, merci le site du zero xD ) il est plutôt intéressant de comprendre comment il fonctionne.
Bon, on va pouvoir progresser maintenant que j'ai bien compris le système de communication d'ajax et que j'ai commencer à faire marcher langage.
voila ce que j'ai fait (lecture complète du code non obligatoire pour finir de résoudre mon problème):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>test</title>
<?php 
$ct=$_POST['ct']; 
$to=$_POST['to']; 
$text=$_POST['text']; 
$send=$_POST['send']; 
?>
<script type="text/javascript">
function plop()
        {
        var xhr_object = null;
        
        if(window.XMLHttpRequest) // Firefox
           xhr_object = new XMLHttpRequest();
        else
                {
                if(window.ActiveXObject) // Internet Explorer
                        xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
                else // XMLHttpRequest non supporté par le navigateur
                        {
                        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                        return;
                        }
                }
        
        var method   = "POST";
        var filename = "reponse.php";
		var requete  = "ct=<?php echo $ct; ?>&to=<?php echo $to; ?>&text=<?php echo $text; ?>&send=<?php echo $send; ?>";

        xhr_object.onreadystatechange = function() 
                {
                if(xhr_object.readyState == 4) 
                        {
                        var reponse = xhr_object.responseText; 
                        document.getElementById("content").innerHTML = reponse;
                        } 
                } 
        
        xhr_object.open(method, filename, true);
        
        xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        
        xhr_object.send(requete);

        }
</script></head>
<body>
<form action="" method="post">
<table>
<tr>
<td>SMS gratuit</td>
</tr>
<tr><td>Destinataire</td><td><select name="ct">
  <option selected="selected" value="+33">France</option>
  <option value="+61">Australia</option>
  <option value="+43">Austria</option>
</select><input onkeyup="if(this.value[0]==0||this.value[0]=='+') 
this.value='';" name="to" size="25" maxlength="15" title="entrez le numero de téléphone sans le 0" type="text"><br></td></tr>
<tr><td>Message</td><td><textarea name="text" cols="45" rows="5"></textarea></td></tr>
<tr><td colspan="2" align="center"><input value="Send" name="send" type="submit"></td></tr>
</table>
</form>
<input value="Valeur" type="submit" onclick="plop()">
<div id="content"></div>
</body></html>

Donc en résumer, ce code est donc mon index.php qui envoi les donner par post à reponse.php, qui affiche les réponse. Ensuite, je fait afficher ce qu'il y a dans reponse.php entre les balise <div id="content"></div> avec un bouton "Valeur".
Tout marche très bien à un tout petit détail prêt. La variable $ct qui contient soit "+33", soit "+61", soit "+43" ne s'affiche pas correctement lorsque je la fait apparaitre avec mon bouton "Valeur". Le + disparait et je n'ai plus que 33, 61 ou 43. pourquoi mon "+" disparait-il? Je ne sais pas si il disparait au moment de l'envoie sur réponse.php ou lors de son affichage s
on affichage sur index.php; Il ne me reste que ce détail à voir puis je pourrais envoyer mon formulaire sur mes autres pages, sur mes autres hébergeur.
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
25 mars 2010 à 15:53
bon, rectification, je n'ai pas besoin du "+" finalement. le problème est que a première vu, ça ne fonctionne pas. Il y a un défaut avec ajax, c'est que si il y a une erreur quelque par, on a aucun message (avec php, si on oublie un ";" ou que quelque chose ne va pas, on le sais). peut être n'arrive t-il pas a joindre le site? peut être que les variable ne sont pas envoyé?
et quel serait l'utilisation de cURL la dedans finalement?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
25 mars 2010 à 19:00
Pour commencer AJAX n'est pas un langage, c'est un concept.
var requete  = "ct=<?php echo $ct; ?>&to=<?php echo $to; ?>&text=<?php echo $text; ?>&send=<?php echo $send; ?>";
D'où sortent ces variables ? Elles sont déclarées nul part avant.
Pour récupérer la valeur d'un champ en Javascript :
document.getElementById('id_du_champ').value
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
25 mars 2010 à 20:40
oui en effet, c'est pas vraiment un langage (même pas du tout) mais maitrisé l'ajax, c'est dire qu'on maitrise le php, javascript, css, html. c'est pas du tout mon cas (sinon j'aurais pas besoin d'aide xD ).
mes variables sont déclarer dans le formulaire de ma pagne (index.php) :
<select name="ct">
<input onkeyup="if(this.value[0]==0||this.value[0]=='+') 
this.value='';" name="to" size="25" maxlength="15" title="entrez le numero de téléphone sans le 0" type="text">
<textarea name="text" cols="45" rows="5">
<input value="Send" name="send" type="submit">

au 1ere chargement de la page index.php, rien n'est envoyer à reponse.php, et lorsque je click sur Send, les valeur sont envoyer par POST sur index.php (sur elle meme), je les récupère avec
$ct=$_POST['ct']; 
$to=$_POST['to']; 
$text=$_POST['text']; 
$send=$_POST['send']; 

puis
avec le bouton Valeur, j'execute la fonction plop() qui les envois les valeur avec ajax sur reponse.php puis qui m'affiche les valeur qui sont sur reponse.php. voici le code de reponse.php :
pays : <?php echo $_POST['ct'] ; ?><br />
numero : <?php echo $_POST['to'] ; ?><br />
message : <?php echo $_POST['text'] ; ?><br />
bouton send : <?php echo $_POST['send'] ; ?>
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
26 mars 2010 à 12:55
je continue d'apprendre l'ajax via le site du zéro pour m'y familiarisé au mieux et faire ce dont j'ai besoin, mais je suis tombé sur la fonction XMLHttpRequest cross-domain qui parait être ce dont j'ai besoin (mais qui n'est malheureusement pas vraiment exploitable pour les utilisateurs) : https://openclassrooms.com/fr/courses/245710-ajax-et-lechange-de-donnees-en-javascript/245581-lxmlhttprequest-cross-domain
cela voudrait-il dire que XMLHttpRequest ne peut pas communiquer d'un domaine a l'autre? et que je ne peux donc pas trouver de solution à ce que je voudrais faire?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 mars 2010 à 13:38

<select name="ct">
<input onkeyup="if(this.value[0]==0||this.value[0]=='+')
this.value='';" name="to" size="25" maxlength="15" title="entrez le numero de téléphone sans le 0" type="text">
<textarea name="text" cols="45" rows="5">
<input value="Send" name="send" type="submit">


/ou il manque des lignes ou alors ton code n'est vraiment pas bon

<select ...> il faut a la suite des <option>
et à la fin </select>
<textarea ...> il faut aussi </textarea>
0
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 117
26 mars 2010 à 14:26
en regardant un peu plus haut, on vois dans le code :
<select name="ct">
  <option selected="selected" value="+33">France</option>
  <option value="+61">Australia</option>
  <option value="+43">Austria</option>
</select>

pareille pour le textarea.
monde code html ne posera aucun soucis, je le maitrise bien. Je pense que sa viens plutôt de l'ajax que je ne connait que depuis 2 jours, ou peut être du php que je connait que depuis quelque semaine...
0