Besoin d'un petit code source mysql php

Résolu/Fermé
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 - 21 févr. 2012 à 10:03
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 - 24 févr. 2012 à 08:22
Bonjour !
Toute mes excuses je sais que ce n'est pas ici qu'il faut demander des codes sources mais ce que je cherche j'imagine que quelqu'un peut m'aider rapidement ici; Il s'agit de vérifier la validité d'un utilisateur dans la base des données mysql à partir de php, c'est à dire si le client à par exemple payé pour un mois dès que nous sommes à l'anniversaire de son mois de paiement que son statut passe en rouge.

Voici ce que j'ai pu créer comme table client dans la base des données.
[QUOTE]CREATE TABLE IF NOT EXISTS 'site' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'dateactivation' date NOT NULL,
'datefinacitivation' date NOT NULL,
'adressesite' varchar(100) NOT NULL,
'etat' varchar(45) NOT NULL,
'emailsite' varchar(100) NOT NULL,
'ville' varchar(45) NOT NULL,
'telephone' int(15) NOT NULL,
'observation' text NOT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'idsiteinterne' ('idsiteinterne','idsiteprovider')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='dateactivation' AUTO_INCREMENT=4 ;
/QUOTE

Mon souci est que quand le client arrive dans 'datefinacitivation' que son etat passe en rouge dans mon interface.

Merci !




A voir également:

8 réponses

AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
Modifié par AssassinTourist le 21/02/2012 à 11:06
Bonjour,

Ca se fera en php (en faisant attention au format des dates !). Je vous mets la structure, à vous de mettre vos champs.

for(tous les utilisateurs affichés){ 
  $style =""; 
  if(datefinactivation > date du jour){ 
    $style = 'color:red'; 
  }else{ 
    $style = 'color:black'; 
  } 
  echo "<p style=' ".$style." >". $nom_utilisateur ."</p>"; 
}
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
21 févr. 2012 à 11:03
Tu as inversé les deux cas, mon cher.
Si datefinactivation > date du jour alors l'utilisateur est OK :)
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 11:07
Oups !
Heureusement que tu es là ;)
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 11:08
Assasin Touriste, :-)
Merci pour ton aide
voici ce que j'ai pu faire mais ce n'est pas trop concret je te montre peut être tu auras une idée...
Je n'ai pas bien saisie date du jour, à quoi ressemblera la date du jour dans mon code ?

toute mes dates sont stockée dans la base des données c'est là que je l'ai récupère.
voilà ce que j'ai essayé de faire
<?php

// information pour la connection à le DB// connection à la DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'mabase'; 

$sql = 'SELECT etat FROM 'client' WHERE id="2"';
$req2 = 'SELECT 'dateactivation'SELECT * FROM 'client'';
$req3 = 'SELECT 'dateactivation'SELECT * FROM 'client'';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data=mysql_fetch_assoc($req);

for($sql){
$style ="";
if($req2 > date du jour){
$style = 'color:red';
}else{
$style = 'color:black';
}
echo <tr><td style='.$style.'> ''.$data['idetatsite'].'';</td></tr>;
}
?>
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
21 févr. 2012 à 11:13
Comment stockes-tu tes date ? Quel format ?
Les timestamp sont les plus faciles à manipuler.
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 11:18
Je pense que c'est plus :
while($data=mysql_fetch_assoc($req))

plutôt que :
for($sql)


Sous réserve que Mihawk me corrige =)
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
Modifié par Mihawk le 21/02/2012 à 11:03
Hello glodybiss, ça fait un bail ;-)

Rien à ajouter à AssassinTourist : rien à faire au niveau de ta DB ; c'est en PHP que tu vérifieras que cette dernière est antérieure ou non à la date actuelle.

Par contre je diffère avec AssassinTourist sur la méthode de mise en place du rouge. Je déconseille vivement l'utilisation de l'attribut "style" qui a un poids CSS très fort. Mieux vaut faire varier la classe du div et prévoir donc deux classes CSS.

for(tous les utilisateurs affichés){ 
   $class ="user"; 
   if(datefinactivation > date du jour){ 
      $class .= " active_user"; 
   } else { 
      $class .= " inactive_user"; 
   } 
    echo '<p class=\"'.$class.'">'. $nom_utilisateur .'</p>'; 
} 

<style> 
   .user { 
      /* Tous les attributs communs à tous les utilisateurs */ 
   .inactive_user { 
      color:red; 
   } 
   .active_user { 
      color:green; 
   } 
</style>

Mihawk
"Tant qu'on ne fait pas, on ne sait pas."
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 11:08
Je suis d'accord, cette méthode est plus propre. Je voulais donner un exemple simple à comprendre (au niveau du code) Après, je suis d'accord que ce n'était pas la méthode la plus jolie pour mettre le texte en rouge =)
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
21 févr. 2012 à 11:12
Pas besoin de simplicité avec glodybiss, il est sur ce forum depuis un bout de temps ^^
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 11:57
Merci Mihawk moi je dirai même que ça fait une éternité , c'est gentil et j'suis très content de te revoir (Je voulais dire de revoir tes solutions, lol !)

Assassin ! Jolie comme surnom, uhm! je te remercie aussi, je prends vos sources et je travail dessus je vous donne la suite peut être avant la fin de la journée. Thanks so munch
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 11:58
Je suggère qu'on ajoute le bouton j'aime sur Commentçamarche, je voulais aimer ce que vous avez écrit mais dommage.
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 12:04
Moi aussi, j'aimerai bien m'aimer... =)
Sinon, il y a le bouton +1 lorsqu'un commentaire t'a aidé (mais bon, c'est vrai que ce n'est pas pareil)

Je suis Assassin parce que je tue des gens, pas parce que je suis méchant =) Mais merci !
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 14:38
Bonjour ! Je reviens à vous
mon code n'a pas fonctionner mais je crois que j'y suis presque
regarder à quoi ressemble ce que j'ai fait, mais je crois que s'il ne fonction pas c'est peut être parce qu'il compare les dates comme des chaines des caractères il n'y a t-il pas un fonction qui peut faire ça ?

<?php
$host = 'localhost';
$user = 'root';
$pass ='';
$db = 'mabase'; 

$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error());
mysql_select_db($db) or die ('Erreur :'.mysql_error());
//if ($link=0){
//echo "die";
//} else {echo "OK";}

$sql = 'SELECT idetatsite, dateactiv FROM cyb_site';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data=mysql_fetch_assoc($req))
{ 
   $class ="user"; 
   if($data['dateactiv'] > date("Y-m-d")){ 
      $class .= "active_user"; 
   } else { 
      $class .= "inactive_user"; 
   } 
    echo '<p class=\"'.$class.'">'.$data['idetatsite'].'';'</p>'; 
} 
?>


Aucune erreur et aucun résultat de ce que j'attends, les dates je la date d'active je la récupère dans la base des données.
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
Modifié par Mihawk le 21/02/2012 à 14:44
Je réitère ma question : sous quelle forme stockes-tu les dates dans ta DB ?
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 14:45
Tu as rajouté les classes active_user et inactive_user dans ton css ?
Sinon, qu'est-ce qu'il y a dans cette variable $data['dateactiv'] ? Quel format de la date ? C'est 21/02/2012 ou 2012-02-21 ?
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 15:56
Mihawk je stocke sous format "Date"
Assassin je j'ai bien ajouter les classses dans mon style
voici le code complet

<html>
<head>
<style type="text/css">
<!--
   .user
   {color:#333;}
      /* Tous les attributs communs à tous les utilisateurs */ 
   .inactive_user { 
      color:#996600;} 
.active_user {color:#6666;} 
-->
</style>
</head>

<body>

<?php
$host = 'localhost';
$user = 'root';
$pass ='';
$db = 'mabase'; 

$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error());
mysql_select_db($db) or die ('Erreur :'.mysql_error());
//if ($link=0){
//echo "mawa";
//} else {echo "OK";}

$sql = 'SELECT idetatsite, dateactiv FROM cyb_site';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data=mysql_fetch_assoc($req))
{ 
   $class ="user"; 
   if($data['dateactiv'] > date("Y-m-d")){ 
      $class .= "active_user"; 
   } else { 
      $class .= "inactive_user"; 
   } 
    echo '<p class=\"'.$class.'">'.$data['idetatsite'].'';'</p>'; 
} 
?>
</body></html>
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
21 févr. 2012 à 16:01
Qu'affiche : echo $data['dateactiv']; ?
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 16:06
dateactiv n'affiche rien c'est la variable qui récupère la date d'activation dans la base des données
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 16:03
Oki, d'après ce lien https://www.commentcamarche.net/contents/1056-sql-creation-de-table ta date, c'est du genre 21/02/2012.

Il faut la convertir en 2012-02-21 avant de la comparer à ta Date("Y-m-d")
J'ai souvenir de faire ça salement avec la fonction split() de php, mais peut-être existe-t-il une autre solution :$
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
Modifié par Mihawk le 21/02/2012 à 16:31
Euhhh oui :-) Bien plus pratique d'ailleurs.

<?php 
   preg_replace("#-#", "/", $data['dateactiv']); 
?>


AssassinTourist, 'va falloir te mettre aux expressions régulières !
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
21 févr. 2012 à 16:36
Il va falloir que j'utilise une expression régulière pour ça ?
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
Modifié par Mihawk le 21/02/2012 à 16:39
glodybiss par pitié écoute-nous (ou plutôt lis-nous) !

Il faut que tu demandes à PHP d'afficher le contenu de ta variable $data['dateactiv'] car dans ton code tu la compares à une date au format "2012-02-21" ; or si ça se trouve ta variable contient quelque chose comme "2012/02/21" donc les chaînes ne seront pas les mêmes, ce qui peut expliquer tes dysfonctionnements.

Dans le cas où ta variable $data['dateactiv'] contiendrait bien une date avec des slashs (et non pas des tirets) il faudrait alors utiliser le petit bout de code que j'ai posté ci-dessus afin de la mettre au bon format.

Tu suis ?
On veut bien te filer le code complet dont tu as besoin, mais ne connaissant pas le format de ta variable $data['dateactiv'], on ne peut rien pour toi.
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 16:40
Mais il faut inverser aussi ! Ca ne suffit pas de remplacer.
(et mes expressions régulières se portent très bien, merci)
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
21 févr. 2012 à 16:43
'faut inverser quoi ?!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
Modifié par Mihawk le 21/02/2012 à 16:54
Essaye ça.
J'ai juste une réserve sur le preg_replace ; si ça ne marche pas on tentera autre chose.

<?php 
$host = 'localhost'; 
$user = 'root'; 
$pass =''; 
$db = 'mabase';  

$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error()); 
mysql_select_db($db) or die ('Erreur :'.mysql_error()); 
//if ($link=0){ 
//echo "die"; 
//} else {echo "OK";} 

$sql = 'SELECT idetatsite, dateactiv FROM cyb_site'; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
while($data=mysql_fetch_assoc($req)) 
{  
   $class ="user";  
   $dateUser = intval(preg_replace("#^(\d{4})-(\d{2})-(\d{2})$#", "$1$2$3", $data['dateactiv'])); 
   $currentDate = intval(date("Ymd")); 
   if($dateUser > $currentDate){  
      $class .= "active_user";  
   } else {  
      $class .= "inactive_user";  
   }  
    echo '<p class=\"'.$class.'">'.$data['idetatsite'].'';'</p>';  
}  
?> 

Mihawk
"Tant qu'on ne fait pas, on ne sait pas."
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
21 févr. 2012 à 16:58
Moi, j'ai soudain une question bête :$
As-tu dans tes résultats de ta base quelqu'un qui nous mettrait dans le rouge à un moment ?
Sinon quand tu disais que ton code ne marchait toujours pas, tu affichais quand même le nom de l'utilisateur (c'est juste qu'il n'était pas de la bonne couleur) ?
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
23 févr. 2012 à 14:15
Bonjour vous deux,

ça fait un temps que je vous taquine mais supporter cela s'il vous plait,:-)

Mihawk, j'ai essayé d'étudier le code et maintenant j'ai un résultat sauf que celui-ci ne prend pas en charge la condition pour dire qu'il ne vérifie pas les dates dates, il ne prend que la couleur du style inactive_user même quand la date du jour est supérieur à celle qui se trouve dans la base des données. Est-ce que la condition est bien faite ? essayé de revoir encore s'il vous plait.

<html>
<head>
<style type="text/css">
<!--
   .user {color:#ff0000;background:#333;}
      /* Tous les attributs communs à tous les utilisateurs */ 
   .inactive_user { color:#fff;background:#074695;} 
.active_user {color:#000;background:#999;} 
-->
</style>
</head>

<body>

<?php 
$host = 'localhost'; 
$user = 'root'; 
$pass =''; 
$db = 'mabase';  

$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error()); 
mysql_select_db($db) or die ('Erreur :'.mysql_error()); 
//if ($link=0){ 
//echo "die"; 
//} else {echo "OK";} 

$sql = 'SELECT idetatsite, dateactiv FROM cyb_site'; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
while($data=mysql_fetch_assoc($req)) 
{  
   $class ="user";  
   $dateUser = intval(preg_replace("#^(\d{4})-(\d{2})-(\d{2})$#", "$1$2$3", $data['dateactiv'])); 
   $currentDate = intval(date("YYYY-mm-dd")); 
   if($dateUser > $currentDate){  
      $class .= " active_user";  
   } else {  
      $class .= " inactive_user";  
   }  
    echo '<p class="'.$class.'">'.$data['idetatsite'].'</p>';  
}  
?> 
</body></html>
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
23 févr. 2012 à 16:01
Ca y est c'est trouvé!

Je devais utiliser utiliser le STRTOTIME à la place de ceci : $dateUser = intval(preg_replace("#^(\d{4})-(\d{2})-(\d{2})$#", "$1$2$3", $data['dateactiv']));


Voici la correction.

$dateUser = strtotime($mysql_date);
$currentDate = time();
 
if ($dateUser < $currentDate) {
   ...
}



GRAND MERCI à Mihawk et à Assassin qui m'ont beaucoup aider pour et pour les codes sources.
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
23 févr. 2012 à 16:05
De rien !
Content de voir que tu aies pu trouver la solution finale (sans nous) =)
0
glodybiss Messages postés 440 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 29 juillet 2015 9
24 févr. 2012 à 08:22
Le grand grand travail c'est vous donc je ne peux que dire que moi je ne rien foutu. ^^
0