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 :

Problème de mise à jour d'une table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Problème de mise à jour d'une table
    Bonsoir, j'ai un gros problème et ça fait depuis le week end que je m'arrache les cheveux dessus.

    Voilà je voudrais faire un compteur de page (combien de fois a été vu un article). Alors j'ai rajouté champ "hit" dans ma table puis quand l'utilisateur clique sur l'article la table fait appelle à un fichier avec la méthode include qui se charge de se connecter à la base de donné et de mettre à jour le champ en ajoutant +1.

    Mais ca ne marche pas pour tout les articles. Et je ne comprend vraiment pas pourquoi !

    Voici le code :

    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
    <? require("admin/config.inc");
     
     
     
    $db = mysql_connect("$dbhost", "$dblogi", "$dbpass") or Die("Base Down !");
     
    mysql_select_db("$dbbase",$db) or Die("Base Down !");
     
     
     
    $req = MYSQL_QUERY("SELECT * FROM $TBL_RIDDIMS");
     
     
    $hit   = addslashes(stripslashes(trim($hit)));
     
    $rqt = Mysql_Query("UPDATE $TBL_RIDDIMS SET genre='$genre', titre='$titre', year='$year', auteur='$auteur', tracklist='$tracklist', date='$date', extrait='$extrait', url='$url', hit='$hit'+1 WHERE id='$id'"); ?>
    Quelqu'un peu m'aider SVP ? Je l'ai fais pour une autre table mais bizarrement rien ne marche !!! Le code est le même sauf les champs de la table.

  2. #2
    Membre averti Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Points : 392
    Points
    392
    Par défaut
    un conseil,
    ton sql, met le dans une variable.
    et fait un echo de cette variable (juste le temps de comprendre pourquoi ca plante.)

    un truc me semble bizare, hit='$hit'+1
    c'est possible que ce soit correcte (php etant tres faiblement typé)
    mais faire une addition sur un string j'evite. (mais c'est bien possible que ca ne soit pas ton erreur.)

    aussi pk un $ devant ta table ? $TBL_RIDDIMS ... juste une remarque, selon ton code ca peut etre tt a fait correcte.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    En réalité $TBL_RIDDIMS est une variable dans le fichier config.inc qui désigne la table dans la base de données.

    Je vais faire ce que tu m'as dis.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Tu m'as demandé de mettre mon SQL dans une variable mais c'est à dire ?

    Tu veux parler de la requête $rqt pour mettre à jour le champ ?

    si oui rien ne s'affiche !

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $strSQL = "SELECT * FROM '.$TBL_RIDDIMS;
    echo $strSQL;
    mysql_query($strSQL);
    ca va te permettre de voir la requête qui sera envoyée à ton mysql_query

    essaie aussi ca, pour vérifier ta valeur (voir, essayer un is_int() pour être sur du type) :

  6. #6
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, j'ai 2-3 remarques :

    1° Tu as écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $db = mysql_connect("$dbhost", "$dblogi", "$dbpass") or Die("Base Down !"); 
     
    mysql_select_db("$dbbase",$db) or Die("Base Down !");
    Tu utilises des variables, donc c'est inutiles de les mettre entre "

    Tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $db = mysql_connect($dbhost, $dblogi, $dbpass) or Die("Base Down !"); 
     
    mysql_select_db($dbbase,$db) or Die("Base Down !");
    Ca ne va pas résoudre ton problème, mais autant faire simple ;-)

    2° Comme te l'a dit XtofRoland, autant stocker te requête dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT id FROM ma_table';
    $query = mysql_query($requete);
    ...
    3° Dans une requête SQL, si tu utilises des champs de type numérique, il ne faut pas mettre de ', sinon, tu en mets

    Ton script devient
    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
    24
    <?
    require("admin/config.inc"); 
     
    $db = mysql_connect($dbhost, $dblogi, $dbpass) or Die("Base Down !"); 
    mysql_select_db($dbbase, $db) or Die("Base Down !"); 
     
    $sql = 'SELECT * FROM '.$TBL_RIDDIMS;
    $req = MYSQL_QUERY($sql); 
     
    $hit = addslashes(stripslashes(trim($hit))); 
     
    $sql = 'UPDATE '.$TBL_RIDDIMS;
    $sql .= ' SET genre=\''.$genre.'\',';
    $sql .= ' titre=\''.$titre.'\',';
    $sql .= ' year='.$year.',';
    $sql .= ' auteur=\''.$auteur.'\',';
    $sql .= ' tracklist=\''.$tracklist.'\',';
    $sql .= ' date=\''.$date.'\',';
    $sql .= ' extrait=\''.$extrait.'\',';
    $sql .= ' url=\''.$url.'\',';
    $sql .= ' hit='.($hit + 1);
    $sql .= ' WHERE id='.$id;
    $rqt = mysql_query($sql);
    ?>
    J'ai supposé que tes champs year et id étaient de type numérique

    Personnellement, je préfère les ' aux " pour les chaînes de caractères, mais tu peux les remettre si tu préfères

    Bon développement ;-)

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup !

    J'ai modifier le code comme tu m'as indiquer mais je rencontre toujours le même problème

  8. #8
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    donnes nous les résultat du et du , des fois que ...

  9. #9
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Et tu as remarqué un truc commun sur les articles qui ne sont pas mis à jour : Tu as testé la requête dans PHPMyAdmin (par exemple) :

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Sa marche très bien quand je passe par l'administration de mon site quand je rentre un chiffre dans un champ texte. Mais quand j'utilise fais la requete +1 sa foire.

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Lol le résultat qui s'affiche avec la requete en écho que tu m'as demandé sé uniquement : 1

  12. #12
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Au fait, tu es obligé de mettre à jour tous les champs :

    Tu ne peux pas faire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'UPDATE '.$TBL_RIDDIMS; 
    $sql .= ' SET hit='.($hit + 1); 
    $sql .= ' WHERE id='.$id;
    :

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Non je suis pas obligé, je veux juste mettre à jour le champ HIT

  14. #14
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    petite erreur de ma part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $strSQL = "SELECT * FROM ".$TBL_RIDDIMS;
    echo $strSQL;
    mysql_query($strSQL);
    (une double quote au lieu d'une simple lors de la concaténation)

    toutes mes excuses

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Merci apparement sa marche le code que tu viens de me donner ! Je te remerci énormément ! Maintenant je vais tester sur les autres tables.

    merci encore beaucoup beaucoup !

  16. #16
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Citation Envoyé par titoumimi
    une double quote au lieu d'une simple lors de la concaténation
    Euh, c'est pas la même chose :

  17. #17
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    bah j'avait commencé ma chaine par une double, mais fini par une simple... forcément, il a pas apprécié la plaisanterie

  18. #18
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Ah, ok, j'avais pas vu, je croyais que tu disais que pour concaténer il fallait des doubles quotes obligatoirement

    Mille excuses

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Sa marche impec, mais quel etait alors le problème detout cela ?

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

Discussions similaires

  1. Problème mise à jour d'une table? Je ne comprends pas
    Par toutounesan dans le forum WinDev
    Réponses: 46
    Dernier message: 08/01/2011, 22h40
  2. [AC-2000] Problème de mise à jour d'une table
    Par elfike dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/09/2010, 20h27
  3. Réponses: 2
    Dernier message: 14/05/2007, 11h45
  4. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 15h46
  5. mise à jour d'une table d'interbase sous delphi
    Par kouraichi35 dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/10/2004, 14h09

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