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

PHP & Base de données Discussion :

Boucles sur formulaire


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Boucles sur formulaire
    Bonjour à tous.
    Ma page affiche dynamiquement plusieurs tableaux (dont le nombre depend de la base) dont pour chaque tableau le nombre de colonnes (avec leur titre respectif) varie également.
    chaque ligne du tableau contient des formulaires de type texte.

    j'ai réussi à tout faire s'afficher comme je le voulais, mais j'ai un probleme pour inserer mes données dans ma bdd mysql.

    Le truc c'est que mes valeurs s'incrivent bien, sauf que je ne sias pas pourquoi il rajoute également les valeurs des formulaires qui nont pas été renseignés. On dirait que la boucle continue de parcourir les formulaires comme si ils étaient renseignés (alors que non).
    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
     
    if(isset($_POST['envoi']))
    {
     
     
    if(isset($_POST['nom']) && !empty($_POST['nom']))
    {
      $i=1;
      while($i<=count($_POST['nom']))
      {
     
        $j=1;
        while(!empty($_POST['nom'][$i]) && $j<count($_POST['nom'][$i]))
     
        {
     
          $k=1;
     
     
          while($_POST['qte'][$i][$j]==!"" && $k<=count($_POST['qte'][$i][$j]))
          {
     
    if($_POST['nom'][$i][$j] !== '')   {   $nom_client=$_POST['nom'][$i][$j]; }
              if($_POST['code'][$i][$j][$k] !== '')    { $pdt=$_POST['code'][$i][$j][$k]; }
              if($_POST['qte'][$i][$j][$k] !== '')    { $qte=$_POST['qte'][$i][$j][$k]; }
     
                    if(isset($pdt) && isset($qte) && isset($nom_client) )
                    {
                        echo 'code:'.$pdt.'<br /> qte='.$qte;
     
                        $connection = mysql_connect($serveur, $login, $pass) or die(mysql_error());
                        mysql_select_db($base, $connection) or die(mysql_error());
                        $commande=1;
     
                        $req_verif=mysql_query("SELECT count(*)  from test WHERE id='$commande' AND client='$nom_client' AND pdt='$pdt' AND qte='$qte'") or die(mysql_error());
                        $verif=mysql_result($req_verif,0);
     
     
                       if(empty($verif)){$req_insert=mysql_query("INSERT into test values('$commande','$id_client', '$nom_client','$pdt','$qte')") or die(mysql_error());    }
                     else {    echo "existe deja";    }
     
                    } // fin de isset($pdt)
     
     
            $k++;                                                
        } // fin de while k<count                
          $j++;
          } // fin de while j<count..
      $i++;    
         } // fin de while 
     
    }      
     
    }

    et la partie du formulaire :

    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
    th class="client_liste"><input type="text"  name="nom['.$indice_cat.']['.$j.']" /></th>';
     
                    $req_form=mysql_query("select designation,code from pdt_coche WHERE id_cat='$num_categorie' AND id_client='$id_client' order by id_pdt");    
                    $qte_num=1;
                    while($form=mysql_fetch_array($req_form)){    
     
    echo '
    <td><input type="text" id="quantite'.$qte_num.'" name="qte['.$indice_cat.']['.$j.']['.$qte_num.']" onChange="majligne();"  /><input type="hidden" name="code['.$indice_cat.']['.$j.']['.$qte_num.']" value="'.$form['code'].'" /></td>';
    $qte_num++;
                        }
    echo '
    <td></td><td><input type="text" name="resultat" id="resultat" /><input type="hidden" name="envoi" /></td>
    </tr>';
                    }
     
    echo '
    </table>
    </div>';
     
    }
    j'ai passé plus d'une demie journée dessus je ne vois pas d'ou vient l'erreur... en esperant que quelqu'un puisse m'aider..
    je vous remercie

  2. #2
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Regarde déjà en modifiant ==! par !==:

    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
    if(isset($_POST['envoi'])) {
       if(isset($_POST['nom']) && !empty($_POST['nom'])) {
          $i=1;
          while($i<=count($_POST['nom'])) {
             $j=1;
             while(!empty($_POST['nom'][$i]) && $j<count($_POST['nom'][$i])) {
                $k=1;
    while($_POST['qte'][$i][$j]==!"" && $k<=count($_POST['qte'][$i][$j])) {
                      if($_POST['nom'][$i][$j] !== '') 
                         $nom_client=$_POST['nom'][$i][$j];
                      if($_POST['code'][$i][$j][$k] !== '')
                         $pdt=$_POST['code'][$i][$j][$k];
                      if($_POST['qte'][$i][$j][$k] !== '') 
                         $qte=$_POST['qte'][$i][$j][$k];
     
                      if(isset($pdt) && isset($qte) && isset($nom_client) ) {
                         echo 'code:'.$pdt.'<br /> qte='.$qte;
     
                         $connection = mysql_connect($serveur, $login, $pass) or die(mysql_error());
                         mysql_select_db($base, $connection) or die(mysql_error());
                         $commande=1;
     
                         $req_verif=mysql_query("SELECT count(*)  from test WHERE id='$commande' AND client='$nom_client' AND pdt='$pdt' AND qte='$qte'") or die(mysql_error());
                         $verif=mysql_result($req_verif,0);
     
     
                        if(empty($verif))
                            $req_insert=mysql_query("INSERT into test values('$commande','$id_client', '$nom_client','$pdt','$qte')") or die(mysql_error());    
                        else
                           echo "existe deja";
     
                    } // fin de isset($pdt)
                 $k++;                                                
              } // fin de while k<count                
           $j++;
       } // fin de while j<count..
    $i++;    
    } // fin de while 
     
    }      [/LEFT]
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    merci mais ca vient pas de ca, j'ai testé tellement de truc que j'ai fini par essayer ce symbole (j'étais plus sur que c'était !==, vu que le !empty ne faisait rien...)

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    D'une part, isset($_POST) sera toujours TRUE. Il faut utiliser !empty($_POST) pour savoir si un formulaire a été transmis.
    D'autre part, ceci est redondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['var'] and !empty($_POST['var']))
    Le test !empty() est suffisant car il vérifie également l'existence de la variable.
    Je te recommande vivement d'organiser ton formulaire de manière à pouvoir utiliser des structures foreach() dans ton PHP à la place des while().
    Enfin, évite mysql_result() au profit de mysql_fetch_assoc(), bien plus pratique et rapide à exécuter, et regarde du côté de mysql_real_escape_string() pour te protéger des injections SQL.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    merci pour les infos, j'ai bien changé le isset, mais ca ne change rien...
    pour les autres je vais voir ce que je peux faire, mais ça ne le fera pas marcher...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Debug au fur et à mesure...

    Mets tout en commentaire et ajoute le reste de ton code jusqu'à ce que tu arrives à un mauvais résultat...

    Comme ça tu seras certains d'où provient l'erreur.

    Avant ton while met count($_post['nom']) dans une variable sinon le count sera recalculé dans ta boucle il me semble.

Discussions similaires

  1. [AC-2007] Problème de boucle sur formulaire en continu
    Par Daniel-Gérald dans le forum Access
    Réponses: 2
    Dernier message: 13/12/2013, 09h33
  2. [1.x] [sfForm] Stratégie pour un formulaire qui boucle sur lui-même
    Par Vince57 dans le forum Symfony
    Réponses: 3
    Dernier message: 04/11/2010, 21h01
  3. [XL-2003] boucle sur une combobox à l'initialisation du formulaire
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2010, 13h07
  4. Boucle sur formulaire de simulation de clic sur bouton
    Par arnolano0 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/02/2010, 10h34
  5. Réponses: 10
    Dernier message: 16/04/2009, 10h39

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