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 :

Affichage tableau avec condition


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 44
    Par défaut Affichage tableau avec condition
    bonjour

    j'ai un tableau ou je compare deux dates et si il est en retard donc date de fin devient inferieur a la date du jour j'aimerai afficher un commentaire a cote de chaque noms mais dans ma condition if il n'affiche pas la ligne avec les details de la personne mais directement la phrase que j'ai indiquée dans ma condition 'IF'
    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
    	if($nblignes)
    									{
    										// début du tableau
    										echo '<table bgcolor="#FFFFFF">'."\n";
    											echo '<tr>';
    											echo '<td bgcolor="#669999"><b><u>nom</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>enddate</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>date du jour</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>montant</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>datecalcul</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>diffdate</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>caisse</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>montjour</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>eurodiffjour</u></b></td>';
    											echo '<td bgcolor="#669999"><b><u>Retard</u></b></td>';
    											
    											echo '</tr>'."\n"; 
    										
    										do{
    											
    											if($datejour<$row['enddate'])
    												{
    													
    													echo '<tr>';
    													echo '<td bgcolor="#CCCCCC">'.$row['nom'].'</td>';
    													echo '<td bgcolor="#CCCCCC">'.$row['enddate'].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row['datecalcul'].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row['montant'].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row['datecalcul'].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row['diffdate'].'</td>';
    $datediff=$row['diffdate'];
    													
    echo '<td bgcolor="#CCCCCC">'.$row['caisse'].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row['montjour'].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$row['eurodiffjour'].'</td>';
    													
    													
    } else{
    	echo '<td><td><FONT COLOR="#B9121B">' .$row['nom'].'est en retard ! un Email lui a ete envoye !</FONT></td></td>';
    	echo '</tr>'."\n";
           }
    											
    	}while($row = mysql_fetch_array($sqlcalcul)) ;
    	echo '</table>'."\n";
    	
    										
    // fin du tableau.
    }else echo 'Pas d\'enregistrements dans cette table...';
    voila j'aimerai afficher a cote de chaque nom dans une condition 'if'une phrase puis envoyer un mail si la personne est en retard, "echo '<td><td><FONT COLOR="#B9121B">' .$row['nom'].'est en retard ! un Email lui a ete envoye !</FONT></td></td>';"
    Ne rester pas ignorant svp Merci

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Billets dans le blog
    12
    Par défaut
    Salut,

    J'ai repris ton code du mieux que j'ai pu :
    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
    <?php
     
    if ($nblignes == 0) {
        echo "Pas d'enregistrements dans cette table...";
        return;
    }
    // échappement des caractères
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
    ?>
    <table bgcolor="#FFFFFF">
        <thead>
            <tr>
                <th bgcolor="#669999"><b><u>nom</u></b></th>
                <th bgcolor="#669999"><b><u>enddate</u></b></th>
                <th bgcolor="#669999"><b><u>date du jour</u></b></th>
                <th bgcolor="#669999"><b><u>montant</u></b></th>
                <th bgcolor="#669999"><b><u>datecalcul</u></b></th>
                <th bgcolor="#669999"><b><u>diffdate</u></b></th>
                <th bgcolor="#669999"><b><u>caisse</u></b></th>
                <th bgcolor="#669999"><b><u>montjour</u></b></th>
                <th bgcolor="#669999"><b><u>eurodiffjour</u></b></th>
                <th bgcolor="#669999"><b><u>Retard</u></b></th>
            </tr>
        </thead>
        <tbody>
            <?php while($row = mysql_fetch_array($sqlcalcul)):?>
            <tr>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['nom'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['enddate'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['datecalcul'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['montant'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['datecalcul'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['diffdate'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['caisse'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['montjour'])?></td>
                <td bgcolor="#CCCCCC"><?php echo $hsc($row['eurodiffjour'])?></td>
                <td><font color="#B9121B"><?php echo ($datejour < $row['enddate']) ? $hsc("{$row['nom']} est en retard ! un Email lui a été envoyé !") : ''?></font></td>
            </tr>
            <?php endwhile?>
        </tbody>
    </table>
    Je te conseille de bouquiner un peu parce que tu vas aller de galère en galère.

    @plus

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 44
    Par défaut
    merci de ton conseille mais pourrais tu au moins me dire pourquoi de galère en galère pour que je puisse me diriger Merci

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 44
    Par défaut
    au faite j'aimerai a la fin de ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                <td><font color="#B9121B"><?php echo ($datejour < $row['enddate']) ? $hsc("{$row['nom']} est en retard ! un Email lui a été envoyé !") : ''?></font></td>
    faire une condition pour envoyer un mail une et une seule fois a la personne en retard en récupérant son email dans la table clients et pour cela j'ai rajouter a la table clients une colonne index si il est a 1 un email a déjà été envoyer on ne fait rien du moin (echo 'email deja envoyer' si il est a zero j'envoie un email

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $sql=mysql_query("select index from clients where nom=$hsc("{$row['nom']}")")or die ('ERREUR '.mysql_error());?>
    ceci ne marche pas j'ai une page blanche ????????

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Billets dans le blog
    12
    Par défaut
    Salut,
    Citation Envoyé par ghost73 Voir le message
    merci de ton conseille mais pourrais tu au moins me dire pourquoi de galère en galère pour que je puisse me diriger Merci
    Simple, ton code a tendance a devenir très vite illisible.
    La présentation est essentielle.
    Il faut en plus chercher à séparer au maximum dans tes pages le code de traitement (php) du code de présentation (html) du code de mise en page (css) (et même du code de comportement (js)). Bref, ne pas mélanger les torchons et les serviettes.
    Toi tu as tendance à tout mélanger (php + html).

    Y'a un os dans ta conception : caser l'indicateur d'envoi de mail pour un retard dans la table client est un non-sens. Imagine que ton client arrive en retard une première fois, tu passes ton drapeau à 1. Jusque là pas de problème. Maintenant, le même client a un deuxième retard, tu fais quoi ? Tu comptes ne pas lui envoyer d'email ? Et même si tu comptais le faire, tu aurais du mal dans la mesure où ton drapeau est déjà positionné à 1 : email envoyé.
    Tu devrais gérer ce suivi séparément.

    Quand je te conseille de bouquiner, c'est juste pour t'éviter des noeuds à chaque question simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $sql=mysql_query("select index from clients where nom=$hsc("{$row['nom']}")")or die ('ERREUR '.mysql_error());?>
    Tu mélanges plusieurs choses : le sql, la ressource, l'échappement html et l'échappement base de données :

    1. tu n'échappes pas les données de la même manière :
    - l'échappement au rendu d'une page (html) se fait généralement avec htmlspecialchars(),
    - l'échappement des valeurs pour une requête (MySQL ici) se fait avec mysql_real_escape_string().

    2. c'est un abus de faire $sql = mysql_query(...), ici $sql = "SELECT index FROM clients WHERE nom='".mysql_real_escape_string($row['nom'])."'"; et $exec = mysql_query($sql);, la doc php t'indique en plus d'un tas d'autres chose que mysql_query() renvoie une ressource.
    Ensuite il ne te reste plus qu'à choisir la meilleure méthode pour lire le contenu de cette ressource. Dans ton cas, je pense que mysql_result() devrait faire parfaitement l'affaire.

    3. en vertu du principe de séparation des données de traitement de la présentation, tu serais bien inspiré de remonter cette extraction avant ton code de rendu et ainsi ne pas mettre en plein milieu du html un appel à la base de données.

    Voilà, en bouquinant un peu, tu ne perdrais pas trop de temps sur ce genre de problématique.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 44
    Par défaut
    waouw ... que dire de plus ....
    je vais suivre ton conseil mais voilà ça ne fait pas longtemps que j'essaye de programmer je vais essayer ta solution demain et te dit quoi

    MERCI

  7. #7
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 44
    Par défaut
    Y'a un os dans ta conception : caser l'indicateur d'envoi de mail pour un retard dans la table client est un non-sens. Imagine que ton client arrive en retard une première fois, tu passes ton drapeau à 1. Jusque là pas de problème. Maintenant, le même client a un deuxième retard, tu fais quoi ? Tu comptes ne pas lui envoyer d'email ? Et même si tu comptais le faire, tu aurais du mal dans la mesure où ton drapeau est déjà positionné à 1 : email envoyé.
    Tu devrais gérer ce suivi séparément.


    au faite les client paient par mois. une fois qu'il paye je passe mon index a 0 et une fois en retard donc enddate<current_date j'envoie un mail et je passe l'index a 1 voilà mon idée voulais faire une fonction qui vérifie l’état de enddate et envoie le mail au besoin

  8. #8
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par ghost73 Voir le message
    au faite les client paient par mois. une fois qu'il paye je passe mon index a 0 et une fois en retard donc enddate<current_date j'envoie un mail et je passe l'index a 1 voilà mon idée voulais faire une fonction qui vérifie l’état de enddate et envoie le mail au besoin
    C'est bien ce que je disais : le suivi des paiements n'a rien à faire dans la table client.

Discussions similaires

  1. Tableau avec conditions
    Par patricklopez66 dans le forum Excel
    Réponses: 10
    Dernier message: 08/11/2016, 08h05
  2. Problème affichage tableau avec Chrome 2
    Par Erazion dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 27/05/2009, 09h53
  3. affichage tableau avec partiel
    Par penguin50 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/02/2008, 19h18
  4. affichage tableau avec struts layout
    Par imane_bennouna dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/08/2006, 11h17
  5. Affichage ligne avec condition dans /etc/passwd
    Par mzt.insat dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 17/04/2006, 21h25

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