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 :

Problème condition de dates [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut Problème condition de dates
    Bonjour à tous.

    J'ai un problème de if, en fait je gère des actions sur un dossier et si la date de l'action que j'ajoute est la plus récente je dois mettre à jour le statut du dossier, sinon le statut du dossier n'est pas mis à jour

    Je commence donc par insérer dans ma bdd l'action (quoiqu'il arrive)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //insertion de l'action dans la bdd
     
    	$insertSQL = "insert into action(ID_TYPE_ACT, NUM_RES, MATR_EMP, NUM_DOS, REF_CON_LOC, DATE_ACT, DESC_ACT, TEL_CON_LOC, DATE_RAPPEL, ACT_PLA) values ('".$_REQUEST["ID_TYPE_ACT"]."','".$_REQUEST["NUM_RES"]."','".$_REQUEST["MATR_EMP"]."','".$_REQUEST["NUM_DOS"]."','".$_REQUEST["REF_CON_LOC"]."','".datefrancais2mysql($_REQUEST["DATE_ACT"])."','".addslashes($_REQUEST["DESC_ACT"])."','".$_REQUEST["TEL_CON_LOC"]."','".datefrancais2mysql($_REQUEST["DATE_RAPPEL"])."','".$_REQUEST["ACT_PLA"]."')";
     
    	$result = mysql_query($insertSQL) or die (mysql_error());

    ceci fonctionne bien mais j'ai préféré mettre la requête au cas ou.

    Puis je cherche la date la plus récente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	$sql2= "select max(DATE_ACT) 
    	from action, contrat c 
    LEFT  JOIN 	locataire On locataire.NUM_DOS = action.NUM_DOS
    LEFT  JOIN 	resultat ON action.NUM_RES = resultat.NUM_RES
    LEFT  JOIN	type_action ON action.ID_TYPE_ACT = type_action.ID_TYPE_ACT
    LEFT  JOIN	employe  ON action.MATR_EMP = employe.MATR_EMP
    LEFT  JOIN	contact_locataire ON  action.REF_CON_LOC = contact_locataire.REF_CON_LOC
    where
      action.NUM_DOS='".$_REQUEST["NUM_DOS"]."'
    and c.NUM_DOS = locataire.NUM_DOS 
    and c.PRINCIPAL = '1'" ; 
     
    	$result3 = mysql_query($sql2) or die (mysql_error());
    Cette requête fonctionne bien (je l'ai testé sur phpmyadmin indépendamment)

    J'ai donc fait une condition if , si la date de l'action que je veux insérer est plus récente alors je mets à jour le statut:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if($_REQUEST['DATE_ACT']>$result3)
    	{	
    	$updateStatutMandat = "update locataire m , statut_action_mandat s 
    	set m.COD_STA_DOS = s.COD_STA_DOS	
    	where s.ID_TYPE_ACT = '".$_REQUEST["ACT_PLA"]."' 
    	and m.num_dos = '".$_REQUEST["NUM_DOS"]."' ";
        //$updateStatutMandat = "update locataire m , statut_action_mandat s set m.COD_STA_DOS = s.ID_TYPE_ACT where s.COD_STA_DOS = '".$_REQUEST["ACT_PLA"]."' and m.num_dos = '".$_REQUEST["NUM_DOS"]."' ";
        $result2 = mysql_query($updateStatutMandat) or die (mysql_error());
     
        $insertSQL = "update  locataire set  DATE_MAJ =   '" .date("Y/m/d H:i:s") ."'  where NUM_DOS='".$_REQUEST["NUM_DOS"]."'";
        $result = mysql_query($insertSQL) or die (mysql_error());   	   	
    	}
    Avec un echo j'ai constaté que l'on rentrait toujours dans la boucle alors j'en viens à la conclusion que mon si déconne mais je n'arrive pas à trouver pourquoi


    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut
    Y a pas un mysql_fetch_array à faire pour $result3 avant le if ?
    $_REQUEST['DATE_ACT'] est bien au même format que ton $result3 ?

  3. #3
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result3 = mysql_query($sql2) or die (mysql_error());
    $result3 est une ressources et non pas la date que tu cherches à récupérer, il faut parcourir le résultat pour le comparer à ta date...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = mysql_fetch_assoc($result3);

  4. #4
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Merci pour vos interventions.

    J'ai modifié mon code selon vos remarques cependant dorénavant il se produit l'inverse, je ne rentre jamais dan la boucle

    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
    $result3 = mysql_query($sql2) or die (mysql_error()); 	
    	$row = mysql_fetch_assoc($result3);
     
    //si la date de la nouvelle action est plus récente que la date max alors on update le statut du mandat	
    	if($_REQUEST['DATE_ACT']>$row)
    	{
    	echo "test affiche"; 	
    	$updateStatutMandat = "update locataire m , statut_action_mandat s 
    	set m.COD_STA_DOS = s.COD_STA_DOS	
    	where s.ID_TYPE_ACT = '".$_REQUEST["ACT_PLA"]."' 
    	and m.num_dos = '".$_REQUEST["NUM_DOS"]."' ";
        //$updateStatutMandat = "update locataire m , statut_action_mandat s set m.COD_STA_DOS = s.ID_TYPE_ACT where s.COD_STA_DOS = '".$_REQUEST["ACT_PLA"]."' and m.num_dos = '".$_REQUEST["NUM_DOS"]."' ";
        $result2 = mysql_query($updateStatutMandat) or die (mysql_error());
     
        $insertSQL = "update  locataire set  DATE_MAJ =   '" .date("Y/m/d H:i:s") ."'  where NUM_DOS='".$_REQUEST["NUM_DOS"]."'";
        $result = mysql_query($insertSQL) or die (mysql_error());   	   	
    	}
    merci pour votre aide

  5. #5
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(datefrancais2mysql($_REQUEST["DATE_ACT"]) > $row['DATE_ACT']){...}

  6. #6
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Je n'ai pas vraiment compris ton code, cette partie en fait
    $row['DATE_ACT']
    pourquoi mettre 'DATE_ACT' sachant que je souhaite comparer $_REQUEST["DATE_ACT"] au résultat de ma requête sql?

    J'ai tout de même essayer d'appliquer le code mais il me dis que DATE_ACT n'est pas défini, du coup on rentre toujours dans la boucle

    Merci pour ton aide cependant

  7. #7
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonjour,

    Remplace par $row[0] ça devrait marcher.

    En fait $row est un tableau avec une case par colonne de ton select, et pour que ce soit plus simple tu peux l'utiliser en mode associatif avec le nom des champs récupéré.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $result3 = mysql_query("SELECT nom, prenom FROM Clients");
    $row = mysql_fetch_assoc($result3);
    echo 'nom : ' . $row['nom'] . '<br />
          prénom : ' . $row['prenom'];

  8. #8
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Je comprends mieux la réponse de vorace alors
    Merci pour ton intervention mais ça ne marche toujours pas, il n'a pas aimé le 0

  9. #9
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Il n'a pas aimé ? Etrange ...

    Il t'as donné une erreur ?
    Si c'est le cas peut tu nous la poster merci.

    Autre chose, fait un var_dump($row); juste avant ton if et donne nous le résultat.

  10. #10
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Résultat du vardump :

    array(1) { ["max(DATE_ACT)"]=> string(19) "2012-01-26 12:01:32" }

    Message d'avertissement :

    Notice: Undefined offset: 0 in ...

    Merci encore

  11. #11
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Alors pour le fait que le 0 ne marche pas je ne comprend pas

    Peut-être qu'il y a une option mysql à activer ?

    Par contre ça doit marcher si tu met $row["max(DATE_ACT)"]

  12. #12
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Plus d'erreurs, mais à nouveau on ne rentre plus jamais dans la boucle

  13. #13
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Si tu ne rentre plus dans la boucle c'est que t'as condition n'est pas vérifié car normalement tu récupère bien ce qui ce trouve dans ta base de données.

    Essaye ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'date 1 : ' . $_REQUEST['DATE_ACT'] . '<br />
          date 2 : ' . $row['max(DATE_ACT)'] . '<br />
    Si date 1 est bien supérieur à date 2 mais que la condition du if n'est pas vérifier je te conseille de les retransformer en date pour être sûr.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(date("Y-m-d H:i:s", strtotime($_REQUEST['DATE_ACT'])) > date("Y-m-d H:i:s", strtotime($row['max(DATE_ACT)'])));



    Edit :
    En fait pas besoin de faire aussi compliqué, vu que c'est juste pour un test :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strtotime($_REQUEST['DATE_ACT']) > strtotime($row['max(DATE_ACT)'])){ ... }

  14. #14
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    ça fonctionne!!! Enfin apparemment ,

    J'ai viré le "datefrancais2mysql" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_REQUEST["DATE_ACT"] > $row["max(DATE_ACT)"])
    Merci pour votre aide

  15. #15
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Finalement j'ai parlé un peu vite, ça ne marche mais que dans certains cas.
    Va falloir que je reprenne ça

    J'ai deux dates différentes:

    date 1 : 26/01/2012 16:36:45
    date 2 : 2012-01-26 16:36:45

  16. #16
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Est-tu capable de tester un cas qui devrait fonctionner mais qui ne fonctionne pas à coup sûr ?

    Si c'est le cas essaye de remplacer ton if par celui-ci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strtotime($_REQUEST['DATE_ACT']) > strtotime($row['max(DATE_ACT)']))
    Et essaye de nouveau.


    Edit :
    Effectivement si tu utilise deux formatage de date différent il vaut mieux passer par strtotime pour éviter ce genre d'erreur.

    Edit 2 :
    Attention ! Je viens de remarquer que les deux dates que tu a posté son identique, hors pour ton if tu fait un test sur du strictement supérieur. Il est donc normal que tu ne rentre pas dans le else pour ce cas la.

  17. #17
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    J'ai deux dates différentes:

    date 1 : 26/01/2012 16:36:45
    date 2 : 2012-01-26 16:36:45
    c'est du à ta fonction :
    datefrancais2mysql que tu as viré...
    date francais : 26/01/2012 16:36:45
    =>
    date mysql : 2012-01-26 16:36:45

  18. #18
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Merci encore pour ton aide.

    J'ai testé avec le if ça ne marche pas (on rentre toujours dans la boucle)

    Je reprend le code de quelqu'un d'autre en fait ce qui ne me facilite pas la tâche

  19. #19
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Étrange, pourtant pour moi ça fonctionne parfaitement.

    J'ai testé le code suivant :
    Code php : 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
    <?php
    $date1 = "26/01/2012 16:36:45";
    $date2 = "2012-01-26 16:36:45";
     
    echo 'Cas 1 : ';
    if($date1 > $date2)
        echo 'date1 > date2';
    else
        echo 'date1 <= date2';
     
    echo '<br />';
     
    echo 'Cas 2 : ';
    if(strtotime($date1) > strtotime($date2))
        echo 'date1 > date2';
    else
        echo 'date1 <= date2';
    ?>

    Et voici le résultat obtenue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cas 1 : date1 > date2
    Cas 2 : date1 <= date2
    Citation Envoyé par MenphisTimrid
    J'ai testé avec le if ça ne marche pas (on rentre toujours dans la boucle)
    Dans le cas actuel (deux dates identiques) tu souhaite ne pas rentrer dans la boucle, or si les deux dates sont normalement bien identique en utilisant strtotime cela devrait être bon. Comme le démontre le code ci-dessus.

    Je t'encourage à refaire un test en affichant les deux dates juste avant le if mais également dedans histoire d'être sûr...

  20. #20
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    date 1 : 25/01/2012 17:24:00
    date 2 : 2012-01-26 17:23:44

    voici un exemple, pourtant alors que la date1 est inférieure il rentre dans la boucle

    En fait on ne doit pas utiliser strtotime si?

    EDIT=> il faut que je les mette au même format non?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12
  2. probléme avec une date/string dans un CommandText
    Par critok dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/02/2005, 15h30
  3. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  4. Interbase - dbExpress -> problème avec les dates
    Par marghett dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 03h55
  5. Requete de suppression avec en condition une date
    Par PrinceMaster77 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/04/2004, 09h23

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