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

Langage PHP Discussion :

Insertion anormale


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut Insertion anormale
    Bonjour,
    j'ai un compteur de visite qui est censé incrémenter 3 variables dans un base de donnée :
    l'ip du visiteur, la date, et une variable qui se trouve dans l'url, l'embettent c'est que la syntaxe sql incrémente quelques fois 0 a la place de la variable, dans la base.
    Si vous savez pourquoi ...

    Merci

  2. #2
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Salut,
    plusieurs causes peuvent causer ce comportent, peux t-on voir la portion de code qui fait cette mise à jour ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    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
     
     
    $id = $_GET['id'];
    $var = $_GET['var'];
     
    $ip = $_SERVER['REMOTE_ADDR'];  
    $date = date("Y-m-d");
    $check1 = mysql_query("SELECT date FROM matable WHERE ip='$ip' AND var='$var'");
     
    if( mysql_num_rows($check1) == 1 ){
      $check = @mysql_result($check1, 0);
     
      if($check == $date ) {
      }else {
    mysql_query("UPDATE `matable` SET `ip` = '$ip', `date` = '$date' WHERE `ip` = '$ip' AND var='$var'");
      }
    }
    else
    {
    mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('$ip', '$date', '$var')");
    }
    c'est cette ligne qui incrémente dans la table si l'ip n'est pas deja répertoriée et c'est $ var qui incrémente un zero de temps en temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('$ip', '$date', '$var')");

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    alors un idée parce que moi je vois vraiment pas ...

  5. #5
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    De quel type est-il ?
    Est ce un champ auto-increment ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    normal en int(11)

  7. #7
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    normal en int(11)
    donc, ta requête devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('$ip', '$date', $var)");
    $var sans les '

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    pour quoi sans les ' ' ?

    En plus ça ne change rien j'ai encore plus de 0

  9. #9
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    c'est un entier et non une string.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    ok mais mais ça a rien changé

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Ça veut dire quoi, "incrémente", pour toi ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    ajouter une valeur dans une BDD pourquoi c'est pas ça ?

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Citation Envoyé par madstrix Voir le message
    ajouter une valeur dans une BDD pourquoi c'est pas ça ?
    Non, c'est pas ça. Incrémenter ça veut dire augmenter la valeur (d'un entier, généralement).

    Tu veux donc dire "insérer" ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    a je suis désolé de cette erreur oui je veut dire insérer

  15. #15
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Ajoute ceci dans ton code, ça pourrait t'être utile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('$ip', '$date', $var)") or die(mysql_error());

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    c'est déja fait l'embettent c'est que ma page est exécutée grace a un script ajax donc cette page est invisible et on a pas accés aux messages d'erreur.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    il existerai pas des mysql_quelquechose pour insérer dans la BDD ou un truc du genre.

  18. #18
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    A mon avis, ce n'est pas MySQL qui te provoque ce phénomène mais un problème en amont.
    Si la valeur de $_GET['var'] vaut 0, il est normal que ce soit 0 enregistré comme valeur.

    Il faudrait en 1er constater IN VISU se que contient tes valeurs.
    Fait un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print_r($_GET); // On vérifie les valeurs reçus
    $id = $_GET['id'];
    $var = $_GET['var'];
    ... etc ...
    Et puis il faudrait savoir quelle serait sa valeur (donne un exemple).
    Mais surtout, quel est le ou les éléments qui transmettent ces 2 données : id et var, tout part de là.

    Ceci dit, et si c'est pour un compteur, il n'est pas utile théoriquement de transmettre le var.
    Un champ en auto_increment aurait été suffisant, car ce type de champ (comme son nom l'indique) incrémente la valeur automatiquement.
    Si la valeur au départ est 5, un UPDATE donnera 6, un autre, 7, etc ...

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 73
    Par défaut
    var m'est utile, il sert a transmettre différentes variables pour faire différentes stats ou autres trucs.
    Var prend la valeur de 299 ou de 301 cele dépend des pages, toutes les variables sont passés via url au script du compteur.
    Et mes $_GET son valide car j'ai mis cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if(($_GET['idpub'] == 0) || ($_GET['idpub'] == '')){ 
     mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('11', '11', '11')");
    }else{
    et les valeurs 11 11 11 n'ont jamais été inséré dans ma bdd ...
    Donc var est valide.
    Et je pense que c'est une erreur mysql car si je met le champ en varchar(255) je n'ai pas un zéro mais un blanc et en Int(11) ou en float j'ai un zero.

  20. #20
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if(($_GET['idpub'] == 0) || ($_GET['idpub'] == '')) { 
     mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('11', '11', '11')");
    }else{

    Ca va pas. Ta vérification porte sur idpub, ça veut dire que tu ne sais toujours pas ce que vaut var

    Si tu ne fais pas un print_r($_GET) tu ne saura jamais le fin fond du problème.
    Il faut voir, c'est la manière la plus simple, et la plus rapide (ça se résume à rajouter 1 ligne de code).

    Toujours est il que si MySQL insert comme valeur : vide sur VACHAR, c'est que la valeur est vide, et si c'est 0 pour un INT, alors c'est quelle est nulle, vide, ou 0.

    Rajoute par la même occasion un mysql_error() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("INSERT INTO `matable` (`ip`, `date`, `var`) VALUES ('11', '11', '11')") or die('Erreur : '.mysql_error());
    S'il y a erreur, ça te permettra au moins de le constater.

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

Discussions similaires

  1. [DOM] [Xerces] Insertion d'une entité
    Par Traroth dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/05/2008, 09h28
  2. Bulk insert et caractère accentué
    Par slc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/04/2003, 12h52
  3. probleme d'insertion d'un Float
    Par neness dans le forum Débuter
    Réponses: 3
    Dernier message: 07/01/2003, 12h32
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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