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 :

Update d'un current_timestamp [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut Update d'un current_timestamp
    Bonjour à tous,

    Sur mon site présentant des documentaires et des séries de films documentaires, je propose à l'administrateur de mettre à jour les données de la BDD via des formulaires.

    A force de tests et d'erreurs (heureusement que j'avais sauvegardé toutes les données de ma BDD ), j'arrive à mettre à jour presque toutes les données d'une série.

    Reste que je voudrais indiquer en haut du formulaire la date de dernière mise à jour de cette série.

    Dans la table SerieDoc, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `datMajSerie` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    1. Problème d'affichage de format de date :
    Quand j'écris le code suivant, cela m'affiche "cette série a été mise à jour le 2012-06-29 10:45:26" alors que je souhaiterais "cette série a été mise à jour le 29-06-2012 à 10:45"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p> cette série a été mise à jour le <?php echo $datMajSerie;?> </p>
    2. Problème d'update du current_timestamp :
    Alors que toutes les autres données de la séries sont bien updatées, ce n'est pas le cas avec la datMajSerie qui se met à 0000-00-00 00:00:00.

    Mon code (qui ne fonctionne pas) :

    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
    18
    19
    20
    21
    22
    23
    <?php
    //--------------------------------------------------
    //	update nomSerieDoc_fr,nomSerieDoc_en,datSerie,txtSerieDoc_fr,txtSerieDoc_en,nbDocsSerie
     
    $nomSerieDoc_fr=mysql_real_escape_string ($_POST ["nomSerieDoc_fr"]);  // mysql_escape_string permet d'entrer des apostrophes
    $nomSerieDoc_en=mysql_real_escape_string ($_POST ["nomSerieDoc_en"]);
    $datSerie=mysql_real_escape_string ($_POST ["datSerie"]);  
    $txtSerieDoc_fr=mysql_real_escape_string ($_POST ["txtSerieDoc_fr"]);
    $txtSerieDoc_en=mysql_real_escape_string ($_POST ["txtSerieDoc_en"]);
    $nbDocsSerie=mysql_real_escape_string ($_POST["nbDocsSerie"]);
    $datMajSerie=mysql_real_escape_string ($POST["datMajSerie"]);
     
    $sqlUpdateSerie=mysql_query("
    UPDATE serieDoc SET 
    nomSerieDoc_fr = '".$nomSerieDoc_fr."', 
    nomSerieDoc_en = '".$nomSerieDoc_en."', 
    datSerie =  '".$datSerie."',
    txtSerieDoc_fr = '".$txtSerieDoc_fr."', 
    txtSerieDoc_en = '".$txtSerieDoc_en."', 
    nbDocsSerie = '".$nbDocsSerie."',
    datMajSerie = '".$datMajSerie."'
    WHERE idSerieDoc = '".$idSerieDoc."'
    ");
    Merci d'avance à celui ou celle qui m'aidera

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Pour le 1) regardes du côté de 'date'
    Pour le 2) .... de 'mktime'

    Suite pour le 1) date('m-d-Y \à H:m', $varTaDate);

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 179
    Par défaut
    T'as essayé pour le current_timestamp de le rentrer directement dans la requete ? (et pas en paramétré) Il me semble que j'avais eu le même soucis.

  4. #4
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Bonjour Fench et Tanoak_LaCapuche et merci pour vos réponses

    Bon, alors j'ai résolu mon 2. :
    C'est Tanoak_LaCapuche qui m'a mise sur la voie parce que je ne comprenais pas trop le "pas en paramétré".
    En fait, il ne faut pas faire l'update en php, il faut changer le mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `datMajSerie` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `datMajSerie` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    Du coup, lors de l'update du reste (j'ai viré $datMajSerie=mysql_real_escape_string ($POST["datMajSerie"]); et datMajSerie = '".$datMajSerie."'), la datMajSerie se met à jour toute seule .

    Pour le 1. :

    J'ai déjà regardé Date mais (comme beaucoup de débutants semblerait-il) je ne comprends que rarement la doc officielle et sur les forums je n'ai pas trouvé ce que je cherche.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $datMajSerie = $date = date['d'].'/'.date['m'].'/'.date['Y'].' - '.date['H'].':'.date['i']; ?>
    mais ça ne marche pas..

  5. #5
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $datAffiche =  date('m-d-Y \à H:m', $datMajSerie);
    avec $datMajSerie provenant de la date de ta base de donnéee (a essayer )

  6. #6
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Ça marche pas non plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php 
    $datAffiche =  date('m-d-Y \à H:m', $datMajSerie); 
    echo '<p> cette série a été mise à jour le  '.$datAffiche.'</p>';
    donne une erreur "Notice: A non well formed numeric value encountered"

  7. #7
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut, le format de stockage des types date et datetime est toujours américain (yyyy-mm-dd ou yy-mm-dd) pour une question de classement des dates...

    c'est à toi de le formater lors de l'affichage comme tu veux avec date() comme te le propose fench par exemple coté php ou avec une fonctions mysql qui format la date coté mysql

    le problème est qu'il faut comprendre que le format restitution ne correspond pas souvent avec le stockage réel des données

    pour les dates et heures tu n'as que texte formaté ou un timestamp unix coté php et coté mysql tu as aussi ces 2 types mais en plus tu as date, datetime et time...

    attention en php il y a aucune conversion implicite et en sql seulement de texte format américain vers les type natif date, datetime et time

    en espérant que ça devient plus clair dans ta tête...

  8. #8
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Si $datMajSerie est un TimeStamp, normalement c'est bon (je vais tester pour voir, j'ai 5mn) ... juste une petite erreur sur le format: c'est H:i


    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $datMajSerie=mktime();
    $datAffiche =  date('d-m-Y \à H:i', $datMajSerie); 
    echo '<p> cette série a été mise à jour le  '.$datAffiche.'</p>';
    ?>
    ça marche bien alors regardes du côté de $datMajSerie


    Autre rq: La classe dateTime est utilisable qu'avec PHP5.2 et sup

  9. #9
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Super merci pour ton aide Fench

    Si $datMajSerie est un TimeStamp, normalement c'est bon (je vais tester pour voir, j'ai 5mn) ... juste une petite erreur sur le format: c'est H:i
    Alors oui, sûr que $datMajSerie est un current_timestamp.
    Par contre, j'ai changé le m par un i et l'erreur est tjs la même chez moi.

    Edit : ta réponse est arrivée pdt que j'écrivais, j'essai et j'édite à nouveau

  10. #10
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    alors, oui et non ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $datMajSerie=mktime();
    $datAffiche =  date('d-m-Y \à H:i', $datMajSerie); 
    echo '<p> cette série a été mise à jour le  '.$datAffiche.'</p>';
    affiche les choses dans l'ordre souhaité mais, ça affiche, non pas la date de mise à jour mais la date du moment semblerait-il...

    ex : cette série a été mise à jour le 02-07-2012 à 15:55

    Heureusement, ça ne modifie pas la BDD

  11. #11
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Je viens de voir un truc: comment tu initialises $datMajSerie, ça vient du $_POST comme vu dans le bout de code plus haut ?

  12. #12
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    En fait, je commence par faire une requête pour afficher l'existant dans le formulaire et j'en profite pour sortir mon $datMajSerie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $req = "SELECT * FROM serieDoc WHERE idSerieDoc='" . mysql_real_escape_string($_GET['idSerieDoc']) ." LIMIT 1;'";
    $result = mysql_query($req);
     
    if(mysql_num_rows($result) == 1) {
    	$db = mysql_fetch_assoc($result);
    }
    else {
    	$db = array();
    }
    $datMajSerie = $db['datMajSerie'];
    Edit : comme je n'en avais plus besoin pour l'update du timestamp (qui se fait maintenant tout seul), j'ai viré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datMajSerie=mysql_real_escape_string ($POST["datMajSerie"]);

  13. #13
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Citation Envoyé par StephBretagne Voir le message
    alors, oui et non ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $datMajSerie=mktime();
    $datAffiche =  date('d-m-Y \à H:i', $datMajSerie); 
    echo '<p> cette série a été mise à jour le  '.$datAffiche.'</p>';
    affiche les choses dans l'ordre souhaité mais, ça affiche, non pas la date de mise à jour mais la date du moment semblerait-il...

    ex : cette série a été mise à jour le 02-07-2012 à 15:55

    Heureusement, ça ne modifie pas la BDD
    C normal, j'ai pris mktime() sans rien donc il va prendre la date courante

    Bon je crois avoir compris ton problème:
    $datMajSerie = $db['datMajSerie']; j'imagine que tu l'utilises pour l'affichage à la base ... donc il n'es plus en timeStamp.

    Dans ce cas donnes moi un echo de cette variable et je te le modifie au format que tu veux.

  14. #14
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<p> cette série a été mise à jour le '.$datMajSerie.'</p>';
    donne

    cette série a été mise à jour le 2012-04-15 21:21:46

  15. #15
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dateF = substr($datMajSerie, 8, 2).substr($datMajSerie, 4, 4).substr($datMajSerie, 0, 4)." à ".substr($datMajSerie, 11, 5)
    par exemple ...


    Ou alors plus joli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    date("d-m-Y H:i", strtotime($datMajSerie));

  16. #16
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    tu peux le formater à l'affichage avec mysql genre:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "select date_format(datMajSerie,'d/m/Y H:i:s') as `datMajSerie` FROM serieDoc WHERE idSerieDoc='" . mysql_real_escape_string($_GET['idSerieDoc']) ." LIMIT 1;'"

    il faut vraiment que tu arrêtes d'utiliser * dans tes requêtes select:
    tu ne contrôle rien de ce que tu ramènes et ta requête est dépendante de la structure de la table et te ramème tout un tas de colonne éventuellement pour rien...

  17. #17
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Et ouiiiiiiiiiiiiiiii

    donc, je récapitule pour ceux qui chercheront à faire la même chose que moi :

    1. l'update du current-timestamp se fait directement dans mySql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `datMajSerie` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    2. Si la date de mise à jour est présente dans la BDD et qu'on l'appelle via une requête de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $req = "SELECT * FROM serieDoc WHERE idSerieDoc='" . mysql_real_escape_string($_GET['idSerieDoc']) ." LIMIT 1;'";
    $result = mysql_query($req);
     
    if(mysql_num_rows($result) == 1) {
    	$db = mysql_fetch_assoc($result);
    }
    else {
    	$db = array();
    }
    $datMajSerie = $db['datMajSerie'];
    alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dateF = substr($datMajSerie, 8, 2).substr($datMajSerie, 4, 4).substr($datMajSerie, 0, 4)." à ".substr($datMajSerie, 11, 5);
    echo '<p> cette série a été mise à jour le '.$dateF.'</p>';
    Affichera : cette série a été mise à jour le 02-07-2012 à 17:03




    ps je n'ai pas réussi à utiliser le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date("d-m-Y H:i", strtotime($datMajSerie));
    ----

    Vraiment, Fench, je te dois beaucoup, super merci une nouvelle fois !!!
    (et j'espère pour toi qu'il fait moins froid au Groënland qu'en Bretagne )

  18. #18
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    il faut vraiment que tu arrêtes d'utiliser * dans tes requêtes select
    Tu as raison Eric.
    D'ailleurs, quand je n'utilise pas TOUTES mes colonnes comme dans le cas présent qui est un formulaire d'édition de toutes les données de la table série, je n'utilise pas *

  19. #19
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Citation Envoyé par ericd69
    tu peux le formater à l'affichage avec mysql genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "select date_format(datMajSerie,'d/m/Y H:i:s') as `datMajSerie` FROM serieDoc WHERE idSerieDoc='" . mysql_real_escape_string($_GET['idSerieDoc']) ." LIMIT 1;'"
    Me revoila car j'ai eu envie d'essayer l'intéressante solution d'Eric ailleurs que pour le formulaire d'édition.
    Dans cette nouvelle page, je n'utilise pas un select* car je n'ai pas besoin de toutes les colonnes.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $req = "SELECT idSerieDoc, date_format(datMajSerie,'d/m/Y H:i:s') as datMajSerie FROM serieDoc WHERE idSerieDoc=$idSerieDoc";
     
    $result = mysql_query($req);
    $rows = mysql_fetch_assoc($result);
     
    echo '<p> Dernière mise à jour le '.$rows['datMajSerie'].'</p>';
    Or, au lieu de m'afficher la date, cela m'affiche : "Dernière mise à jour le d/m/Y H:i:s"

    Eric, pourrais-tu me dire ce qui cloche ? Merci d'avance.

  20. #20
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Tu sais cette solution est la même que celle utilisé avec date ... que ce soit dans ou hors la requête.

    En attendant que Eric revienne, tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (($timestamp = strtotime($datMajSerie)) === false) {
       echo "La chaîne ($datMajSerie) est boguée";
    } else {
       echo "$datMajSerie== " . date("d-m-Y H:i", $timestamp);
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. on update current_timestamp ?
    Par tintinux dans le forum Débuter
    Réponses: 4
    Dernier message: 15/02/2011, 20h38
  2. ON UPDATE CURRENT_TIMESTAMP
    Par Ptit_bouchon dans le forum Administration
    Réponses: 3
    Dernier message: 03/12/2008, 23h15
  3. default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    Par camyo dans le forum Installation
    Réponses: 11
    Dernier message: 27/03/2006, 16h33
  4. Réponses: 3
    Dernier message: 10/11/2002, 11h03
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

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