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 :

insérer une date dans une table dans un format compréhensible [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut insérer une date dans une table dans un format compréhensible
    Pour faire un test, je souhaite insérer dans une bdd des dates ; la valeur insérée est au format timestamp, par contre je souhaite que la saisie soit en clair. J'ai décidé de rajouter un peu de code PHP afin que l'utilisateur (moi) puisse saisir la date en clair, qu'elle soit ensuite convertie en timestamp et enfin insérée dans la bdd. Les 2 premières étapes sont au point mais pas la 3e et dernière car dans la bdd, ça m'insère 0000-00-00 00:00:00 :
    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
    <form method="post" action=""><table>
    <tr><td>année</td><td><input type="number" name="year"></td></tr>
    <tr><td>mois</td><td> <input type="number" name="month"></td></tr>
    <tr><td>jour</td><td> <input type="number" name="day"></td></tr>
    </table>
    <input type="submit" value="Envoyer" />
    </form>
    <?php
    if ((($_POST["year"])!="") && (($_POST["month"])!="")&&(($_POST["day"])!="")) 
    {
    /* conversion date en timestamp */
    $timestamp = new DateTime($_POST['day']."-".$_POST['month']."-".$_POST['year']); 
    $req="INSERT INTO visites (timestamp) VALUES('".$timestamp->getTimestamp()."')";
    $result=mysqli_query($db,$req);
    }
    else echo "remplissez tous les champs !<br/>";
    ?>
    quel est le bug ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    comme ça :
    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
    if (empty($_POST['year']) || empty($_POST['month']) || empty($_POST['day']))
    {
        echo "remplissez tous les champs !<br/>";
    }
    else
    {
        $date = new \DateTime($_POST['year'].'-'.$_POST['month'].'-'.$_POST['day']);
        if ($date === false)
        {
            echo 'Date invalide';
        }
        else
        {
            $sql = "INSERT INTO visites (`timestamp`) VALUES ('".$date->format('Y-m-d')."')";
            $qry = mysqli_query($db, $sql);        
        }
    }

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci de me proposer un truc, au début ça marchait pas, mais c'est sûr que sans se connecter à la bdd, c'est difficile...et il y a quand même un petit bug dans ton code : $date->format('Y-m-d') marche mieux que $timestamp->format('Y-m-d')...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Hier soir, ça ne marchait pas et j'ai pas compris (aucun message d'erreur mais pas d'insertion d'enregistrement), mais ce matin, ça marche...

    Au fait, y avait un autre bug dans ton code : if (empty($_POST['year']) || empty($_POST['month']) || empty($_POST['day'])) plutôt que
    if (empty($_POST['year']) && empty($_POST['month']) && empty($_POST['day']))Et pour ne pas réintroduire un bug par copier-coller, le code corrigé :
    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
    if (empty($_POST['year']) || empty($_POST['month']) || empty($_POST['day']))
    {
        echo "remplissez tous les champs !<br/>";
    }
    else
    {
        $date = new DateTime($_POST['year'].'-'.$_POST['month'].'-'.$_POST['day']);
        if ($date === false)
        {
            echo 'Date invalide';
        }
        else
    	{
    		$sql = "INSERT INTO visites (`timestamp`) VALUES ('".$date->format('Y-m-d')."')";
            $qry = mysqli_query($db, $sql);       
        }
    }
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ouaip, merci

    Je devais être paumé dans ma tête quand j'e t'ai répondu.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Ce soir, plus résolu !

    En effet, plus rien n'est inséré dans la table ; pourtant le code est exactement le même que celui de la discussion #4 (où j'ai renommé la colonne en "timestamp1" pour ne pas utiliser un mot-clé), la requête est : INSERT INTO visites (`timestamp1`) VALUES ('2001-09-11'), le type de la colonne "timestamp1" est timestamp, l'affichage des erreurs PHP est activé et je teste la requête avec un PDO en mode exception...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Dans ton cas, je ne vois pas l'intérêt du type TIMESTAMP ; remplace par DATE.

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bon, je viens de passer le type de la colonne de TIMESTAMP à DATE et toujours pas d'insertion...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Depuis le temps... je pense que tu es apte à déboguer un peu, non ?

    Si ça n'insère pas, ça ne vient pas du code que je t'ai filé, le problème est ailleurs.

    Essaie avec cette ligne et poste le retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qry = mysqli_query($db, $sql) or die("Erreur SQL ($sql) : ".mysqli_error($db));

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Si je me tourne vers le forum, c'est que je n'ai pas trouvé ce qui ne va pas !

    Des essais de debug, j'en ai faits : activation de l'affichage des erreurs PHP (en effet, rien), affichage de la requête (un echo) puis test de celle-ci avec une interface perso qui exécute toutes les requêtes MYSQL en PDO, mode exception,...et rien (j'ai quand même rajouté ton code avec le "die" et aucun retour). Donc la requête est syntaxiquement correcte, et donc je ne sais plus quoi regarder...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Poste la DDL de la table

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai bien fait de garder ça en mémoire : create table visites (ip VARCHAR(30),timestamp1 DATE) (pour renommer une colonne, le seul moyen trouvé (qui ne marcherait s'il fallait garder le contenu de la table), c'est un DROP table suivi d'un CREATE...)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bon on va faire avec...
    la colonne IP n'est pas définie comme NOT NULL ? Parce que si c'est le cas, tu peux insérer autant de dates que tu veux sans aucune IP correspondante.

    Si tu soumets à la main une requête d'insertion bidon, ça passe ?

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai honte , car en voulant te montrer ma requête "bidon", comme je fais un echo de la requête, j'ai voulu faire un copier-coller et j'ai vu le bug : j'avais renommé la colonne dans SQL mais pas dans le code...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/07/2015, 13h20
  2. Réponses: 8
    Dernier message: 05/12/2008, 11h43
  3. JPanel dans une JFrame ok, mais JPanel dans un JScrollPane dans une JFrame non :(
    Par FenX. dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 22/05/2008, 10h45
  4. [Dates] récupérer le mois dans une date
    Par griese dans le forum Langage
    Réponses: 3
    Dernier message: 06/06/2006, 15h25
  5. Réponses: 5
    Dernier message: 28/04/2006, 11h55

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