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 avec resultat d'un select [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut Update avec resultat d'un select
    Bonjour,

    Bien je reviens vers vous car j'ai de nouveau un problème.
    Je vous détail tout, histoire de bien visualiser la chose.

    J'ai un site avec une bdd
    Lorsque des personnes se connectent, cela enregistre dans une table un ident a incrementation automatique, l'id propre a chaque personne (inscrit au préalable), l'heure de connexion.
    Lorsqu'ils se deconnectent, je voudrais enregistrer sur la meme ligne l'heure de deconnexion (via update)

    Pour la connexion, tout va bien.
    Pour la déconnexion, je dois donc d'abord trouver le dernier ident de l'id concerné histoire de pas mettre a jour toutes les anciennes connexions mais seulement la derniere.
    Le select fonctionne bien et me donne bien le dernier ident.
    Apres je fais un update en passant l'ident en parametre et la rien ne se passe:

    mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql_test = " SELECT access_id FROM track_e_access WHERE access_user_id='" . $uid . "' ORDER BY access_id DESC LIMIT 1";
     
    $access_id_sql = api_sql_query($sql_test, __FILE__, __LINE__);
     
     $sql_access = " UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '" . $access_id_sql . "'";
     
    $result = api_sql_query($sql_access, __FILE__, __LINE__);
    Lorsque je met access_id en dure style 474 ds le code ci-dessous ca marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql =  "UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '474' AND access_user_id='" . $uid . "'";
    $sql = api_sql_query($sql_test, __FILE__, __LINE__);
    Quelqu'un verrait ou est l'erreur?
    merci bcp

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    rergarde ce que tu as dans la variable $access_id_sql
    ce n'est peut-être pas la valeur que tu cherches mais une ressource

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    pourtant j'ai bien testé le select et il me renvoie bien le dernier ident

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    exact, cela me renvoie bien une ressource(?)
    comment faire alors pour affecter le resultat d'une requete a une variable?

  5. #5
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par zorba49
    exact, cela me renvoie bien une ressource(?)
    comment faire alors pour affecter le resultat d'une requete a une variable?
    mysql_fetch_assoc, mysql_fetch_array, ...
    http://eusebius.developpez.com/phpmysql-base/#LIV
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    alors voila ce que j'ai fait mais toujours aucune mise a jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql_test = " SELECT access_id FROM track_e_access WHERE access_user_id='" . $uid . "' ORDER BY access_id DESC LIMIT 1";
     
    		 $access_id_ = mysql_query($sql_test);
    		 $access_id_sql = mysql_fetch_array($access_id,0);
     
    $sql_access = " UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '" . $access_id_sql[0] . "'";
     
    		 $result = mysql_query($sql_access, __FILE__, __LINE__);
    j'ai bien utilisé mysql_fetch_array
    mais niet

  7. #7
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Si ce sont des id numériques il ne faut pas les entourer de quotes dans ta requête.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    ce sont bien des id numeriq, j'ai enlevé les ' mais tjs rien

    par contre j'ai fait une verif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql =  "UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '489' AND access_user_id='" . $uid . "'";
     
    $result = mysql_query($sql, __FILE__, __LINE__);
    ne donne rien
    par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql =  "UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '489' AND access_user_id='" . $uid . "'";
     
    $result = api_sql_query($sql, __FILE__, __LINE__);
    ca marche nickel
    Quelle est la difference?

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    la différence, c'est qu'avec mysql_query, le deuxième argument doit être le numéro de ressource de ta connexion, et non pas __FILE__.

    après un mysql_query, il faut systématiquement ajouter or die(mysql_error()), afin d'avoir le message d'erreur.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    d'où ça sort, api_sql_query ? ça n'est pas référencé dans la doc PHP... c'est une fonction perso ? un framework ou une couche d'abstraction que tu utilises ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    je bosse sur une plateforme en open source donc ce api_sql_query a semble-t-il etait créé par le dev de cette plateforme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql_test = " SELECT access_id FROM track_e_access WHERE access_user_id='" . $uid . "' ORDER BY access_id DESC LIMIT 1";
     
    $access_id_sql = api_sql_query($sql_test, __FILE__, __LINE__);
    ce code me donne bien access_id_sql qui vaut 489

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql =  "UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '489'";
     
    $result = api_sql_query($sql, __FILE__, __LINE__);
    ce code me met bien a jour ma table a la ligne ou ident vaut 489

    et maintenant impossible de remplacer 489 par access_user_id !!!

  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    que donnent les tests suivants ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "UID : ($uid)<br>" ;
    echo "taille : " . strlen($uid) ."<br>" ;
    echo "ord : " . ord($uid) . " " . ord(substr($uid, 1) ) . " " . ord(substr($uid, 2) ). "<br>" ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    Bonjour,

    alors les tests donnent:

    echo "UID : ($uid)" => (3) c'est bon c'est bien 3 le login
    echo "taille : " . strlen($uid) => 1
    echo "ord : " . ord($uid) . " => 51
    " . ord(substr($uid, 1) ) . " => 0
    " . ord(substr($uid, 2) ). " => 0

    Voila,
    moi de mon coté tjs bloqué!!!
    merci bcp d'avance

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    quand je rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "num_enreg : ($access_id_sql)";
    aprés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql_test = " SELECT access_id FROM track_e_access WHERE     access_user_id='" . $uid . "' ORDER BY access_id DESC LIMIT 1";
    $access_id_sql= api_sql_query($sql_test, __FILE__,__LINE__);
    j'obtient =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num_enreg : (Resource id #59)
    ???

    ca veut dire quoi?

  15. #15
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    C'est normal ton sql_query te renvoie une ressource qu'il faut ensuite exploiter avec mysql_fetch_assoc par exemple (on en a déjà parlé au début de ce topic...).

    Il y a embrouille là, au tout début tu disais que $access_id_sql était une ressource, et ensuite tu dis que ça vaut bien ton id...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    ben oui, j'ai fait test sur $uid qui me renvoie bien 3 qui est dans ma bdd bien l'id de connexion
    et test sur access_id_sql qui me renvoie bien une ressource (ce que j'ai dit au debut)

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    ca y est c bon!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql_test = " SELECT access_id FROM track_e_access WHERE access_user_id='" . $uid . "' ORDER BY access_id DESC LIMIT 1";
     
    $access_id= api_sql_query($sql_test, __FILE__,__LINE__);
     
    $access_id_sql = mysql_fetch_array($access_id);
     
    $sql_access = " UPDATE track_e_access SET access_date_decon= '" . Date("H.i.s") . "' WHERE access_id = '" . $access_id_sql[0] . "'";
    merci bcp!!

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

Discussions similaires

  1. UPDATE avec le resultat d'un SELECT
    Par aelmalki dans le forum SQL
    Réponses: 9
    Dernier message: 03/03/2010, 16h39
  2. Champ recherche avec resultat dans balise select
    Par Rawone dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/11/2007, 09h19
  3. Requete Update avec Select imbriqué: etrange resultat!
    Par corentone dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/08/2007, 15h05
  4. [ SQL ] Faire un update avec un select imbriqué
    Par zozolh2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/04/2005, 12h05

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