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

EDI, CMS, Outils, Scripts et API PHP Discussion :

déclarer une clé primaire [Wamp]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    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 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut déclarer une clé primaire
    Bonjour,

    pour que mon code fonctionne, j'ai besoin de déclarer un des champs de ma table MySQL comme clé primaire ; comme je n'ai pas trouvé ça dans PHPMyAdmin, j'ai fait cette commande SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `visites` ADD PRIMARY KEY ( `ip` ) ;
    mais ça n'a pas l'air d'être pris en compte puisque le code ne marche toujours pas. Le code, c'est
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "INSERT INTO visites (ip,timestamp) VALUES('".$_SERVER['REMOTE_ADDR']."','".time()."') ON DUPLICATE KEY UPDATE timestamp = VALUES(timestamp)";
    mysqli_query($db,$query);
    et donc, si ip est déclaré comme clé primaire, une 2e visite de la même ip ne devrait pas ajouter un nouvel enregistrement, mais mettre à jour le timestamp, donc comment faire ?
    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
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Sous mysql tu dois écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "INSERT INTO visites (ip,timestamp) VALUES('".$_SERVER['REMOTE_ADDR']."','".time()."') ON DUPLICATE KEY UPDATE timestamp = '".time()."'";
    mysqli_query($db,$query);
    A la recherche d'un film : http://chercher-un-film.com

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    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 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci de me faire une réponse, mais il s'agit d'un problème de Wamp car ce code fonctionne bien en ligne ; par contre, je voudrais un peu le modifier et pour la mise au point, je voudrais la faire sous Wamp...
    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
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    J'ai pas bien compris, quel est votre besoin
    A la recherche d'un film : http://chercher-un-film.com

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Nom : 1.png
Affichages : 94
Taille : 44,5 Ko

    Nom : 2.png
Affichages : 134
Taille : 46,4 Ko

    Nom : 3.png
Affichages : 163
Taille : 56,7 Ko
    A la recherche d'un film : http://chercher-un-film.com

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    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 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Mon besoin, c'est de faire un compteur de visites, d'où la création d'une table MySQL avec les 2 champs ip et timestamp et si ip est déjà présente dans la table, plutôt que de rajouter un nouvel enregistrement, on met à jour le timestamp de l'enregistrement qui contient cet ip.

    Mais en écrivant cela, je réalise que pour le modif que j'envisage, ce principe ne fonctionne plus : en effet, jusqu'à aujourd'hui, on ne comptait que les visiteurs du jour et donc un même visiteur qui venait plusieurs fois dans la même journée n'était compté qu'une seule fois, par contre la modif que je voulais faire, c'est de compter toutes les visites, donc un même visiteur qui vient à des jours différents devrait être compté à chaque fois ; or là, ça ne serait pas le cas...
    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
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Tu dois ajouté timestamp en clé primaire aussi ou enlevé la clé primaire de l'ip
    A la recherche d'un film : http://chercher-un-film.com

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    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 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    OK, mais autant, je voudrais compter plusieurs fois la même IP si le timestamp est bien différent, autant je voudrais juste le mettre à jour s'il est rapproché ; voici ce que j'envisage : je lis la table ; si le IP est déjà présent, je lis le timestamp le plus récent et s'il est inférieur à (par exemple) une heure, je le mets à jour et sinon, je crée un nouvel enregistrement. Quand ça sera au point, je mettrai en "résolu".
    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
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Tu pourra crée une requête de teste en premier et récupéré l'ip et le timestamp le plus proche puis tu teste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //3600 pour une heure
    select * from visite where $timestamp - timestamp <= 3600 and ip = $ip
    si mysql_num_rows > 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //$data = résultat de la premiere requete
    update visite set timestamp = $timestamp where ip = $data['ip'] and timestamp = $data['timestamp']
    sinon insertion
    A la recherche d'un film : http://chercher-un-film.com

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    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 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    j'oubliais : c'est résolu :
    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
    //maj table "visites"
    $timestamp=time();
    $ip=$_SERVER['REMOTE_ADDR'];
    $query ="select ip from visites where ((".$timestamp." - `timestamp` <= 3600) and ip = '".$ip."')";
    //echo "query=".$query."<br>";
    $result=mysqli_query($db,$query);
     
    $nbre_result = mysqli_num_rows($result);
     
    if ($nbre_result==0) 
    	$query = "INSERT INTO visites (ip,timestamp) VALUES('".$_SERVER['REMOTE_ADDR']."','".time()."')";
    else
    	//$query="update visites set timestamp = ".$timestamp." where ip = ".$ip." and timestamp = ".$timestampmax ;
    	$query="UPDATE visites SET `timestamp` = '".$timestamp."' WHERE ((".$timestamp." - `timestamp`) <= 3600 AND ip = '".$ip."')";
    mysqli_query($db,$query);
    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. Déclarer une clé étrangère comme clé primaire
    Par awalter1 dans le forum Toad
    Réponses: 4
    Dernier message: 25/01/2013, 14h30
  2. déclarer une nouvelle version de Tomcat
    Par keopsk dans le forum JBuilder
    Réponses: 9
    Dernier message: 02/07/2004, 22h28
  3. [IB6][BCB5]Constituer une clé primaire !!??
    Par Sitting Bull dans le forum SQL
    Réponses: 6
    Dernier message: 23/06/2004, 16h49
  4. Comment déclarer une DataSource dans server.xml
    Par guillaume06 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 16/06/2004, 14h27
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

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