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 :

Problème avec un "while"


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème avec un "while"
    Bonjour !

    J'ai tout d'abord une page membres.php dont voici une partie de code (le reste étant facultatif). La requête va chercher les infos des membres et les affiche en tableau. Au début de chaque ligne (donc pour chaque membre) il y a une checkbox.

    J'ai un petit problème avec la boucle "while" qui répète 2x la première entrée puis 1x (donc normalement) les entrées suivantes.
    Ainsi si la table est composée des valeurs suivantes : Dupont, Martin, Lagrange
    cela retournera : Dupont Dupont Martin Lagrange

    Voici mon code, je ne comprends vraiment pas pourquoi seul l'entrée ayant pour id 1 subit cette répétition...

    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
    while ($ligne = mysql_fetch_array($result)){
    extract ($ligne);
    $birthdate = "$jour.$mois.$annee";
    ?>
     
    <tr>
    <td><input type="checkbox" name="sendemail[]" value="<?php echo $id; ?>" /></td>
    <td><?php echo $nom ?></td>
    <td><?php echo $prenom ?></td>
    <td><?php echo $birthdate ?></td>
    <td><?php echo $rue ?></td>
    <td><?php echo "$ville - $pays"; ?></td>
    <td><?php echo $telephone ?></td>
    <td><?php echo $email ?></td>
    <td><?php echo $licence ?></td>
    <td><?php echo $statut ?></td>
    <td><?php echo $interclubs ?></td>
    </tr>  
     
    <?php
    }
    ?>
    <input type="submit"  name="ok" value="Envoyer un email" />
    La deuxième page est envoi_mail1.php. Cette page présente un formulaire pour envoyer un email. Le but étant de sélectionner le(s) destinataire(s) grâce aux checkbox de la page membres.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
    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
     
    <?php
    include '../includes/connexion.php';
     
    $connexion = mysql_connect($host,$user,$password)
    or die ("Connexion au serveur impossible");
    $db = mysql_select_db($database1,$connexion)
    or die ("Sélection de la base de données impossible");
     
    if (isset($ok)) {
            if ( array_key_exists( 'sendemail', $_POST ) ) {
                    $arrSql = array();      
                    foreach ($sendemail as $choix)  {
                    $arrSql[] = "id='$choix'";
                    }
     
                    $rq = 'SELECT email FROM membres ';
                    $rq .= ' WHERE '.implode(' OR ', $arrSql);
     
                    $adresses = mysql_query($rq);
                    $liste_adresses = array();
                    while ($add = mysql_fetch_row($adresses)){
                    $liste_adresses[]=$add[0]; }
     
                    $to = implode(',',$liste_adresses);
     
    ?>
     
    /* FORMULAIRE ... je vous l'épargne ! */
     
    <?php
     
    if ( array_key_exists( 'sendemail', $_POST ) ) {
    $array = array();      
    foreach ($sendemail as $key)    {
    $array[] = "id='$key'";
    }
     
    $rq1 = 'SELECT * FROM membres ';
    $rq1 .= ' WHERE '.implode(' OR ', $array);
     
    $nom = mysql_query($rq1);
     
    while ($donnees = mysql_fetch_array($nom)){
    $noms[] = $donnees["nom"];
    $prenoms[] = $donnees["prenom"];
    $final[] = "$noms $prenoms";
    $vers = implode(', ',$final);
    echo $vers;                    
     
    }
     
    }                        
     
    }
            else {
            echo "Vous devez sélectionner au moins un destinataire !";
            }
    }
     
    ?>
    Merci d'avance !

  2. #2
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 201
    Points : 241
    Points
    241
    Par défaut
    Pourquoi utilises tu extract ?en je crois que cette fonction est utilisée pour des tableaux alors que ta variables $ligne est une igne de ce tableau et pas le tableau. A mon avis il faudrait commencer par retirer la fonction et d'utiliser ta variable $ligne['nom'] etc... pour obtenir le resultat....

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    L'extract ici est utilisé simplement pour éviter de repasser par le tableau puisque extract va créer une variable pour chaque donnée sortie de la base de données.

    Le problème ne doit pas venir de là... enfin je penses.

    Il faudrait avant tout faire fonctionner le script sans la boucle while afin de voir si une ligne s'affiche parceque pour le moment je ne vois rien dans cette partie du code qui provoquerais un double affichage de la ligne sauf si ta ligne est doublée dans la BDD

  4. #4
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 201
    Points : 241
    Points
    241
    Par défaut
    Dans ta boucle quand tu affectes $final ($final[] = "$noms $prenoms" de quel $nom et $prenom s'agit il? si c'est le nom des index des tableaux tu devrais utiliser extract et si c'est un tableau (de nom par exemple) alors l'affectation ne se fait pas de la sorte, tu devrais parcourir ton tableu et recuperer chaque valeur avant de l'affecter dans ton tableau final...
    en fin je crois ue l'erreur provient de ton raisonnement...

Discussions similaires

  1. Problème avec ma boucle while
    Par gautgaut dans le forum Langage
    Réponses: 7
    Dernier message: 09/07/2013, 18h04
  2. Problème avec des boucles while/for imbriquées
    Par Nico820 dans le forum Général Python
    Réponses: 12
    Dernier message: 14/12/2012, 16h24

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