Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoyer un formulaire en js

simuler l'envoi d'une requête POST

    3 février 2009 à 13:42:33

    Bonjour,

    J'ai développé un script php pour traiter mon emploi du temps, publié en html, et en extraire uniquement les cours ou je suis concerné.
    Il marche très bien, mais pour l'executer il me faut d'abord copier-coller la source de la page html ou se trouve le tableau dans un champ de formulaire, puis envoyer le formulaire a un script php qui s'occupe de traiter les données.

    Mon objectif serait de récupérer automatiquement la source de la page dans avoir a faire de copier coller.
    J'ai pensé à récupérer la source directement en php mais le problème est que la page ou se trouve l'emploi du temps se trouve dans une zone protégée par mot de passe. Je me suis donc dit que le plus simple serait d'executer un script js lorsque je navigue sur la page, qui me récupère la source et me l'envoie directement dans mon formulaire. J'ai pensé par exemple à un lien comme celui ci à mettre dans les favoris, qui execute le code lorsque je suis sur la bonne page.

    J'ai trouvé la fonction document.html.innerHTML qui devrait récupérer la source, et la fonction window.open qui permet d'ouvrir la page de mon formulaire. Mais si je peux facilement envoyer dans le lien de mon formulaire mon groupe de td (index.php?td=08) qui est alors inséré directement dans le formuaire, la taille de la source de l'emploi du temps m'empêche de la poster en GET comme ca, il faut l'envoyer en POST (ce que je fais entre mon formulaire et mon script de traitement).
    Je n'ai jamais fait de javascript et je me demandais si quelqu'un aurait une petite idée ici qui pourrait m'aider?

    Merci beaucoup.

    PS pour voir le formulaire: http://www.pasteur.free.fr/ECL/agenda/ [...] =1-08&tp=1-F2
    • Partager sur Facebook
    • Partager sur Twitter
      3 février 2009 à 19:00:48

      Ça m'étonnerai qu'on puisse envoyer une requête en post via javascript, sauf en utilisant XMLHttpRequest peut-être...

      Sinon tu pourrais facilement envoyer ton formulaire en get grâce à :

      function Submit()
      {
      	input1 = document.getElementById('input1').innerHTML;
      	input2 = document.getElementById('input2').innerHTML;
      	document.location.href='tapage.php?input1='+input1+'&input2='+input2+'';
      }
      


      <input type="button" value="submit" onclick="Submit()"/>
      


      • Partager sur Facebook
      • Partager sur Twitter
        3 février 2009 à 19:19:08

        Salut,

        et merci de ta réponse, mais le probleme est double:
        1) Je ne peux pas modifier la page! Je n'en suis pas propriétaire. Il faudrait un script capable de s'executer depuis la barre des favoris.
        2) La source de la page est trop grosse pour passer en GET. J'ai essayé mais il tronque. Donc il FAUT passer en POST...

        J'ai cherché en effet dans le XMLHttpRequest mais je n'y connaît rien...
        • Partager sur Facebook
        • Partager sur Twitter
          3 février 2009 à 22:48:01

          Bon si tu veux vraiment utiliser POST on utilise XMLHttpRequest :D

          Dans la page1.php (celle qui enverra les données) on met :

          <input id="input1" type="text"/><br/>
          <input id="input2" type="text"/><br/>
          <input type="button" value="submit" onclick="Submit()"/>
          


          et la fonction en javascript

          function Submit()
          {
          	// On crée les variables qui contiennent les données
          	input1 = document.getElementById('input1').value;
          	input2 = document.getElementById('input2').value;
          	
          	// Les données seront envoyées sous forme d'adresse GET grâce à la variable data
          	data = 'input1='+escape(input1)+'&input2='+escape(input2)+'';
          	
          	// XMLHttpRequest
          	var xhr;
          	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
          	else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
          	else
          	{
          		alert('Ce navigateur ne supporte pas XMLHttpRequest');
          		return;
          	}
          	
          	xhr.open('POST','page2.php',true); // La page qui traitera les données en POST
          	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          	xhr.send(data); // Les données à envoyer
          	
          	xhr.onreadystatechange = function()
          	{
          		if (xhr.readyState == 4)
          		{
          			// La variable xhr.responseText contient la réponse de la page2.php
          			// Ici j'enregistre la réponse dans la variable traitement.
          			traitement = xhr.responseText;
          		}
          	}
          }
          


          Tu dois aussi créer une page2.php (celle qui traitera et renverra les données) qui contient :

          <?php
          	// On vérifie que les données existent
          	if(isset($_POST['input1']) AND isset($_POST['input2']))
          	{
          		// Protection des données reçues...
          		$input1 = htmlspecialchars($_POST['input1']);
          		$input2 = htmlspecialchars($_POST['input2']);
          			
          		// Là tu traite les données
          		$traitement = 'Réponse : '.$input1.' et '.$input2.'';
          		// En gros tu fais ce que tu veux.
          		// Tu peut même enregistrer les données dans ta BDD.
          			
          		// Tu écris ce que tu veux envoyer comme réponse à la page1.php
          		echo $traitement;
          	}
          ?>
          


          Et voila ! :soleil:

          Pour plus d'infos tu peut aller voir Les objets XMLHttpRequest ;)

          • Partager sur Facebook
          • Partager sur Twitter
            4 février 2009 à 23:17:03

            Merci pour ta réponse!

            Le probleme c'est que je n'arrive pas a la faire marcher... Il ne m'envoie pas le formulaire en fait, je ne sais pas si il est sensé afficher la page de destination apres coup ou s'il se contente d'executer le script sans rien afficher? en tout cas quand je fait ca ma page ne bouge pas... c'est bizarre. Si j'arrive a faire marcher la fonction dans une page je pense ensuite qu'il suffit de ne prendre que la fonction js, de remplacer "input" par innerHTML et ca devrait fonctionner comme un favori, ce qui serait cool. Mais pour l'instant j'ai un pb!
            Voici ma page:

            <html>
            
            <head>
              <title></title>
              <script language="javascript" type="text/javascript">
            
            function Submit()
            {
            	// On crée les variables qui contiennent les données
            	input1 = document.getElementById('input1').value;
            	input2 = document.getElementById('input2').value;
            
            	// Les données seront envoyées sous forme d'adresse GET grâce à la variable data
            	data = 'source='+escape(input1)+'&input2='+escape(input2)+'';
            
            	// XMLHttpRequest
            	var xhr;
            	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
            	else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
            	else
            	{
            		alert('Ce navigateur ne supporte pas XMLHttpRequest');
            		return;
            	}
            
            	xhr.open('POST','http://www.pasteur.free.fr/ECL/agenda/?dp=1-DpA&tdbis=1-07bis&tdmaths=1-07maths&td=1-08&tp=1-F2',true); // La page qui traitera les données en POST
            	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            	xhr.send(data); // Les données à envoyer
            
            	xhr.onreadystatechange = function()
            	{
            		if (xhr.readyState == 4)
            		{
            			// La variable xhr.responseText contient la réponse de la page2.php
            			// Ici j'enregistre la réponse dans la variable traitement.
            			traitement = xhr.responseText;
            		}
            	}
            }
            
            </script>
            </head>
            
            <body>
            
            <TEXTAREA NAME="input1" COLS=40 ROWS=6></TEXTAREA>
            <input id="input2" type="text"/><br/>
            <input type="button" value="submit" onclick="Submit()"/>
            
            
            
            
            
            
            </body>
            
            </html>
            


            Merci en tout cas de ta réponse qui m'a en tout cas permis de voir que c'était faisable. Je vais continuer a chercher...
            S'il te vient encore une idéee n'hésite pas ^^
            • Partager sur Facebook
            • Partager sur Twitter
              1 mars 2009 à 17:53:11

              Il faut que tu ajoute id="input1" dans ton textarea, sinon javascript n'ira pas le chercher !
              Et oui c'est assez con :lol:

              <TEXTAREA id="input1" NAME="input1" COLS=40 ROWS=6></TEXTAREA>
              


              • Partager sur Facebook
              • Partager sur Twitter

              Envoyer un formulaire en js

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown