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 :

[SQL] Requête pour comparer 2 dates


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    368
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 368
    Par défaut [SQL] Requête pour comparer 2 dates
    bonjour
    j’ai un problème pour comparer 2 champs dates. Je voudrais comparer la date de fin par rapport à la date du jour. Si la date du jour est inférieure à la date de fin de la table, autorisation d’accès à la page commande, si la date du jour est supérieure à la date de fin, direction page de réabonnement.
    J’ai trouvé ce script qui fonctionne :

    <?php
    $DateExpiration="2007-12-26";
    if ((strtotime($DateExpiration) - mktime(0 , 0 , 0 , date("m") , date("d") , date("Y"))) < 0)
    echo "La date d'expiration est dépassée"; else echo"date valide";
    ?>
    mais j’ai des difficultés à l’intégrer dans ma page avec une requête. Pourriez-vous m’aider

  2. #2
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    SQL intègre très bien les calculs de date....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $SQL = 'SELECT name_abo FROM abonnement WHERE date_fin > NOW() AND id ='.$id;
    Si la requete te renvoi quelque chose, c'est que la date de fin est bien supérieure a la date du jour. Si cela ne te renvoi rien, c'est que la date de fin est dépassée pour cet abonné

    @+
    cadou

  3. #3
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Pour compléter un peu la réponse de Cadou, je dirais:

    Il y a de multiples façon de répondre à ton problème avec SQL. La solution que propose Cadou me semble assez directe, mais en fonction de ce que tu veux faire il faut adapter.

    En premier lieu, a ta place j'utliserai des TimeStamp car les comparaisons sont plus faciles.

    Ensuite j'imagine que ta date d'expiration est soit stockés dans une table de ta base, soit sous forme de Cookie dans le client, soit encore sous forme de SESSION php.

    Il faut trouver une solution adaptée a ton besoin.

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    368
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 368
    Par défaut
    salut
    merci pour vos réponses. effectivement ma date d'expiration est stockée dans une table de ma base.
    Explication: pour accéder à la commande le client doit entrer son identifiant et mot de pass, ensuite grâce à une variable de session, je veux tester si la date d'expiration de son abonnement n'est pas dépassé par rapport à la date du jour.
    si la date d'expiration est supérieure à date du jour, on continue le code de la page commande.
    si la date d'expiration est inférieure à la date du jour, il devra être redirigé vers la page de réabonnement.
    la table clients est composée du nom, prenom, adresse, cp , ville, email, mot de pass, date de saisie, date d'expiration.
    c'est pour réaliser la requête et le test que je patauge un peu.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    368
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 368
    Par défaut
    bonsoir
    voici ma réalisation, mais j'ai la fonction date_fin NOW() ne fait la difference <ou>

    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
    <?php require_once('../Connections/connexionboutique.php'); ?>
    <?php require_once('../includes/treemenus/MX_TreeMenu.inc.php'); ?>
    <?php
    //-------------------------------------------------Jeu rsRappelClient
    $colname_rsRappelClient = "1";
    if (isset($_SESSION['MM_Username'])) {
      $colname_rsRappelClient = (get_magic_quotes_gpc()) ? $_SESSION['MM_Username'] : addslashes($_SESSION['MM_Username']);
    }
    mysql_select_db($database_connexionboutique, $connexionboutique);
    $query_rsRappelClient = sprintf("SELECT ID, date_fin FROM clients WHERE email = %s  and date_fin > NOW()", $colname_rsRappelClient);
    $rsRappelClient = mysql_query($query_rsRappelClient, $connexionboutique) or die(mysql_error());
    $row_rsRappelClient = mysql_fetch_assoc($rsRappelClient);
    $totalRows_rsRappelClient = mysql_num_rows($rsRappelClient);
    //-----------------------------------------Mémorisation du ID client dans la session
    $clientID= mysql_result($rsRappelClient,0,'ID');
    $_SESSION['clientID']=$clientID;
    avez-vous une idée?

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    368
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 368
    Par défaut
    bonjour
    merci beaucoup ça fonctionne, j'ai rectifié seulement la fonction `date_fin` > NOW()
    je ne suis pas un pro en php, pourrais-tu m'aider à réaliser le code pour rediriger le client vers la page de réabonnement lorsque la date de fin est inférieure à la date du jour.
    si inférieure: redirection vers page réabonnement
    si supérieure: on continue la commande

  7. #7
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Pour ma part, j'utilise le refresh HTML. D'autres utilise header() en php. Mais le résultat est le même. Dans un cas comme dans l'autre, je te conseil de mettre exit; après la command qui te redirige. Cela permet de clore le process php (je ne connais pas les raisons exactes, mais "il faut faire comme cela c'est mieux disent les Wizards".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv=\"refresh\" content=\"2; url=http://tonurl\">
    Bon courage

  8. #8
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Pour ma part, j'utilise le refresh HTML. D'autres utilise header() en php. Mais le résultat est le même. Dans un cas comme dans l'autre, je te conseil de mettre exit; après la command qui te redirige. Cela permet de clore le process php (je ne connais pas les raisons exactes, mais "il faut faire comme cela c'est mieux disent les Wizards".
    Attention, le résultat na rien avoir.
    header() va envoyer une notification directement dans les headers HTTP disant que l'adresse a changée temporairement (ou pas). Cela a un impacte sur le référencement, la qualité de la redirection et sécurité (les redirection META ne se font pas sur tout les navigateurs).
    exit(); permet tout simplement de ne pas exécuter ni afficher le reste du code et bien faire la redirection au moment voulu évitant ainsi toute triche.

    Si tu colles un exit; après une balise <meta> tu va couper la sémantique de la page web qui ne sera donc plus standard.

  9. #9
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    368
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 368
    Par défaut
    bonjour
    avec:
    if ($row_rsRappelClient <='NOW()'){
    header('Location: reabonnement.php');
    exit;
    }
    ça fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Requête SQL : problème pour passer une date
    Par phoon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/11/2009, 07h29
  2. [SQL] Requête pour afficher des valeurs uniques
    Par gcvoiron dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/11/2007, 17h38
  3. regex pour comparer des dates, des chiffres, des nombres
    Par lex13 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/07/2007, 11h51
  4. Probleme Pour Comparer Des Dates
    Par Domingo60 dans le forum VBScript
    Réponses: 7
    Dernier message: 25/04/2007, 09h33

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