PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 20-07-2011 18:28:11

noobduphp
Membre
Inscription : 20-07-2011
Messages : 5

Problème de date PHP/Mysql

Bonjour,
Voila, je dois réaliser un formulaire, le but de cette page php est de m'afficher les personnes "inscrites" dans ma base de donnée depuis entre 6 et 7 mois.
En gros, je veut une page qui m'affiche l'email, le prénom, le nom et la date d'inscription + 6mois si cela fait entre 6 et 7 mois que le client est nouveau hmm.
L'objectif étant d'envoyer un mail à l'inscrit 6 mois après.:rolleyes:
Du coup, je peut faire sa tout les mois (7-6).
Indications:
Page indépendante, il y aura seulement un lien dans la page d'acceuil, donc pas de transmition d'information.
Les dates enregistrées sont en "mode USA".
La "Datedecreation" est le champ contenant la date d'"inscription" du contact.
Si je ne vous ai pas souler avec tout ça et si vous avez la réponse répondez moi svp ^^.
Voici mon code:


    $reponse = $bdd->query('SELECT Nom, Prenom, Mail, DATE_ADD(Datedecreation, INTERVAL 6 MONTH) AS datedecreation1, DATE_ADD(Datedecreation, INTERVAL 7 MONTH) AS datedecreation2 FROM expf  WHERE CURRENT_DATE <= datedecreation2 AND CURRENT_DATE >= datedecreation1 ORDER BY datedecreation1 DESC');

        echo "Voici la liste des contacts associées a leurs date limite:";
        echo '<br />';


       while ($donnees = $reponse->fetch())
    {   
        echo $donnees['Nom'];
        echo $donnees['Prenom'];
        echo $donnees['Mail']
               echo $donnees['datedecreation2'].'<br />';
    }

Le souci: roll Avec ce code, aucun de mes contacts ne sont visibles, j'ai essayer en créant un contact bidon puis en remplaçant 6 month par 1 seconde et 7 month par 1 hour...
Mais rien ne s'affiche, j'ai ajouté les champs suivants dans ma base de donnée: datedecreation1 et datedecreation2.
J'ai essayé avec des echo et les variable datedecreation1 et datedecreation2 sont bien Datedecreation+6mois et Datedecreation+7mois.
D'habitude en bidouillant je m'en sors... mais là...
Voila je voulais des avis extérieurs sur ce bout de code et quelques réponses, merci ^^

Hors ligne

#2 20-07-2011 20:28:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème de date PHP/Mysql

Bonjour,

C'est pas compliqué, suffit de mettre ta requete à la poubelle. Défini tes champs datecreation en datetime ou timestamp avec default=current_timestamp. Si c'est déjà fait, ensuite te reste à faire un between avec tes dates sur lesquelles tu appliques un datediff avec now() dans ta clause WHERE.

++

Dernière modification par Jc (20-07-2011 20:28:56)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 20-07-2011 20:43:43

noobduphp
Membre
Inscription : 20-07-2011
Messages : 5

Re : Problème de date PHP/Mysql

Je peut modifier datedecreation1, mais le 2 me donne ça:
en datetime:

MySQL a répondu: Documentation
#1067 - Invalid default value for 'datedecreation2'

en timestamp:

MySQL a répondu: Documentation
#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

Hum, je vois ou tu veut en venir a peu près, mais, le BDD n'en fait qu'a sa tête wink

Merci de ta réponse précise et rapide

Dernière modification par noobduphp (20-07-2011 20:45:02)

Hors ligne

#4 20-07-2011 22:11:59

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème de date PHP/Mysql

C'est normal,

Une seule date creation = 1 seul time stamp en defaut current_timestamp = pas d'erreur.
Seul un timestamp et seul le premier défini peut avoir cette définition. C'est une aberration d'avoir deux champs datecreation dans une table.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 20-07-2011 22:35:09

noobduphp
Membre
Inscription : 20-07-2011
Messages : 5

Re : Problème de date PHP/Mysql

Ok, merci, je vais essayé et je te redis ^^

Hors ligne

#6 21-07-2011 08:30:23

noobduphp
Membre
Inscription : 20-07-2011
Messages : 5

Re : Problème de date PHP/Mysql

Hum...
Désolé mais je suis pas très doué ^^
alors voici ma nouvelle requete:
    $reponse = $bdd->query('SELECT Nom, Prenom, Mail FROM expf WHERE Datedecreation BETWEEN DATEDIFF(NOW(), INTERVAL 6 MONTH) AND DATEDIFF(NOW(), INTERVAL 7 MONTH)');
Mais il y une erreur apparement au niveau de la syntaxe...


Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND DATEDIFF(NOW(), INTERVAL 7 MONTH)' at line 1


Hé sinon le champ a mettre en current_timestamp c'est bien le Datecreation, où mes dates sont enregistrées grâce au formulaire via ma BDD?

Dernière modification par noobduphp (21-07-2011 08:32:22)

Hors ligne

#7 21-07-2011 11:41:41

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème de date PHP/Mysql

Bonjour,

Le current_timestamp est bien à mettre sur le datecreation. Ainsi si tu crée un enregistrement dont la date de création coïncide avec la date de création de ton enregistrement, tu ne précises pas dans ta requête d'insertion ton champ datecreation et cela se fait automatiquement. Par contre, dans le cas ou tu enregistres des enregistrements qui ont été crées à une date x, suffit de le préciser en l'incluant dans ta requête et cela sera ok.

Pour ta requête il faut faire : "WHERE Datedecreation BETWEEN DATE_SUB(NOW(), INTERVAL 7 MONTH) AND NOW()"

Voilà

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#8 21-07-2011 13:16:27

noobduphp
Membre
Inscription : 20-07-2011
Messages : 5

Re : Problème de date PHP/Mysql

Cooooool, ça marche ^^ et en plus j'ai compris !!! wink
Encore merci pour ton aide Jc!

Hors ligne

Pied de page des forums