If Elseif

Mammouth du PHP | 687 Messages

26 sept. 2013, 00:25

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 sept. 2013, 03:01

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 ;)

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

26 sept. 2013, 07:57

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 sept. 2013, 10:05

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 ;)

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

26 sept. 2013, 10:09

Merci beaucoup.
Est ce que tu pourrai me donner un exemple pour que je puisse voir comment construire la chose stp...?

Merci par avance

Mammouth du PHP | 2278 Messages

26 sept. 2013, 11:06

tu pourrais aussi te servir des fonctions date de mysql
http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 687 Messages

26 sept. 2013, 11:19

Merci.
Mais dans ce cas toutes les autres requêtes qui utilisent le while ne serot plus corrects...?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 sept. 2013, 14:46

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 ;))

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

26 sept. 2013, 16:20

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

Mammouth du PHP | 687 Messages

26 sept. 2013, 16:53

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>";
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 sept. 2013, 11:29

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 ;)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

27 sept. 2013, 11:57

Merci beaucoup.
Je vais modifier cela.

Mammouth du PHP | 687 Messages

27 sept. 2013, 12:34

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...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 sept. 2013, 14:12

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>";
    }
}
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

28 sept. 2013, 22:15

Merciiiiii.

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

J'utilise WAMP