IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[JS/PHP] Formulaire dynamique : ajout de ligne et requete SQL


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut [JS/PHP] Formulaire dynamique : ajout de ligne et requete SQL
    Bonjour,
    j'ai un formulaire JAVASCRIPT pour ajouter des lignes à un tableau
    Chaque ligne comprend des input type=text ansiqi qu'un span a la fin pour le total de la ligne.

    j'aimerais pouvoir ajouter une ligne de ce formulaire non pas par le bouton Ajouter une ligne mais par une requete SQL et que les valeurs de ems input (.value) prenne le resultat de ma requete.

    Voila ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $selectp = "SELECT reference,Designation,Quantite,PrixUniteHorsTaxe,Remise FROM produit WHERE IdCommande='$idurl'";
    $resultp = mysql_query($selectp,$connect) or die ('Erreur : '.mysql_error() );
      while($rowp = mysql_fetch_array($resultp)) {
      AddRow2();
      }
    et voila AddROW2 : fonction qui me permet d'ajouter une ligne (à chaque fois qu'il en trouve une dans la base grâce au "while" de la requête) sauf que j'aimerais que input.value soit affecter du résultat de ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    <script type="text/javascript">
     
    var compteur=0;
    function AddRow2(){
     
    compteur++; //ajout d'un ligne on incremente le compteur
    //liste de tout les input que l'on trouve dans le tableau ligne d e produit
    var input0=document.createElement('input');
    input0.type = 'button';
    input0.name ="supprimer";
    input0.value="Supprimer";
     
    input0.onclick=function()
    {
    suppression(this.parentNode.parentNode.id);
    }
     
     
    var input1=document.createElement('input');
    input1.type = 'text';
    input1.name ="ref_"+compteur;
    var input2=document.createElement('input');
    input1.style.width="56px";
    input1.value= // $rowp['Reference']; //comment faire pour que la valeur prenne le resultat de ma requete 
     
     
    input2.type = 'text';
     
    input2.name ="designation_"+compteur;	
    input2.style.width="170px";
     
    var input3=document.createElement('input');
    input3.type = 'text';
    input3.name ="qte_"+compteur;	
    input3.id="qté_"+compteur;
    input3.ref = compteur;
    input3.style.width="60px";
    input3.onkeyup = function(){
        check(this.ref);
    	total();
    	}
    input3.onchange=function(){
     
    total();
    }
    var input4=document.createElement('input');
    input4.type = 'text';
    input4.name ="pu_"+compteur;
    input4.id="prix_"+compteur;
    input4.ref = compteur;
    input4.style.width="80px";
    input4.onkeyup = function(){
        check(this.ref); 
    	total();
    	}	
    input4.onchange=function(){
     
    total();
    }	
     
    var input5=document.createElement('input');
    input5.type = 'text';
    input5.name ="remise_"+compteur;
    input5.id="remis_"+compteur;
    input5.ref = compteur;
    input5.style.width="70px";
    input5.onkeyup = function(){
        check(this.ref);
    		total();
    	}	
    input5.onchange=function(){
     
    total();
    }
     
     
    //on crée un nouvelle ligne puis les nouvelles cellules a l'interieur
        var newRow = document.getElementById('table').insertRow(-1);
    	newRow.id="ligne"+compteur;
        var newCell = newRow.insertCell(0);
     newCell.appendChild(input0);
    	 newCell = newRow.insertCell(0);
    	newCell.appendChild(input1);
        newCell = newRow.insertCell(1);
        newCell.appendChild(input2);
    	 newCell = newRow.insertCell(2);
       newCell.appendChild(input3);
    	 newCell = newRow.insertCell(3);
         newCell.appendChild(input4);
    	 newCell = newRow.insertCell(4);
       newCell.appendChild(input5);
    	 newCell = newRow.insertCell(5);
     
        newCell.innerHTML = ' <span id="result_'+compteur+'"></span>';
     
     
    }
    Merci !

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    personne ?
    appermement il y a des truc du coté de l'AJAX mais je sais pas du tout comment sa marche ?
    envoyé une requete SQL a un fichier XML ?
    recupere cette requete ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $selectp = "SELECT Reference,Designation,Quantite,PrixUniteHorsTaxe,Remise FROM produit WHERE IdCommande='$idurl'";
    $resultp = mysql_query($selectp,$connect) or die ('Erreur : '.mysql_error() );
      while($rowp = mysql_fetch_array($resultp)) {
      AddRow2(); //AJOUT DE LIGNE A CHAQUE LIGNE DANS LA TABLE IMPOSSIBLE CODE JAVASCRIPT DANS PHP ! SOLUTION ?
      }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
    
    
    var compteur=0;
    function AddRow2(){
    
    compteur++; //ajout d'un ligne on incremente le compteur
    //liste de tout les input que l'on trouve dans le tableau ligne d e produit
    var input0=document.createElement('input');
    input0.type = 'button';
    input0.name ="ref_compteur";
    input0.value="RESULTAT DE LA REQUETE ICI";

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Tu fais appel à un fonction javascript depuis php, c'est impossible.
    $resultp = mysql_query($selectp,$connect) or die ('Erreur : '.mysql_error() );
    while($rowp = mysql_fetch_array($resultp)) {
    AddRow2();
    }


    Ce que tu devrais faire c'est récupéré le résultat de requête dans XML ou JSON et tu fais un traitement javascript à partir du résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    header("Content-type:text/xml");
    			echo'<?xml version="1.0" encoding="ISO-8859-1"?><elements>';
    while($rowp = mysql_fetch_array($resultp)) {echo '<element>';
    echo '<ref>'.$rowp['Reference'].'</ref>';..
    echo'</element>';}
    echo'</elements>';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function recuperer(idurl)
    {
    	var xhr=createXHR();
    	document.getElementById('form').style.visibility='visible';
    	var rst;
    	xhr.open("POST", "page.php",true);
    	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	xhr.onreadystatechange = function()
    	{
    		if(xhr.readyState == 4)
    		{
    			if(xhr.status == 200)
    			{
    				rst=xhr.responseXML;
    				nbligne=rst.getElementsByTagName('element').length-1;
    					for(i=nbligne; i>=0; i--)
    					{
    						alert(rst.getElementsByTagName('ref')[i].childNodes[0].nodeValue);
    					}
    			}	
    			else	
    			{
    				alert("Error: returned status code " + xhr.status + " " + xhr.statusText);
    			}	
    		} 
    	}
    	var data='idurl='+idurl
    	xhr.send(data); 
    }

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    whaou merci beaucoup pour la reponse !
    donc j'ai le premier code dans page.php avec ma requete ce qui me donne :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    $connect = mysql_connect("localhost","root","") or die("erreur de connexion au serveur $host");
    mysql_select_db("Colis", $connect);
     
    $selectp = "SELECT Reference FROM produit WHERE IdCommande='$data'";
    $resultp = mysql_query($selectp,$connect) or die ('Erreur : '.mysql_error() );
     
    header("Content-type:text/xml");
    echo'<?xml version="1.0" encoding="ISO-8859-1"?><elements>';
     
     
     
     
     
    while($rowp = mysql_fetch_array($resultp)) 
    {echo '<element>';
    echo '<ref>'.$rowp['Reference'].'</ref>';
     
    echo'</element>';}
     
     
    echo'</elements>';
     
     
    ?>
    je suppose que le $idurl de la requête doit être remplacé par le $data si j'ai bien compris car $data est envoyé par la fonction recuperer()
    j'ai raison ?


    donc ensuite la fonction recupere(idurl) que j'ai mis dans mon formulaire dynamique c'est un jolie morceau lol


    je comprend pas trop ce quel fait la fonction
    elle retourne quelque chose ?


    comment je peux me servir de cette fonction pour inserer dans les .value la valeur de ma requête en incrémentant les lignes a chaque fois ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     $idurl=$_GET['idcommande']; 
     
    function addrow()
    {
    compteur++;
    input0.name='ref'+i;
    input0.value=recuperer( $idurl);
    }
    ? puisque il faut effctivement que sa m'ajoute une ligne de tableau avec pour valeur ma requete

    Merci.

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $data=$_POST['idurl']
    $selectp = "SELECT Reference FROM produit WHERE IdCommande='$data'";
    Dans mon exemple, la fonction recuperer retourne tous les enregistrements du requête SQL donc pour l'ajout de ligne dans ton addrow, tu dois le mettre dans le bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0; i<=nbligne; i++) // nbligne+1est le nombre de ref retourné
    	{
    // Ajout de ligne de ton addrow ICI avec la valeur rst.getElementsByTagName('ref')[i].childNodes[0].nodeValue
    	}
    Tu refais le même erreur, javascript dans php
    $idurl=$_GET['idcommande'];

    function addrow()
    {
    compteur++;
    input0.name='ref'+i;
    input0.value=recuperer( $idurl);
    }
    Pour l'ajout d'element dans une page, visite le forum jS

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    Salut
    oki merci ,j'ai donc mes deux codes :

    page.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    $connect = mysql_connect("localhost","root","") or die("erreur de connexion au serveur $host");
    mysql_select_db("Colis", $connect);
     
    $data=$_POST['idurl'];
     
    $selectp = "SELECT Reference FROM produit WHERE IdCommande='$data'";
    $resultp = mysql_query($selectp,$connect) or die ('Erreur : '.mysql_error() );
     
    header("Content-type:text/xml");
    echo'<?xml version="1.0" encoding="ISO-8859-1"?><elements>';
     
     
     
     
     
    while($rowp = mysql_fetch_array($resultp)) 
    {echo '<element>';
    echo '<ref>'.$rowp['Reference'].'</ref>';
     
    echo'</element>';}
     
     
    echo'</elements>';
     
     
    ?>

    et AddRow2() que j'execute par un onload=AddRow2(); a l'ouverture de la page.


    voici addRow2()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <script type="text/javascript">
     
    var compteur=0;
    function AddRow2()
    {
    var xhr=createXHR();
    	document.getElementById('form').style.visibility='visible';
    	var rst;
    	xhr.open("POST", "page.php",true);
    	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	xhr.onreadystatechange = function()
    	{
    		if(xhr.readyState == 4)
    		{
    			if(xhr.status == 200)
    			{
    				rst=xhr.responseXML;
    				nbligne=rst.getElementsByTagName('element').length-1;
     
    			for(i=0; i<=nbligne; i++) // nbligne+1est le nombre de ref retourné
    				{
    			compteur++; //ajout d'un ligne on incremente le compteur
     
     
    		var input1=document.createElement('input');
    		input1.type = 'text';
    		input1.name ="ref_"+compteur;
    		input1.style.width="56px";
    		input1.value=rst.getElementsByTagName('ref_')[i].childNodes[0].nodeValue;
    		document.getElementById('UnDiV').appendChild(input1);
     
     
     
     
    //on crée un nouvelle ligne puis les nouvelles cellules a l'interieur (test pour une cellule)
        var newRow = document.getElementById('table').insertRow(-1);
    	newRow.id="ligne"+compteur;
     
    	newCell.appendChild(input1);
        newCell = newRow.insertCell(1);
     
    				}
    			}
    			else	
    			{
    				alert("Error: returned status code " + xhr.status + " " + xhr.statusText);
    			}	
    		} 
    	var data=idurl;
    	xhr.send(data); 
    	}
     
    }

    et cela ne marche malheuresement pas

    Si quelq'un a une idée je lui serait reconnaissant.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PHP : Formulaire dynamique, ajout de champ
    Par Invité dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2014, 09h08
  2. JTable dynamique : ajouter des lignes
    Par koolway dans le forum Composants
    Réponses: 6
    Dernier message: 17/06/2010, 15h41
  3. tableau dynamique (ajout de lignes)
    Par nanourene dans le forum Struts 1
    Réponses: 3
    Dernier message: 29/04/2009, 10h18
  4. Pb php : formulaire dynamique
    Par lucyole dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2006, 14h33
  5. [JTable] Un tableau dynamique (ajout de lignes)
    Par fraoustin dans le forum Composants
    Réponses: 3
    Dernier message: 09/10/2005, 00h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo