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 :

Mon code begaye!


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut Mon code begaye!
    Bonjour,

    Je ne trouve pas depuis des semaines la solution. Une application envoie à mon site une URL pour être enregistrée. On peut enregistrer trois fois l'appli.

    Chez moi, cela marche bien, mais parfois, la réponse du serveur est celle d'une deuxième registration et non d'une première. Plus grave, des personnes ayant voulu enregistrer ont reçu pour réponse que c'était la quatrième fois qu'ils enregistraient l'appli (et donc ont été rejetés). C'est comme si mon code bégayait, comme s'il faisait plusieurs fois la procédure.

    J'ai testé des messages d'alerte pour faire des tests (en mettant des "echo('entree telle partie') partout). La fonction n'est bien appelée qu'une seule fois.

    Voici le code de la fonction :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    $numReg = 0; //ce nombre sera renvoyé, il détermine le nombre de registrations effectuées
    $appDaz = "MonAppli";
    $today = date("Ymd");
    $true = 1;
    $false = 0;
     
    $sqlTwo =  "SELECT appName, useOne, useTwo, useThree FROM monRegistre WHERE email = '" . $strEmail . "'AND appName = '".$appDaz."'";
     
    $req = $dbh->prepare($sqlTwo);
    $req->execute(array($_GET['useOne'], $_GET['useTwo'],$_GET['useThree']));
     
        while($donnnees = $req->fetch()) {
     
            	if($donnnees['useOne'] == $true && $donnnees['useTwo'] == $true && $donnnees['useThree'] == $true) {$numReg = 4;}
     
            	else if($donnnees['useOne'] == $true && $donnnees['useTwo'] == $true && $donnnees['useThree'] == $false) {$numReg = 3;}
     
            	else if($donnnees['useOne'] == $true && $donnnees['useTwo'] == $false && $donnnees['useThree'] == $false) {$numReg = 2;}
     
            	else {$numReg = 0;}
     
            	}//fin boucle recherche
            	$req->closeCursor();
     
            	if($numReg==4) {
            		}
            	else if($numReg==3) {
            		$sql3a =  "UPDATE monRegistre SET useThree=1 WHERE email = '" . $strEmail . "'";
            		$req3a = $dbh->prepare($sql3a);
            		$req3a->execute();
            		$req3a->closeCursor();
     
            		$sql3b = "UPDATE monRegistre SET dateThree = ".$today." WHERE email = '" . $strEmail . "'";
            		$req3b = $dbh->prepare($sql3b);
            		$req3b->execute();
            		$req3b->closeCursor();
     
            		}
            	else if($numReg==2) {	
            		$sql2a =  "UPDATE monRegistre SET useTwo=1 WHERE email = '" . $strEmail . "'";
            		$req2a = $dbh->prepare($sql2a);
            		$req2a->execute();
            		$req2a->closeCursor();
            		//$dbh->query($sql2a);
            		$sql2b = "UPDATE monRegistre SET dateTwo = ".$today." WHERE email = '" . $strEmail . "'";
            		$req2b = $dbh->prepare($sql2b);
            		$req2b->execute();
            		$req2b->closeCursor();
            		//$dbh->query($sql2b);
            	}
            	else if($numReg==1) {
            		}
            	else if($numReg==0) {
            	$sql1 = 'INSERT INTO monRegistre VALUES("","'.$appDaz.'","'.$strEmail.'","'.$true.'","'.$false.'","'.$false.'","'.$today.'","'.$today.'","'.$today.'")';	
    					$reqOne = $dbh->prepare($sql1);
    					$reqOne->execute();
    					$reqOne->closeCursor();
            	$numReg = 1;
            		}//fin premiere registration
     
     
    try{
        	$dbh = null;
        }
     catch (PDOException $e) {
        die();}
     
     
    return ($numReg);
    Fonction appelée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ($verB2 = maFonction($strEmail));
    je ne vois vraiment pas où cela cloche. Je travaille avec une base MySQL 5 et un site paramétré en php5 aussi.

    Auriez-vous une idée?

  2. #2
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Ton code m'a l'air bien compliqué vu ce qu'il fait :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    $numReg = 0; //ce nombre sera renvoyé, il détermine le nombre de registrations effectuées
    $appDaz = "MonAppli";
    $today = date("Ymd");
    $true = 1;
    $false = 0;
     
    $sqlTwo =  "SELECT appName, useOne, useTwo, useThree FROM monRegistre WHERE email = '" . $strEmail . "'AND appName = '" . $appDaz . "'";
     
    $req = $dbh->prepare($sqlTwo);
    $req->execute(array($_GET['useOne'], $_GET['useTwo'],$_GET['useThree']));
     
    $donnnees = $req->fetch();
    $req->closeCursor();
     
    if ($donnnees) {
    	if ($donnnees['useOne'] == $true) $numReg += 1;
    	if ($donnnees['useTwo'] == $true) $numReg += 1;
    	if ($donnnees['useThree'] == $true) $numReg += 1;
    }
     
    if($numReg >= 0 && $numReg <= 2) {
    	if ($numReg == 0) { // insert
    		$sql = 'INSERT INTO monRegistre VALUES("","'.$appDaz.'","'.$strEmail.'","'.$true.'","'.$false.'","'.$false.'","'.$today.'","'.$today.'","'.$today.'")';	
    	} else { // update
    		$szChamp = 'Two';
    		if ($numReg == 2) $szChamp = 'Three';
     
    		$sql =  "UPDATE monRegistre SET use$szChamp = 1, date$szChamp = " . $today . " WHERE email = '" . $strEmail . "' AND appName = '" . $appDaz . "'";
    	}
     
    	$req2 = $dbh->prepare($sql);
    	$req2->execute();
    	$req2->closeCursor();
    }
     
    try {
    	$dbh = null;
    } catch (PDOException $e) {
    	die();
    }
     
    return $numReg + 1;
    Attention, je n'utilise pas PDO donc à vérifier.

    Ceci dit, je n'ai pas trouvé d'erreur dans ton code !!!

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut
    Merci Azharis. J'avais fait plus simple auparavant, mais cela bégayait déjà.

    Cela peut-il venir du serveur?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Il ne faut pas réinventer les booleans. true et false existent déjà et sont déjà les équivalents de 1 et 0. Ce n’est pas la peine de rajouter de nouvelles variables, et c’est très mauvais lorsqu’il s’agit de booleans (que se passe-t-il si un jour quelqu’un rajoute $true = 0 dans ton code ?)
    A quoi servent les variables liées dans $req->execute ? Si je lis bien, ces trois variables ($_GET[useOne’] etc…) ne servent à rien. Tu devrais plutôt lier l’email et le nom de l’application

    Ce code autorise un utilisateur (un e-mail) à avoir plusieurs applications. Or, à première vue, tes UPDATES modifient tous les enregistrements de cet utilisateur, sans vérifier si l’enregistrement se rapporte bien à l’application en cours ou pas.
    => résultat : si un utilisateurs a plusieurs applications enregistrées, il semblerait qu’à chaque fois qu’il ré-enregistre une appli, toutes ses autres applis sont incrémentées

Discussions similaires

  1. mon code begaye
    Par huskn dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2009, 23h21
  2. Mon code n'est pas interprété !
    Par korriganez dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2006, 15h46
  3. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  4. Réponses: 1
    Dernier message: 21/02/2005, 12h40
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

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