Page 1 sur 2

If Elseif

Posté : 26 sept. 2013, 00:25
par orell1
Bonsoir,

je souhaiterai afficher une image en fonction du résultat d'une requête...
En gros :
Si le résultat de la requête est compris entre aujourd'hui et il y a 14 jours alors j'affiche statut_oui.png
Sinon Si le résultat de la requête est compris entre 14 jours et 21 jours alors j'affiche statut_peut_etre.png
Sinon Si le résultat de la requête est supérieur à 21 jours alors j'affiche statut_non.png

voici ce que j'ai fait :
 
$today =  date("Y-m-d", time());
$il_y_a_14_jours = date('Y-m-d', strtotime($today.' -14 days'));
$il_y_a_21_jours = date('Y-m-d', strtotime($today.' -21 days'));

while ($rech_ent = @mysql_fetch_array($result)) {

if($rech_ent['client_appele_le'] > $today && $rech_ent['client_appele_le'] < $il_y_a_14_jours) 
echo "<tr><td class='fond'><img src='images/statut_oui.png'></td>";

elseif($rech_ent['client_appele_le'] > $il_y_a_14_jours && $rech_ent['client_appele_le'] < $il_y_a_21_jours) 
echo "<tr><td class='fond'><img src='images/statut_peut_etre.png'></td>";

elseif($rech_ent['client_appele_le'] > $il_y_a_21_jours) 
echo "<tr><td class='fond'><img src='images/statut_non.png'></td>";
}
Problème c'est toujours statut_non.png qui s'affiche...

quelqu'un a une idée d'où ça peut venir?
Merci par avance.

Cordialement.

Re: If Elseif

Posté : 26 sept. 2013, 03:01
par moogli
Salut,

Tu compare des chaînes de caractère avec des opérateurs mathématique c'est pas logique comme façon de faire ;)
Soit tu utilise les timestamp que tu obtient avec les strtotime )as tu vérifié que les date retournées étaient bonnes ?
Soit tu utilise la classe DateTime qui te fournit pas mal de possibilité de calcul sur les dates ;)

@+

Re: If Elseif

Posté : 26 sept. 2013, 07:57
par orell1
Merci pour ta réponse.
J'avais bien vérifié la redite retourne bien le bon format de date...
Ma base accueil les dates en DATETIME...

Du coup il faut que je fasse :
If {}
Elseif {}
Else {}

???

Merci par avance

Re: If Else if

Posté : 26 sept. 2013, 10:05
par moogli
Oui if / else if / else tu es sur d'avoir le cas par défaut.
Ensuite pour comparer des dates ce n'est pas une question de "if" mais d'épouser les bonne méthode.
Ce que tu fait revient a faire
If ('une chaîne' < 'une autre chaîne')
Tu ne ferais cetainet pas ce yod de comparaison (qui ne devrait pas être vrai car cela revien a demander si 1 < 1.

Donc soi tu compare des timestamps (qui sont des entiers) soit tu utilise les objets DateTime / DateInterval pour le faire.
Ceci en fonction de tes habitudes bien sur ;)

@+

Re: If Elseif

Posté : 26 sept. 2013, 10:09
par orell1
Merci beaucoup.
Est ce que tu pourrai me donner un exemple pour que je puisse voir comment construire la chose stp...?

Merci par avance

Re: If Elseif

Posté : 26 sept. 2013, 11:06
par sirakawa
tu pourrais aussi te servir des fonctions date de mysql
http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Re: If Elseif

Posté : 26 sept. 2013, 11:19
par orell1
Merci.
Mais dans ce cas toutes les autres requêtes qui utilisent le while ne serot plus corrects...?

Re: If Elseif

Posté : 26 sept. 2013, 14:46
par moogli
Pense a ce que tu veux :
- afficher une image en fonction de la date du dernier rappel.
Les données utilisées ici ne le seront que pour cette requête.
Ensuite il te faut faire la différence entre la date du jour et les date fournie par la requête.
Je t'ai fournis deux possibilités et sirakawa une. Toutes trois s'applique pour cette requête uniquement.
Rien ne t'empêche d'ajouter une colonne calculée contenant le nombre te jour entre maintenant le champs en base.

Pour info le test de ton if me semble foireux vu que tu demande si le dernier rappel est dans le futur (superieur a today).


As tu compris pourquoi ton code ne peux fonctionner tel qu'il est ? (En dehors de la remarque ci dessus ;))

@+

Re: If Elseif

Posté : 26 sept. 2013, 16:20
par orell1
merci...

Voilà j'ai refait ça :
if($rech_ent['client_appele_le'] < $today && $rech_ent['client_appele_le'] < $il_y_a_14_jours) {
echo "<tr><td class='fond'><img src='images/statut_oui.png'></td>";
}
elseif($rech_ent['client_appele_le'] > $il_y_a_14_jours && $rech_ent['client_appele_le'] < $il_y_a_21_jours) {
echo "<tr><td class='fond'><img src='images/statut_peut_etre.png'></td>";
}
else {
echo "<tr><td class='fond'><img src='images/statut_non.png'></td>";
}
ça ne fonctionne toujours pas... je ne comprends pas, c'est usant! MDR

Re: If Elseif

Posté : 26 sept. 2013, 16:53
par orell1
Je viens de faire ceci, à priori cela fonctionne, vous pouvez me confirmer que mon codage est correct?

Merci par avance.

Cordialement.
if($rech_ent['client_appele_le'] >= $il_y_a_14_jours) {
echo "<tr><td class='fond'>$test<img src='images/statut_oui.png'></td>";
}
elseif ($rech_ent['client_appele_le'] >= $il_y_a_21_jours) {
echo "<tr><td class='fond'>$test<img src='images/statut_peut_etre.png'></td>";
}
else {
echo "<tr><td class='fond'>$test<img src='images/statut_non.png'></td>";
}

Re: If Elseif

Posté : 27 sept. 2013, 11:29
par moogli
Si j'ai bien compris tu veux

Afficher oui si le rappel date de max 14 jours
Afficher peux être si rappel entre 14 et 21 jours
Nous au delà

Donc je vois que dans le if la comparaison n'est pas bonne (tu as mis supérieur ou égale)
Le else if doit contenir une "double" condition (date entre 14 et 21)
Le else ben ça va ;)


@+

Re: If Elseif

Posté : 27 sept. 2013, 11:57
par orell1
Merci beaucoup.
Je vais modifier cela.

Re: If Elseif

Posté : 27 sept. 2013, 12:34
par orell1
Bon je viens de modifier en mettant ceci :
if($rech_ent['client_appele_le'] < $il_y_a_14_jours) {
echo "<tr><td class='fond'>$test<img src='images/statut_oui.png'></td>";
}
elseif ($rech_ent['client_appele_le'] > $il_y_a_14_jours && $rech_ent['client_appele_le'] < $il_y_a_21_jours) {
echo "<tr><td class='fond'>$test<img src='images/statut_peut_etre.png'></td>";
}
else {
echo "<tr><td class='fond'>$test<img src='images/statut_non.png'></td>";
}
Et malheureusement cela ne fonctionne pas, je ne comprends vraiment pas la...

Re: If Elseif

Posté : 28 sept. 2013, 14:12
par moogli
tu peux tester quelque chose comme sa
<?php

$today = new DateTime();

while ($rech_ent = mysql_fetch_array($result)) {
    // Dépend du format dans ta base, tu peux le forcer avec la fonction mysql date_format
    $p14days = DateTime::createFromFormat('d-M-Y', $rech_ent['client_appele_le']);
    $p21d = clone $p14days;
    $p14days->add(new DateInterval('P14D'));
    $p21d->add(new DateInterval('P21D'));

    if ($today > $p21days) {
        echo "<tr><td class='fond'><img src='images/statut_non.png'></td>";
    } else if ($today > $p14days) {
        echo "<tr><td class='fond'><img src='images/statut_peut_etre.png'></td>";
    } else {
        echo "<tr><td class='fond'><img src='images/statut_oui.png'></td>";
    }
}

Re: If Elseif

Posté : 28 sept. 2013, 22:15
par orell1
Merciiiiii.

je viens d'essayer et j'ai cette erreur: Fatal error: __clone method called on non-object in D:\

J'utilise WAMP