Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 14h48   #1
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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 :
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 :
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 :
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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 15h00   #2
Membre régulier
 
Étudiant
Inscription : octobre 2010
Messages : 92
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 92
Points : 78
Points : 78
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 ?
zeclad01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 15h04   #3
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
Code :
$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 :
$row = mysql_fetch_assoc($result3);
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 15h50   #4
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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 :
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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h32   #5
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
et comme ça :
Code :
if(datefrancais2mysql($_REQUEST["DATE_ACT"]) > $row['DATE_ACT']){...}
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 09h42   #6
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
Je n'ai pas vraiment compris ton code, cette partie en fait
Citation:
$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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 10h06   #7
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
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 :
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'];
humitake est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 11h51   #8
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 11h57   #9
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
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.
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 12h02   #10
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 12h04   #11
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
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)"]
humitake est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 12h12   #12
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
Plus d'erreurs, mais à nouveau on ne rentre plus jamais dans la boucle
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 12h19   #13
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
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 :
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 :
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 :
if(strtotime($_REQUEST['DATE_ACT']) > strtotime($row['max(DATE_ACT)'])){ ... }
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 12h22   #14
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
ça fonctionne!!! Enfin apparemment ,

J'ai viré le "datefrancais2mysql" :

Code :
if($_REQUEST["DATE_ACT"] > $row["max(DATE_ACT)"])
Merci pour votre aide
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 16h36   #15
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 16h42   #16
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
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 :
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.
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 16h51   #17
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
Citation:
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
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 16h54   #18
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 17h06   #19
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Étrange, pourtant pour moi ça fonctionne parfaitement.

J'ai testé le code suivant :
Code php :
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 :
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...
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 17h25   #20
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
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?
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h40.


 
 
 
 
Partenaires

Hébergement Web