Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoyer un formulaire sans bouton submit

    26 juin 2010 à 20:58:08

    Bonjour,

    Je voudrais savoir comment faire pour qu'il n'y ait pas besoin du submit pour envoyer un formulaire qui est en liste déroulante, choisir une quantité, puis mettra à jour la SESSION. Je sais le faire mais avec le bouton submit.

    J'ai recherché sur internet et j'ai trouvé la fonction onchange en javascript, jquery ou XMLHTTPRequest.

    Le problème c'est que je ne sais pas comment faire pour l'utiliser.

    Comment faire ?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      26 juin 2010 à 21:11:46

      C'est de l'Ajax dont tu as besoin.
      Pour cela tu créer une page PHP dont le seul but est de lire des variables reçues en GET par exemple et tu les met dans tes variables de session.
      Ensuite grâce à une requête Ajax (que tu peux faire en utilisant Jquery par exemple) tu appelle cette page en lui envoyant tes variables.

      Et pour lancer cette requête Ajax tu pourrais utiliser l'événement onchange d'un formulaire comme tu l'as dit.

      Voilà il faudrait faire un pti schèma mais en gros ça fait :
      onchange =>
      envoie ajax des variables à une page php =>
      page php qui prends les variables, les contrôles et les met dans les variables de session =>
      et après les variables de session t'en fais ce que tu veux.
      • Partager sur Facebook
      • Partager sur Twitter
        26 juin 2010 à 21:20:01

        D'accord ;) Je vais tester ça ;)
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2010 à 21:28:47

          Alors j'ai essayé de faire ce que tu m'a dis mais ca ne veut pas trop marcher.

          Alors pour le onchange, j'ai fais ca :
          <?php
          echo ' <form method="post" action="" name="quantite">';
          echo '<input type="hidden" name="envoie" value="no">';
          echo '<input type="hidden" name="article" value="'.$panier['id'].'">';
          echo '<input type="hidden" name="article_name" value="'.$panier['article'].'">';
          echo '<input type="hidden" name="prix" value="'.$panier['prix'].'">';
          echo '<input type="hidden" name="poids" value="'.$panier['poids'].'">';
          echo '<select name="quantite" onChange="request(readData);">';
          for ($a =1; $a <= $article['stock'] ; $a++)
          {
          echo "<option value=\"$a\" name=\"quantite\"";
          if ($qte == $a)
          {
          echo 'selected="selected"';
          }
          echo ">$a</option>";
          }
          echo '</select> ';
          echo '</form>';
          


          Dans la meme page que la page déroulante j'ai mis dans head :

          <script type='text/JavaScript'>
          	 
          	 		function getXhr(){
                                          var xhr = null; 
          				if(window.XMLHttpRequest) // Firefox et autres
          				   xhr = new XMLHttpRequest(); 
          				else if(window.ActiveXObject){ // Internet Explorer 
          				   try {
          			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
          			            } catch (e) {
          			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
          			            }
          				}
          				else { // XMLHttpRequest non supporté par le navigateur 
          				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
          				   xhr = false; 
          				} 
                                          return xhr
          			}
          			
          			/**
          			* Méthode qui sera appelée sur le click du bouton
          			*/
          			function request(callback){
          				var xhr = getXhr()
          				xhr.open("POST","ad.php",true);
          				xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
          				xhr.onreadystatechange = function(){
          					
          					if(xhr.readyState == 4 && xhr.status == 200){
          						callback(xhr.responseText);
          					}
          				};
          				
          				var envoie = encodeURIComponent("$_POST['envoie']");
          				var article = encodeURIComponent("$_POST['article']");
          				var article_name = encodeURIComponent("$_POST['article_name']");
          				var prix = encodeURIComponent("$_POST['prix']");
          				var poids = encodeURIComponent("$_POST['poids']");
          				var quantite = encodeURIComponent("$_POST['quantite']");
          				xhr.send(envoie=" + envoie + "&article= " + article + "&article_name= " + article_name + "&prix= " + prix + "&poids= " + poids + "&quantite= " + quantite);
          				
          			}
          			
          			function readData(sData) {
          				alert(sData);
          			}
          
          			
          		</script>
          


          Sauf que quand j'appuie sur la quantité souhaitée, ca fait rien du tout.
          La page ad.php que j'ai mise dans xhr.open a comme code :
          <?php
          session_start();
          header('Content-type: text/html; charset=iso-8859-1'); 
          
          if ( !empty($_POST['envoie']) && !empty($_POST['quantite']) && !empty($_POST['article_name']) && !empty($_POST['prix']) && !empty($_POST['poids'])  && $_POST['envoie'] = 'no' && !empty($_POST['article']))
          {
          foreach($_SESSION['panier'] as $key => $val)
          	{
          		if($val['id'] == $_POST['article'])
          		{
          			$_SESSION['panier'][$key]['qte'] = $_POST['quantite'];
          		}	
          	}
          }
          
          ?>
          


          Quel est le problème ?

          Merci d'avance
          • Partager sur Facebook
          • Partager sur Twitter
            29 juin 2010 à 19:59:39

            L'événement onchange se déclenche quand tu fais sors d'un champ de formulaire.
            Par exemple si t'es sur ton select et que tu fais un tab.
            Moi ce que je te conseille c'est de faire un bouton de type button (et pas submit) et tu met ta fonction request dans un événement onclick, ça sera plus intuitif.
            Sinon pour ton débug, as tu vérifié que ta fonction était bien appelée (par exemple fais un alert au début de request, vérifie le contenu de tes données, etc.
            • Partager sur Facebook
            • Partager sur Twitter
              3 juillet 2010 à 20:41:55

              Ah ouai d'accord, donc ca ne me va pas. Je veux qu'il se déclenche des que l'utilisateur a cliqué dessus.

              Je regarde pour le bouton de type button
              • Partager sur Facebook
              • Partager sur Twitter

              Envoyer un formulaire sans bouton submit

              × 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