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

Langage PHP Discussion :

Mon code contient un bug : il double le nombre de cellules


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Mon code contient un bug : il double le nombre de cellules
    Salut tout le monde,

    J'ai un code génial, mais malheureusement, il est équipé d'un petit bug

    Le code permet de générer un tableau avec un certain nombre de lignes et de cellules (nombre de champ de la table).

    Le hic, c'est qu'il me crée les cellules en double.

    Donc si j'ai 4 champs, il me crée 8 cellules dont 4 vides.

    Voici mon code, sauriez-vous me dire où je peux modifier par ce que ça prend le double du temps pour le chargement :

    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
    <?php
    # script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
    # variable qui contient le nom de ma base de données.
    $dbname = 'deliberations';
     
     
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données deliberation, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) 
    	{
    	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
     
    # $_POST[select_Nom_Tables] récupère la valeur choisie par l'utilisateur, il faut ensuite cliquer sur le bouton pour qu'apparaisse les zones de texte	
    $result = mysql_query('SELECT * FROM ' . $_POST['select_Nom_Tables']) or die (mysql_error());
     
     
    echo "result vaut $result";
     
    echo '<form action="" method="POST"><p>';
    while ($row = mysql_fetch_assoc($result)) 
    {
    	echo "row vaut $row . ";
        // Ne montre que les noms des champs grâce à 'Field'
     
    	echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());
    echo '<tr>';
    for($i=0;$i<=mysql_num_fields($query);$i++)
        {
        echo '<th>'.mysql_field_name($query,$i).'</th>';
        }
    echo '</tr>';
    while($row = mysql_fetch_array($query))
        {
        echo '<tr>';
        for($i=0;$i<count($row);$i++)
            {
            echo '<td> <textarea>'.$row[$i].'</textarea></td>';
            }
        echo '</tr>';
        }
    echo '</table>';
     
     
     
    }
    echo '<input type="submit" name="Submit" value="Mettre la table à jour" />' ; 
    echo '</p></form>';
     
    ?>
    Un tout grand d'avance.

    beegees

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for($i=0;$i<count($row);$i++)
    Si $row à 2 elements et que tu vas de 0 à 2, tu fais 3 boucles.

    Plus simplement pour parcourir le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($row as $key=>$value) {
            echo '<td> <textarea>'.$value.'</textarea></td>';
            }

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for($i=0;$i<count($row);$i++)
    Si $row à 2 elements et que tu vas de 0 à 2, tu fais 3 boucles.
    Il y a bien écris, strictement inférieur au nombre d'occurence de $row. Si $row a deux éléments, il boucle 2 fois.

    C'est à cet endroit que cela ne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i<mysql_num_fields($query);$i++)

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Il y a bien écris, strictement inférieur au nombre d'occurence de $row. Si $row a deux éléments, il boucle 2 fois.

    C'est à cet endroit que cela ne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i<mysql_num_fields($query);$i++)
    Bonjour Thomas,

    Merci pour ta réponse.

    Le fait de retirer le = ne change rien au problème

    beegees

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for($i=0;$i<count($row);$i++)
    Si $row à 2 elements et que tu vas de 0 à 2, tu fais 3 boucles.

    Plus simplement pour parcourir le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($row as $key=>$value) {
            echo '<td> <textarea>'.$value.'</textarea></td>';
            }
    Salut Sabotage,

    J'espère ne pas en demander de trop mais saurais-tu stp te baser sur mon code pour le code que tu m'as fourni ?

    Je ne sais pas si il faut changer $row...

    Voici ce que j'ai mis pour t'avancer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($row as $key=>$value) {
            echo '<td> <textarea>'.mysql_field_name($query).'</textarea></td>';
            }
    Merci d'avance.

    beegees

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Etant donné que tu utilises mysql_field_name, ce serait quand meme mieux d'utiliser une boucle for()

  7. #7
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Tu as écris deux fois ta requête ....

    Voici le CODE COMPLET :
    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
     
    # script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
    # variable qui contient le nom de ma base de données.
    $dbname = 'deliberations';
     
     
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données deliberation, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) 
    	{
    	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
     
    echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());
    echo '<tr>';
    for($i=0;$i<mysql_num_fields($query);$i++)
        {
        echo '<th>'.mysql_field_name($query,$i).'</th>';
        }
    echo '</tr>';
    while($row = mysql_fetch_array($query))
        {
        echo '<tr>';
        for($i=0;$i<count($row);$i++)
            {
            echo '<td> <textarea>'.$row[$i].'</textarea></td>';
            }
        echo '</tr>';
        }
    echo '</table>';

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton probleme vient de mysql_fetch_array qui par défaut retourne un index numerique et un index portant le nom du champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while($row = mysql_fetch_array($query,MYSQL_NUM))
        {
        echo '<tr>';
        foreach($row as $value)
            {
            echo '<td> <textarea>'.$value.'</textarea></td>';
            }
        echo '</tr>';
        }

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ton probleme vient de mysql_fetch_array qui par défaut retourne un index numerique et un index portant le nom du champ
    Pas la peine de chercher midi à 14h

  10. #10
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Tu as écris deux fois ta requête ....

    Voici le CODE COMPLET :
    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
     
    # script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
    # variable qui contient le nom de ma base de données.
    $dbname = 'deliberations';
     
     
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données deliberation, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) 
    	{
    	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
     
    echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());
    echo '<tr>';
    for($i=0;$i<mysql_num_fields($query);$i++)
        {
        echo '<th>'.mysql_field_name($query,$i).'</th>';
        }
    echo '</tr>';
    while($row = mysql_fetch_array($query))
        {
        echo '<tr>';
        for($i=0;$i<count($row);$i++)
            {
            echo '<td> <textarea>'.$row[$i].'</textarea></td>';
            }
        echo '</tr>';
        }
    echo '</table>';
    Un tout grand merci à toi Thomas.

    Malheureusement ça ne marche pas, j'obtiens toujours les colonnes en double.

    Je te remercie encore pour le temps que tu consacres à nous aider sur ce forum, c'est vraiment très sympa de ta part

    beegees

    Citation Envoyé par sabotage Voir le message
    Ton probleme vient de mysql_fetch_array qui par défaut retourne un index numerique et un index portant le nom du champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while($row = mysql_fetch_array($query,MYSQL_NUM))
        {
        echo '<tr>';
        foreach($row as $value)
            {
            echo '<td> <textarea>'.$value.'</textarea></td>';
            }
        echo '</tr>';
        }
    Merci pour ta réponse.

    J'ai fait un copy and paste de ton code, ça fonctionne super bien, merci beaucoup.

    beegees

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Pas la peine de chercher midi à 14h
    En effet, le problème venait de là, encore un grand à vous deux.

    beegees

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

Discussions similaires

  1. [MySQL] bug de mon code pour afficher des donnes BDD a partir de l'id transmise
    Par gael-abdelhadi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/03/2011, 13h56
  2. [AJAX] bug ajax ou erreur dans mon code?
    Par tapoutapou dans le forum AJAX
    Réponses: 2
    Dernier message: 06/08/2010, 22h19
  3. de l aide svp mon code dom bug
    Par riadusse dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 10/02/2010, 12h40
  4. Bug dans mon code source
    Par thomas969 dans le forum Débuter
    Réponses: 4
    Dernier message: 08/05/2009, 18h37
  5. [Vba-E]Bug dans mon code
    Par antoinelavigne dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/06/2006, 15h55

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