[RESOLU] erreur dans une requête

Eléphanteau du PHP | 33 Messages

19 sept. 2014, 10:39

Bonjour
Je ne trouve pas une erreur dans cette requête ci-dessous. J'ai vérifié le nom de la table dans la base, la connexion, j'ai essayé beaucoup de présentations du la variable : avec quotes, guillemets.
Mon fichier fonctionnait jusqu'à une modification récente, avec la présentation de la variable suivante :
$req= 'select * from membres WHERE idmembre ='.$_SESSION['idmembrechoisi'] ;
Maintenant j'ai un message d'erreur de syntaxe, que je crois avoir corrigé, après l'essai d'une multitude de positionnement des quotes et des guillemets, voir ci-dessous. Mais ma requête ne fonctionne pas.

<h1>La cotisation de
<?php
$req= "select * from membres WHERE idmembre ='".$_SESSION['idmembrechoisi']."'" ;
$res = mysql_query($req) or die(mysql_error());
$resultat = mysql_fetch_assoc($res);
echo $resultat['prenom']." ".$resultat['nom']."</H1>";
echo "membre n°".$_SESSION['idmembrechoisi'];
?>

Je n'ai plus de message d'erreur de syntaxe, mais la requête ne fonctionne pas. Donc l'erreur est ailleurs ?
En haut de page, j'ai mis les variables :

<?php
session_start();
ini_set ('session.bug_compat_42', 0);
ini_set ('session.bug_compat_warn', 0);
$idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:"";
$_POST['idmembre']= isset($_POST['idmembre'])?$_POST['idmembre']:"";
$idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:"";
$idmembrechoisi= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:"";
$submit=isset($_POST['submit'])?$_POST['submit']:"";
?>

Merci à qui peut m'aider.

Eléphant du PHP | 151 Messages

19 sept. 2014, 11:02

Bonjour,

Pourquoi tu as 2 fois

Code : Tout sélectionner

$idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:"";
:?: :?: #-o #-o

Et à la fin, fais un echo $req.

Sinon, vu que tu dois pas être un grand pro du codage, je t'invite à éviter les conditionnelles courtes (lisibilité, aide des copains, etc...) et présenter ton code entre balise

Code : Tout sélectionner

:wink:
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

ViPHP
xTG
ViPHP | 7331 Messages

19 sept. 2014, 14:08

Que te donnes un :
var_dump($_SESSION['idmembrechoisi']);
juste avant la requête ?

Et sinon je ne comprends pas tes deux parties de message...
En bas c'est une variable $_POST pour idmembrechoisi, en haut c'est une variable de session.

Eléphanteau du PHP | 33 Messages

20 sept. 2014, 11:25

Bonjour
Merci Arnaud69 et xTG pour vos réponses.
Après avoir corrigé les doublons, puis ajouté var_dump et echo $req
j'obtiens le message suivant :

La cotisation de string(0) ""
membre n°select * from membres WHERE idmembre =''

Inutile de vous dire que je ne comprends pas :roll: Je vais aller chercher ce qu'est ce var_dump.
Mais peut-être pouvez-vous me faire avancer avec ça.

Arnaud, excuse moi, je ne comprends pas non plus ce que tu me dis à propos des conditionnelles courtes et du code entre balises :oops: Je suis donc vraiment débutant (faux débutant, en fait, je m'y remets laborieusement).

Mammouth du PHP | 2278 Messages

20 sept. 2014, 14:45

$req= "select * from membres WHERE idmembre ='".$_SESSION['idmembrechoisi']."'" ;
Quand on obtient un comportement inattendu, il faut tester les diverses variables.
On gagnerait en lisibilité et en sécurité à écr:ire
$îd_membre = $_SESSION['idmembrechoisi'].; //en assortisant cette affectation de vérifications omises ici
$req= "select * from membres WHERE idmembre =' $id_membre"';
print "<br>$req"; die();
et si la requete ainsi affichée est incorrecte, ajouter tout au début
print_r($_POST); die();
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 33 Messages

20 sept. 2014, 15:59

Merci sirakawa
J'ai donc remplacé par une équivalence plus simple l'écriture de la variable.
Voici le résultat affiché après cette modification :
La cotisation de Array ( [idmembre] => )
Je suis perplexe. Où puis-je trouver la signification de ce qui est affiché quand on fait var_dump ou pront_r

Eléphanteau du PHP | 33 Messages

20 sept. 2014, 17:35

Après réflexion, je cherche dans le fichier précédent, celui dans lequel est choisi le membre. Je m'explique. Il s'agit d'enregistrer les cotisations des membres d'une association. Dans un premier fichier, on cherche dans la base le membre pour lequel on va enregistrer une cotisation : il y a une table 'membre', une table 'activite' et une table 'relmembreactivite' de relation entre les deux autres. Et il s'agit des activités 102 à 109. Voici ce fichier de choix du membre :
<h1>Choisir un membre</h1>
<?php
if ($submit == "")
{
?>
<FORM method="POST" name="choixmembre" action="enregistrecotis1.php">
<select name="idmembre" value ="idmembre" size="1">
<?php
$sql= "SELECT * FROM membres as m, relmembreactivite as ma
WHERE ma.idactivite>101 AND ma.idactivite<110
AND m.idmembre=ma.idmembre
ORDER BY nom";
$base= mysql_query($sql);
while($ligne_liste=mysql_fetch_array($base))
{
echo "<OPTION Value=\"".$ligne_liste['idmembre']."\">".$ligne_liste['nom']." ".$ligne_liste['prenom']."</OPTION>";
}
?>
</SELECT>
<input type="submit" name="submit" value="Valider le choix" >
</FORM>
<?php
}
else
{
$_SESSION['idmembrechoisi']= $_POST['idmembre'] ;
$adresse="enregistrecotis2.php";
rediriger($adresse);
}
?>

</div>
Je ne vois rien d'anormal...

ViPHP
xTG
ViPHP | 7331 Messages

20 sept. 2014, 19:09

Avant ta redirection regardes ce qu'il y a dans $_POST (commentes donc pour ce test la redirection).
Puis après redirection regardes ce qu'il y a dans $_SESSION.

var_dump sert à afficher pour le debug le contenu d'une variable.

Eléphanteau du PHP | 33 Messages

20 sept. 2014, 21:32

Voilà, ça marche.
Merci à ceux qui m'ont aidé.
J'ai appris à utiliser var_dump et print_r
Mon seul problème, c'est que je n'ai pas vraiment identifié où était l'erreur !
J'ai testé à plusieurs endroits avec var_dump, puis j'ai enlevé le test... finalement, ça a dû déclencher quelque chose.
Je ne crois pas à la magie, mais parfois...
Merci à vous.
Philippe