PHP : Problème avec le contenu d'une variable

Fermé
Kaldorei - 16 juin 2009 à 16:20
 manolo - 28 juil. 2009 à 09:53
Bonjour,

J'ai un problème avec l'utilisation du contenu d'une de mes variables ; J'explique :

Au début de mon script, je récupère une variable obtenue gràce a un formulaire sur la page précédente :
-> $CodeTypeProduit = $_POST['ChoixProduit'];

Je vais ensuite récupérer les codes de différents produits dans ma base de données a l'aide d'une requète, que je stocke un à un (boucle) dans la variable : $IDSousProduit

Dans cette mème boucle, je compare la valeur de mes deux variables précédentes, et si le code correspond j'affiche un formulaire avec le libelle etc.. :

if ($IDSousProduit == $CodeTypeProduit)
{
echo '<tr>';
echo '<td>';
echo '<INPUT TYPE=CHECKBOX VALUE="'.$IDSousProduit.'">'.$LibelleSousProduit.' ';
echo '</td>';
echo '<td>';
echo '<INPUT TYPE=TEXT Value="Quantite">';
echo '</td>';
echo '</tr>';
}

Mon problème, c'est qu'il ne rentre jamais dans la boucle.
Hors, il y a des codes correspondants.
Pour le vérifier, j'affiche le contenu des deux variables avec un echo :
-> echo $CodeTypeProduit .' - '. $IDSousProduit;

Dans le test-exemple que je présente, $CodeTypeProduit contient la valeur "30".
Hors, parmi tous les $IDSousProduit, il y en a bien qui ont la valeur "30", comme $CodeTypeProduit.
Cependant, le programme n'est jamais rentré dans la boucle (j'ai fais des test).

J'ai alors eu l'idée d'essayer de réaffecter manuellement le contenu de ma variable $CodeTypeProduit juste avant la boucle, après l'affichage des valeurs que je viens de faire :
-> $CodeTypeProduit = 30;

Et là, miracle !
Le programme passe bien dans ma boucle quand les deux variables correspondent, et m'affiche le résultat attendu.
Cependant, comme mon $CodeTypeProduit varie en fonctions des résultats du formulaire précédent, il ne sera pas toujours égal à "30".. donc je ne sais pas comment faire.
Quand j'affiche la valeurs, elle est bonne, mais le "if" ne passe pas, alors que quand je remet la mème valeur "à la main" dans la variable, le "if" passe comme il faut.

J'ai fouillé pendant un bon momment mais je n'ai trouvé aucune solution à mon problème.. si quelqu'un aurait un conseil ou une hypothèse a m'apporter, il est le bienvenu ! ^_^

Merci d'avance.

Kaldorei
A voir également:

12 réponses

Sasa93 Messages postés 252 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 27 février 2012 20
16 juin 2009 à 16:23
Bonjour ta essaye de mettre un seul = au lieu de deux dans ton if ?
0
Ozimandias Messages postés 502 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 10 mars 2010 46
16 juin 2009 à 16:30
Oula attention,

if ($toto = $tata) ça affecte la valeur de tata à toto

alors que

if ($toto == $tata) ça vérifie que toto est égal à tata

C'est pas du tout pareil.
0
Ozimandias Messages postés 502 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 10 mars 2010 46
16 juin 2009 à 16:25
[cite]Je vais ensuite récupérer les codes de différents produits dans ma base de données a l'aide d'une requète, que je stocke un à un (boucle) dans la variable : $IDSousProduit [cite]

ta variable $IDSousProduit serait-elle un tableau (array)?

Si c'est le cas, if ($IDSousProduit == $CodeTypeProduit) ne peut pas fonctionner car un array ne peut être égal à une valeur.
0
Le problème, c'est que quand j'affecte la valeur "30" à ma variable $CodeTypeProduit "Manuellement", la comparaison d'égalité avec le "if" marche correctement, donc mes deux variables ne sont pas incompatibles :-(
0
Ozimandias Messages postés 502 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 10 mars 2010 46 > Kaldorei
16 juin 2009 à 16:43
Effectivement, mais en PHP les variables peuvent changer de type suivant ce qu'on leur gave ; quand tu fais:

$CodeTypeProduit = 50;
$CodeTypeProduit = '50';


Ta variable est tour à tour, un INT puis un STRING.

Donc quand tu affectes manuellement une valeur à ta variable, c'est sur c'est 30. Mais dans le cas de ta boucle il se pourrait que ce soit un tableau.

Pour le savoir c'est simple, fait : echo $CodeTypeProduit à la sortie de ta boucle et sans lui affecter une valeur autre. S'il t'écris array c'est que c'est un tableau.
0
Kaldorei > Ozimandias Messages postés 502 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 10 mars 2010
17 juin 2009 à 08:22
J'ai dejà fait un echo $CodeTypeProduit après son affectation pour vérifier, et la valeur s'affiche.

$CodeTypeProduit est une variable que je récupère d'un formulaire précédent grace à $CodeTypeProduit = $_POST['ChoixProduit'];

J'ai essayé de mettre directement $_POST['ChoixProduit'] a la place de $CodeTypeProduit dans mon "if", mais j'obtiens le mème résultat :-/
0
Sasa93 Messages postés 252 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 27 février 2012 20
16 juin 2009 à 16:28
Il a pas tort ^^
0
Sasa93 Messages postés 252 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 27 février 2012 20
16 juin 2009 à 16:31
@Ozimandias : ok autant pour moi alors j'ai confondus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ozimandias Messages postés 502 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 10 mars 2010 46
16 juin 2009 à 16:33
Aucun soucis, c'est le genre d'erreur que tout le monde fait et qui t'entraine dans une nuit blanche où tu passes ton temps à t'arracher les cheveux pour un = oublié...

0
Un petit up' pour mon topic.. j'ai toujours pas trouvé de solution :-|
0
Bonjour

Essaye de faire
echo '**',$IDSousProduit,'**',$CodeTypeProduit,'**';
JUSTE AVANT le if
Pour voir si les valeurs sont bien égales au moment de la comparaison, ou s'il n'y a pas un espace qui se glisse sournoisement quelque part
0
Je viens faire ce que tu m'as et j'ai remarqué qu'un espace se glissait a chaque fois a la fin de ma variable $IDSousProduit.

J'avais pensé a vérifier ça pour $CodeTypeProduit, mais pas pour $IDSousProduit.

Je vais essayer de régler ça quand je récupère ma chaine ^^

Merci ! :-)
0
C'est probablement toi qui ajoutes cet espace au moment d'insérer ta donnée dans la base. Regarde bien ta requête d'insertion ou de mise à jour.
0
En fait, je travaille sur une base de données déjà existante, et (relativement) très mal faite, certainement la récupération des données d'un ancien logiciel.
Donc je nage un peu pour essayer de comprendre la logique du bazar ..

Enfin bref, merci pour ton aide! :-)
0
Utilisateur anonyme
17 juin 2009 à 14:33
kaldorei d'ivalice??
0
si tu veux enlever les blancs au début ou à la fin du post que tu récupère ecris :
$mavar1=ltrim($_POST['mavar']);
$mavar=rtrim($mavar1);

tu peux ajouter si tu veux :
$mavar=HTMLENTITIES($mavar2,ENT_QUOTES);
mais dans le code au dessus $mavar devient $mavar2
0