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 :

function qui incrémente un champs mysql [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Par défaut function qui incrémente un champs mysql
    Bonjour a tous

    Petit problème avec une fonction pour incrémenter un champs sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function stat_add($domain){
    	$sqlreq = "UPDATE `ssdom` SET `stats` = stats + 1 WHERE `domain` = '$domain'";
    	return mysql_query($sqlreq);
    }
    Pour faire simple, j'utilise cette fonction dans un script multi site, le but étant de faire des statistiques 'brut' de page vues par domaine. Le problème étant que, la valeur 'stats' n'est pas incrémentée convenablement, c'est à dire que ça ne fait pas un stats = stats + 1 mais un stats + 2.
    Après avoir fouiller partout, la fonction n'est bien appelée qu'une seule et unique fois, si je retire cet appel unique de la fonction, le champ ne s'incrémente pas, si je place l'appel de la fonction dans mon template (dans le header.php ou dans le footer.php ne sont include qu'une seule fois) le problème demeure ! Dans le doute, j'ai testé la requête dans phpmyadmin, elle incrémente bien 1 seule fois (donc + 1 et pas + 2)
    l'appel de la fontion est placé hors boucle, j'ai même testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (empty($statcompt)){
    	stat_add($c_site);
    	$statcompt = '1';
    }
    mais rien n'y fait ...

    pour info : serveur dédié (debian etch), php 5.2, mysql 5, le champs stats : INT(11) dans une table en MyISAM en utf8_general_ci
    La fonction et l'appel sont placés (temporairement car par propre) dans le header du template (donc appelé 1 seule et unique fois ...)
    j'ai beau creuser ... j'en deviens fou !

    Merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqlreq = "UPDATE `ssdom` SET `stats` = stats + 1 WHERE `domain` = '$domain'";
    Je pense que stats est censé être une variable PHP ... donc tu aurais du écrire $stats

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Par défaut
    non, ce n'est pas une variable php, c'est pour que mysql incrémente le champ stats avec la valeur du champ stats + 1
    je viens d'essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqlreq = "UPDATE `ssdom` SET `stats` = `stats` + 1 WHERE `domain` = '$domain'";
    ça incrémente, mais toujours à +2 et non +1

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Par défaut
    Bon ... j'ai poussé un peu plus loin mes investigations ... et je suis encore plus paumé ...
    J'ai modifié ma fonction pour la décomposer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function stat_add($domain){
    	$t = '';
    	$sql = "SELECT stats FROM ssdom WHERE `domain` = '$domain'";
    	$req_sql = mysql_query($sql);
    	while ($r = mysql_fetch_assoc($req_sql)){
    		$t = $r['stats'];
    	}
    	if (!empty($t)){
    		$t++;
    		$req = "UPDATE `ssdom` SET `stats` = '$t' WHERE `domain` = '$domain'";
    		mysql_query($req);
    	}
    }
    idem ... il me rajoute 2 au lien de 1 ! même effet avec malgré mon incrémentation en php ...
    si je commente mon $t++; afin de ne pas incrémenter, il me retourne la valeur stats extraite de la bdd sans incrément, et à la même valeur en bdd après l'insert ...
    Un truc de malade !
    pour récapituler ... si j'incrémente directement en bdd avec mysql, il me rajoute 2 , si j'incrémente en php il me rajoute 2 !

    MAJ : 09/11/05 01:04
    me suis fendu d'un apt-get update + upgrade + reboot serveur (juste au cas ou ...)

    MAJ2 : 01:37
    Je commence à m'enfoncer dans une grosse dépression ... entres autres facteurs : la fatigue ...
    J'ai tenté d'insérer un petit "for the fun" ... Ce qui me retourne la valeur initiale du champs stats en bdd ...
    bon ... euh ... 168 + 1 = 170 ... Si adsens pouvais avoir la même logique ...

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Est-ce que tu constates le meme problème avec differents navigateurs ?

    Sur certaines version de firefox, un lien vide dans le css provoque un appel de la page, donc une deuxieme execution des requetes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Par défaut
    Effectivement, mon problème n'apparait qu'avec firefox, je viens de tester avec opéra 10 et IE 7 et ça fonctionne bien.

    Problème résolu, J'ai réglé les quelques problèmes avec les recommandations w3c pour le html (ça n'a pas corrigé le problème)

    j'ai désactivé les css (pour confirmer que le problème venez bien de là) j'ai corrigé 2 ou 3 choses dedans et le problème n'en est plus un


    Un grand merci à sabotage Je ne connaissais pas ce bug
    merci aussi à NaBaZTaG pour s'être penché sur mon soucis

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

Discussions similaires

  1. Trigger qui incrémente un champ
    Par Almenor dans le forum PL/SQL
    Réponses: 20
    Dernier message: 06/03/2012, 13h08
  2. Requete qui incrémente un champ timestamp
    Par vallica dans le forum Débuter
    Réponses: 2
    Dernier message: 01/08/2010, 16h24
  3. incrémenter un champ mysql
    Par pas30 dans le forum Outils
    Réponses: 3
    Dernier message: 25/01/2007, 17h53
  4. Réponses: 3
    Dernier message: 02/12/2006, 16h10
  5. lien PHP qui incrémente ma BDD MySQL
    Par evilkopus dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 22/09/2006, 16h28

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