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 :

Bug de variable dans une boucle for


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 153
    Par défaut Bug de variable dans une boucle for
    Bonjour,

    Dans le cadre d'un projet d'entreprise, je développe une web appli de formation avec des abonnement et des abonné (personnes)

    J'ai construis un script permettant de vérifier la présence d'une réciprocité abonnement - abonné.

    Mais certaine variable passe mal dans mes requètes SQL.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php 
    /*-------------Selection des abonnements du profil -----------*/
    $sql1     = mysql_query('SELECT ID_profil, ID_abonne FROM abonnement WHERE ID_profil = '.$id.'') or die ('1'.mysql_error());
    while ($result1 = mysql_fetch_array($sql1)){
     
    $id_abo[] = ''.$result1['ID_abonne'].'';
     
    }
    /*-------------Vérification de la réciprocité -----------*/
    $n = 0;
     
    for ($n=0;$n<=count($id_abo);$n++){
    $a = $id_abo[$n];
    	$sql2    = mysql_query("SELECT ID_profil, ID_abonne FROM abonnement WHERE ID_profil = ".$a."") or die ('2'.mysql_error());
    	$result2 = mysql_fetch_assoc($sql2);
    	/*-------------si réciprocité, passage des variables d'affichage -----------*/	
    	if (isset($result2)){
     
    		$sql3 = mysql_query("SELECT id, nom, prenom FROM creationcompte WHERE id = ".$a."") or die ('3'.mysql_error());
    		while ($result3 = mysql_fetch_array($sql3)){
    	$prenom_abo[] = ''.$result3['prenom'].'';
    	$nom_abo[]    = ''.$result3['nom'].'';
    		}
    	}
    }
    ?>
    au test j'ai cette erreur (sur la seconde requete):

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    la première requète, construite sur le meme modele passe niquel.

    Si je change '.$a.' par 3 (ce qui correspond à $id_abo[0]), les requetes passent niquel
    si je fige $a par un $a = 3, pareil.
    le test de echo ($id_abo[$n]) dans ma boucle donne 3...

    Je n'arrive pas à comprendre mon erreur.

    Pouvez-vous m'apporter vos lumière?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    supprime le "="
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($n=0;$n<=count($id_abo);$n++){
    si ton tableau $id_abo comporte (par exemple) 3 elements:
    count($id_abo) = 3
    mais la numérotation commence à 0
    donc $id_abo[0], $id_abo[1], $id_abo[2],
    ta bouche donne a $n les valeurs 0, 1, 2 et 3, or il n'y a pas de 4 éme élément $id_abo[3]donc ta requête deviens
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID_profil, ID_abonne FROM abonnement WHERE ID_profil =
    qui est syntaxiquement non valide

  3. #3
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    Tu peux aussi simplifier le code avec une requête un peu plus complexe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "SELECT *
    FROM `abonnement`
    RIGHT JOIN `creationcompte` ON id_abonne = id
    UNION
    SELECT *
    FROM `abonnement`
    LEFT JOIN `creationcompte` ON id_abonne = id"
    te donnera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ID_profil 	ID_abonne 	id 	nom 	prenom
    1 	        1 	        1 	nom1 	prenom1
    2 	        2 	        2 	nom2 	prenom2
    NULL	        NULL	        3 	nom3 	prenom3
    3 	        100 	        NULL	NULL	NULL
    il te suffit de chercher les lignes avec ID_abonne = null ou id=null pour connaître les abonnements et les creationcompte qui n'ont pas de reciprocité

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 153
    Par défaut
    merci

    je prends la simplification, sa pourra etre utile

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/01/2013, 11h07
  2. Définir variables dans une boucle for
    Par gmachi10 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/07/2008, 11h33
  3. Appeler une série de variable dans une boucle for
    Par jujuf1 dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/02/2008, 16h06
  4. Portée d'une variable dans une boucle FOR ?
    Par Neo41 dans le forum C++
    Réponses: 20
    Dernier message: 17/11/2006, 11h14
  5. [VB.net] Declaration variable dans une boucle for
    Par nico10gbb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/05/2006, 11h45

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