[RESOLU] requete slq invalide + jointures

Eléphant du PHP | 299 Messages

09 janv. 2011, 17:11

Salut a tous!


Voila, j' ai un petit souci avec uen requete, dans "SQL" de phpmyadmin, elle passe niquel et me retourne tous les bons resultats.


Dans ma page php c' est autre chose, voici mon code:
            $team2 = "SELECT ibf_members.name,ibf_members.id,ibf_members.mgroup_others,ibf_member_extra.id,ibf_member_extra.avatar_location FROM ibf_members LEFT OUTER JOIN ibf_member_extra ON ibf_members.id = ibf_member_extra.id WHERE ibf_members.mgroup_others = ",7," ";
                
                while ($team = mysql_fetch_array($team2))

et je me retrouve avec un :

Parse error: syntax error, unexpected ',' in /home/teamcashi/www/team.php on line 89
ou bien encore un "requete invalide"

Je suis conscient que c' est le ,7, qui pose souci, mais je ne trouve pas de solutions, je crois avoir tous essayé. Le probleme est que c' est exactement ce resultat que je dois trouvé, je ne peux donc enlever ni le numeraire, ni les virgules!


Merci d' avance, je seche!
Modifié en dernier par graffx le 11 janv. 2011, 21:30, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

09 janv. 2011, 17:33

La concaténation de chaînes de caractères en PHP se fait avec le point : "."
;)

Eléphant du PHP | 299 Messages

09 janv. 2011, 17:39

Merci! Mais je n' ai pas encore trouvé, ceci dit je croyais que le point servait a separer DEUX chaines de caracteres? Hors moi je n' en ai qu' une! :s

Eléphant du PHP | 299 Messages

09 janv. 2011, 18:40

Toujours pas trouvé, je suis preneur d' autres details :s

ViPHP
xTG
ViPHP | 7331 Messages

09 janv. 2011, 19:17

Le chiffre 7 est une "chaîne de caractère".

Eléphant du PHP | 299 Messages

09 janv. 2011, 22:04

bien sur mais j' ai vraiment besoin de ces deux virgules autour! je fais encore quelques essais!

Eléphant du PHP | 299 Messages

09 janv. 2011, 23:52

Non, je n' y arrive pas. Et quelques recherches sur google ne donnent pas l' effet voulu...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 janv. 2011, 00:25

Bonjour, c'est simple le problème est que tu utilise des guillemets à l'intérieur des guillemets de la chaine SQL et ça c'est intolérable par PHP. T'a 2 solution d'écriture pour éviter cette erreur:
1. Utiliser des quottes pour délimiter une chaine interne à une chaine PHP entourée entre guillemets, exemple:
$team2 = "SELECT ibf_members.name,ibf_members.id,ibf_members.mgroup_others,ibf_member_extra.id,ibf_member_extra.avatar_location FROM ibf_members LEFT OUTER JOIN ibf_member_extra ON ibf_members.id = ibf_member_extra.id WHERE ibf_members.mgroup_others = ',7,' ";
2. Echapper (dans le sens de désactiver) les guillemets utilisée à l'intérieur d'une chaine PHP entourée par des guillemets en utilisant un anti-slash \ avant chaque guillemet interne, par exemple:
$team2 = "SELECT ibf_members.name,ibf_members.id,ibf_members.mgroup_others,ibf_member_extra.id,ibf_member_extra.avatar_location FROM ibf_members LEFT OUTER JOIN ibf_member_extra ON ibf_members.id = ibf_member_extra.id WHERE ibf_members.mgroup_others = \",7,\" ";
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 299 Messages

10 janv. 2011, 22:53

Arf merci, en fait j' avais bien fait au debut, c' est juste que j' avais oublié un mysql_query!

Du coup, autre probleme, comment nommer ces variables dans un echo par la suite? Deja, voici ma requete :
             <?php
            $team2 = mysql_query("SELECT ibf_members.name,ibf_members.id,ibf_members.mgroup_others,ibf_member_extra.id,ibf_member_extra.avatar_location FROM ibf_members LEFT OUTER JOIN ibf_member_extra ON ibf_members.id = ibf_member_extra.id WHERE ibf_members.mgroup_others = ',7,' ");
                
                while ($team = mysql_fetch_array($team2)) 

Pour le pseudo, si je fais $team['name'] ou $team['ibf_members.name'], ca fonctionne nickel.

Mais pour l' avatar, ni $team['avatar_location'] ni $team['ibf_member_extra.avatar_location'] ne fonctionne.

Si je fais un print_r, ca donne:



Coyote

Array ( [0] => Coyote [name] => Coyote [1] => 1 [id] => 1 [2] => ,7, [mgroup_others] => ,7, [3] => 1 [4] => av-1.png [avatar_location] => av-1.png )

Ska

Array ( [0] => Ska [name] => Ska [1] => 2 [id] => 2 [2] => ,7, [mgroup_others] => ,7, [3] => 2 [4] => [avatar_location] => )

SaD

Array ( [0] => SaD [name] => SaD [1] => 3 [id] => 3 [2] => ,7, [mgroup_others] => ,7, [3] => 3 [4] => av-3.jpg [avatar_location] => av-3.jpg )




Donc l' avatar est bien la. Mais je n' arrive pas a l' afficher.

ViPHP
xTG
ViPHP | 7331 Messages

10 janv. 2011, 23:10

L'image ne s'affichage pas ? Ou le texte du champs avatar ne s'affiche pas ? ;)
Vérifies ton lien !

graffx2
Invité n'ayant pas de compte PHPfrance

11 janv. 2011, 00:20

Le texte du champs avatar! d' ailleurs dans le code source je me retrouve avec un <img src="" />

J' ai essayé une variable simplifiée du genre $avatar = $team['ibf_member_extra.avatar_location'] mais rien ne marche de ce coté!

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 janv. 2011, 10:00

Bonjour,
Pour éviter les problèmes de champ nommé dans le tableau résultat d'une requête il faut renommer les champs dans la requête SQL évitant du coup les erreurs sur les champs homonymes provenant de plusieurs tables jointes. Donc essaye ça dans ta requête:
$team2 = mysql_query("SELECT ibf_members.name,ibf_members.id as id_member,ibf_members.mgroup_others,ibf_member_extra.id as id_extra,ibf_member_extra.avatar_location FROM ibf_members LEFT OUTER JOIN ibf_member_extra ON ibf_members.id = ibf_member_extra.id WHERE ibf_members.mgroup_others = ',7,' ");
Mais pour l'avatar, il vaut mieux nous donner ton code php qui affiche l'image pour qu'on puisse t'aider. Tout en vérifiant en amont si le chemin d'accès aux images sur le disque est respecté.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 299 Messages

11 janv. 2011, 20:27

Merci a tous pour votre aide! Il me semblait bien qu' il y avait une methode de renommage des variables, ceci dit j' ai cette fois droit a un :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/teamcashi/www/team.php on line 91

Le probleme vient donc de la requete.


            <?php
            $team2 = mysql_query("SELECT ibf_members.name as name,ibf_members.id as id1,ibf_members.mgroup_others as group,ibf_member_extra.id as id2,ibf_member_extra.avatar_location as avatar FROM ibf_members LEFT OUTER JOIN ibf_member_extra ON ibf_members.id = ibf_member_extra.id WHERE ibf_members.mgroup_others = ',7,' ");
                
                while ($team = mysql_fetch_array($team2))
            {
            echo $team['avatar'];
            echo $team['name'];        
            }    
            ?>
J' ai enlevé le superflu!

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 janv. 2011, 20:53

Message de moogli le 11 Jan 2011, 20:45 (récupéré)
salut,

group est un mot clef sql je suppose que c'est ce qui bloque.

Il faut absolument tester le retour de mysql_query afin de voir si tous ce passe comme il faut.

Par exemple
Code php
<?php
$re = mysql_query($requete);
if($re === false){
echo 'Erreur SQL : '.mysql_error().'<br />'.$requete;
}
else {
//traitement de la requête avec le while et tous le tremblement.
}
?>
tu peut aussi tester ta requete avec la console mysql ou phpmyadmin afin de voir si elle retourne ce que tu souhaite.


@+[/quote]
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 299 Messages

11 janv. 2011, 21:29

Hé bien grace a vous ca fonctionne, j' espere que ca servira a un autre!!!


Mille mercis!!!! =D>