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 et mysqli_fecth_array


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Boucles et mysqli_fecth_array
    bonjour a toutes et a tous!
    je veux afficher le nombre existant de materiel (disponible et indisponible) de chaque catégorie tt en affichant un tableau pr afficher a la fois la categorie, Nombre, nombre disponible et nombre indisponible
    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
     
    <?php 
    		if (isset($_POST['choixCat']))
    		{
    		$catchoisi=$_POST['choixCat'];
    		$catchoisi=$db->real_escape_string($catchoisi);
    $select = "SELECT designation,type,dispo,description FROM materiel WHERE `designation`='$catchoisi'";
     
    $result = $db->query($select)or die ('There was an error  [' . $db->error . ']');
     
     
     
    $total = mysqli_num_rows($result);
    echo 'yes';
    echo '<center><h2>SITUATION GLOBALE DU :';
      echo $catchoisi; 
      echo '</h2></center>';
    if($total) {
     
        // debut du tableau
     
        echo ' <center><table bgcolor="#FFFFFF" width="1050" border="0" align="center" cellpadding="0" cellspacing="0">'."\n";
     
            echo '<tr style="height:1 cm;">';
     
            echo '<td bgcolor="#669999"><b><u>D&eacute;signation</u></b></td>';
            echo '<td bgcolor="#669999" style="width:6 cm;"><b><u>Caract&eacute;ristiques techniques</u></b></td>' ;
            echo '<td bgcolor="#669999"><b><u>Dotation</u></b></td>';
     
            echo '<td bgcolor="#669999"><b><u>Disponible</u></b></td>';
     
            echo '<td bgcolor="#669999"><b><u>Indisponible</u></b></td>';
     
     
     
     
          echo '</tr>'."\n"; 
     
     
    $dispo=0;
    $indispo=0;
    /*while($row = mysqli_fetch_array($result)) {$i++;}*/
        while($row= mysqli_fetch_array($result)) {
     
    $type=$row["type"];
    echo '<tr>';
    echo '<td bgcolor="#CCCCCC">'.$row["designation"].''; echo ' '.$row["type"].'</td>';
     
    while($row = mysqli_fetch_array($result))
    {
     
    if($row["type"]==$type)
    {
    if($row["dispo"]==0)
    $indispo++;
    else $dispo++;
    }
     }       
     
     
     
            echo '<td bgcolor="#CCCCCC">';echo $dispo+$indispo;echo'</td>';
     
          echo '<td bgcolor="#CCCCCC">';echo $dispo;echo'</td>';
     
            echo '<td bgcolor="#CCCCCC">';echo $indispo;echo'</td>';
     
     
     
          echo '</tr>'."\n";
    $dispo=0;
    $indispo=0;
     
        }
     
        echo '</table></center>'."\n";
     
     
        // fin du tableau.
     
    }
     
    }
     ?>
    mon probleme c est au niveau de la boucle,
    je veux quand il recoit une ligne il lit le type puis parcours le tableau s il trouve mm type incremente la dotation(Nombre) et si $dispo==true incremente $dispo
    merci d'avance!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Rectif
    j'ai essayé avec ce code
    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
    while($row[$i]= mysqli_fetch_array($result)) {
     
    $type=$row[$i]["type"];
    echo '<tr>';
    echo '<td bgcolor="#CCCCCC">'.$row[$i]["designation"].''; echo ' '.$row[$i]["type"].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row[$i]["description"].'</td>';
    for($counter=0;$counter<$total;$counter++)
    {
     
    if($row[$counter]["type"]==$type)
    {
    $dispo=0;
    $indispo=0;
    if($row[$counter]["dispo"]==0) //line117
    $indispo++;
    else $dispo++;
    }
     }
    ça me donne cet erreur:
    Notice: Undefined offset: 1 in C:\wamp\www\testmp\affich_cat.php on line 117

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu devrais mieux présenter ton code car il est difficilement lisible.
    Par ailleurs tu mélanges l'échappement base de données avec l'échappement html : tu échappes $_POST['choixCat'] pour la base de données et ensuite tu l'affiches quelques lignes plus bas telle quelle sans l'échapper pour le HTML : ça ne sert à rien.

    Tu dois préparer l'affichage en amont et ne dois effectuer aucun traitement dans la partie rendu (vue)
    Aussi pense à séparer le CSS du code HTML sinon ça devient vide illisible.
    Par ailleurs, il faudrait que tu revois aussi la sémantique HTML parce que ton code ne la respecte pas du tout.

    Voici une idée de code :
    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
    <?php 
     
    if (isset($_POST['choixCat']))
    {
        $sql = <<<sql
    SELECT
        designation,
        type,
        dispo,
        description
    FROM
        materiel
    WHERE
        `designation` = '{$db->real_escape_string($_POST['choixCat'])}'
    sql;
     
        $qry     = $db->query($sql) or die ('There was an error  [' . $db->error . ']');
        $nb_rows = mysqli_num_rows($qry);
     
        $details = '';
        $types   = [];    // [type => [dispo, indispo]]
     
        while ($row = mysqli_fetch_assoc($qry))
        {
            if ( ! isset($types[$row['type']]))
            {
                $types[$row['type']] = ['dispo' => 0, 'indispo' => 0];
            }
     
            $k = ($row['dispo'] == 0) ? 'indispo' : 'dispo';
            ++$types[$row['type']][$k]; // on incrémente le bon compteur
        }
     
        // fonction d'échappement à l'affichage
        $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
    ?>
    yes
    <center><h2>SITUATION GLOBALE DU :<?= $hsc($_POST['choixCat']) ?></h2></center>
    <?php 
        if($nb_rows)
        {
    ?>
    <center><table bgcolor="#FFFFFF" width="1050" border="0" align="center" cellpadding="0" cellspacing="0">
        <thead style="height:1 cm;">
            <tr>
                <th bgcolor="#669999"><b><u>D&eacute;signation</u></b></th>
                <th bgcolor="#669999" style="width:6 cm;"><b><u>Caract&eacute;ristiques techniques</u></b></th>
                <th bgcolor="#669999"><b><u>Dotation</u></b></th>
                <th bgcolor="#669999"><b><u>Disponible</u></b></th>
                <th bgcolor="#669999"><b><u>Indisponible</u></b></th>
            </tr>
        </thead> 
        <tbody>
    <?php
        while ($row = mysqli_fetch_assoc($qry))
        {
    ?>
            <tr>
                <td><?= $hsc($row['designation']) ?></td>
                <td><?= $hsc($row['type'])?></td>
                <td bgcolor="#CCCCCC">><?= ($types[$row['type']]['dispo'] + $types[$row['type']]['indispo']) ?></td>
                <td bgcolor="#CCCCCC">><?= $types[$row['type']]['dispo'] ?></td>
                <td bgcolor="#CCCCCC">><?= $types[$row['type']]['indispo'] ?></td>
            </tr>
    <?php } ?>
        </tbody>
    </table></center>
    <?php }
    }
    ?>
    Enfin, il faut toujours privilégier la lisibilité et une présentation soignée du code source à l'économie de 2 lignes...

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [langage] if et boucle { ..}
    Par kacedda dans le forum Langage
    Réponses: 15
    Dernier message: 28/04/2003, 17h25
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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