PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.info.auteurs > php. variables et requete
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
php. variables et requete

Réponse
 
LinkBack Outils de la discussion
Vieux 31/03/2008, 20h50   #1
alainL
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut php. variables et requete

Bonjour,
J'ai une erreur de syntaxe dans une requête et je ne vois pas où ? type
de variable ?? c'est survenu quand j'ai voulu ajouter et tester un
champ int dans ma table.
Voilà une partie du code :
__________________________________________________ __________________________________________________ ___
Le formulaire contient des select (qui eux fonctionnent) et un input
pour entrer ce qui sera un entier
__________________________________________________ __________________________________________________ ____
le traitement passe les variables (ça aussi ça marchait qd il n'y avait
pas le text nb_petales que je change en entier avec intval...
<?
$fleur = $_POST['fleur'];
$bois = $_POST['bois'];
$nervures = $_POST['nervures'];
$nbpetales = $_POST['nb_petales']; # <---------------- ???
$nb_petales=intval($nbpetales); # <---------------- ???
$petales = $_POST['petales'];
$corolle = $_POST['corolle'];
$couleur = $_POST['couleur'];
$lumiere = $_POST['lumiere'];
$terrain = $_POST['terrain'];
$altitude = $_POST['altitude'];
print ("Critères retenus : ");
print("$fleur + $bois + feuilles : $nervures + $nb_petales pétales +
pétales : $petales $corolle + $couleur + terrain : $lumiere, $terrain,
$altitude") ;
echo '<br>';

# jusque là, le progr marche et affiche ce que je demande, y compris
nb_petales...

//connexion table
$db=mysql_connect('localhost','root','');
mysql_select_db('floresoule',$db);
$sql = "SELECT nom, lien, vignette, fleur, bois, nervures, petales_min,
petales_max, petales, corolle, couleur, lumiere, terrain, altitude FROM
floresoule2 WHERE fleur like '%$fleur%' and bois like '%$bois%' and
'petales_min'<=%nb_petales% and 'petales_max'>=%nb_petales% and nervures
like '%$nervures%' and petales like '%$petales%' and corolle like
'%$corolle%' and couleur like '%$couleur%' and lumiere like '%$lumiere%'
and terrain like '%$terrain%' and altitude like '%$altitude%' ORDER BY nom";
$req = mysql_query($sql) or die('Erreur
SQL!<br>'.$sql.'<br>'.mysql_error());
$total=mysql_num_rows($req);

# j'ai donc ajouté à cette requête la condition nb_petales doit être
entre petales_min et petales_max (champs déclarés et renseignés) comme
entiers dans la table
__________________________________________________ ________________________________________________

et voilà le résultat :_((( :



Critères retenus : grandes fleurs + non_ligneuse + feuilles : simples +
5 pétales + pétales : différents % + % + terrain : %, %, % ## ça
c'est bon
Erreur SQL!
SELECT nom, lien, vignette, fleur, bois, nervures, petales_min,
petales_max, petales, corolle, couleur, lumiere, terrain, altitude FROM
floresoule2 WHERE fleur like '%grandes fleurs%' and bois like
'%non_ligneuse%' and 'petales_min'<=%nb_petales% and
'petales_max'>=%nb_petales% and nervures like '%simples%' and petales
like '%différents%' and corolle like '%%%' and couleur like '%%%' and
lumiere like '%%%' and terrain like '%%%' and altitude like '%%%' ORDER
BY nom
Erreur de syntaxe près de '%nb_petales% and 'petales_max'>=%nb_petales%
and nervures like '' à la ligne 1
__________________________________________________ _________________________________________________

Merci pour vos conseils !

--
Alain L

  Réponse avec citation
Vieux 01/04/2008, 09h28   #2
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete

alainL a écrit :
> Bonjour,
> J'ai une erreur de syntaxe dans une requête et je ne vois pas où ? type
> de variable ?? c'est survenu quand j'ai voulu ajouter et tester un
> champ int dans ma table.
> Voilà une partie du code :

(snip)
> $sql = "SELECT nom, lien, vignette, fleur, bois, nervures, petales_min,
> petales_max, petales, corolle, couleur, lumiere, terrain, altitude FROM
> floresoule2 WHERE fleur like '%$fleur%' and bois like '%$bois%' and
> 'petales_min'<=%nb_petales% and 'petales_max'>=%nb_petales%


pb de syntaxe:

and petales_min <= $nb_petales and petales_max >= $nb_petales


(snip)
>
> et voilà le résultat :_((( :
>
>
>
> Critères retenus : grandes fleurs + non_ligneuse + feuilles : simples +
> 5 pétales + pétales : différents % + % + terrain : %, %, % ## ça
> c'est bon
> Erreur SQL!


Il en reste en effet:

> and corolle like '%%%' and couleur like '%%%' and
> lumiere like '%%%' and terrain like '%%%' and altitude like '%%%'


Tu ne devrais ajouter ces critères que s'ils sont renseignés.

  Réponse avec citation
Vieux 01/04/2008, 13h06   #3
alainL
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete

Bruno Desthuilliers a écrit :
> alainL a écrit :

...........
> pb de syntaxe:
>
> and petales_min <= $nb_petales and petales_max >= $nb_petales
>
>


Merci. J'ai modifié et je n'ai plus de message d'erreur émanant de mysql...
Mais la requête ne trouve plus rien alors que des des éléments
correspondent à la recherche.

fleur like '%$fleur%' and bois like '%$bois%' and petales_min <=
$nb_petales and petales_max >= $nb_petales and nervures like
'%$nervures%' and petales like '%$petales%' and corolle like
'%$corolle%' and couleur like '%$couleur%' and lumiere like '%$lumiere%'
and terrain like '%$terrain%' and altitude like '%$altitude%'

En partant d'easyphp, des requetes du genre select nom from... where
petales_min>= 5 and petales_max<=7 affichent les éléments
correspondants, je pense que la table est OK.

On dirait que ma "variable" $nb_petales" n'est pas reconnue comme entier
??? probleme venant de la réutilisation du nom ??
-elle vient du form par
<input type=text name="nb_petales"> ,
-je la passe au traitement par
$nbpetales = $_POST['nb_petales'];
$nb_petales=intval($nbpetales);


.....
>
>> and corolle like '%%%' and couleur like '%%%' and lumiere like '%%%'
>> and terrain like '%%%' and altitude like '%%%'

>
> Tu ne devrais ajouter ces critères que s'ils sont renseignés.
>

Il se peut que l'utilisateur ne sache pas comment renseigner un champ.
Ca marchait avec la première version de la page, avant l'ajout des
petales max et min .

--
Alain L

Mon village en Haute Soule : http://jarailet.club.fr
Carnet de voyages: http://jarailet.club.fr/Randobal
  Réponse avec citation
Vieux 01/04/2008, 14h01   #4
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete

Le 01/04/2008 14:06, alainL a écrit :
>
> Merci. J'ai modifié et je n'ai plus de message d'erreur émanant de mysql...
> Mais la requête ne trouve plus rien alors que des des éléments
> correspondent à la recherche.
>
> fleur like '%$fleur%' and bois like '%$bois%' and petales_min <=
> $nb_petales and petales_max >= $nb_petales and nervures like
> '%$nervures%' and petales like '%$petales%' and corolle like
> '%$corolle%' and couleur like '%$couleur%' and lumiere like '%$lumiere%'
> and terrain like '%$terrain%' and altitude like '%$altitude%'


Que valent $fleur, $bois, etc., et que valent fleur, bois, etc. dans
l'un des éléments dont tu dis qu'ils correspondent ?

> [...]
>
> On dirait que ma "variable" $nb_petales" n'est pas reconnue comme entier


Quelle importance, puisque tu la transformes en chaîne de caractères au
moment de faire la requête ? Ce n'est sûrement pas de là que vient le
problème.

> -elle vient du form par
> <input type=text name="nb_petales"> ,
> -je la passe au traitement par
> $nbpetales = $_POST['nb_petales'];


Ok.

> $nb_petales=intval($nbpetales);


Conversion à 100 % inutile.
  Réponse avec citation
Vieux 01/04/2008, 14h16   #5
Denis Beauregard
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete

Le Tue, 01 Apr 2008 14:06:22 +0200, alainL <jarailet@club-internet.fr>
écrivait dans fr.comp.infosystemes.www.auteurs:

>Bruno Desthuilliers a écrit :
>> alainL a écrit :

>..........
>> pb de syntaxe:
>>
>> and petales_min <= $nb_petales and petales_max >= $nb_petales
>>
>>

>
>Merci. J'ai modifié et je n'ai plus de message d'erreur émanant de mysql...
>Mais la requête ne trouve plus rien alors que des des éléments
>correspondent à la recherche.


Une façon simple de travailler sur ce genre de problème.

Faire un $query= qui reçoit la requête

Puis un echo $query;

Et recopier la réponse dans le dialogue SQL de phpmyadmin.

Ensuite, on modifie l'énoncé jusqu'à ce qu'on obtienne une réponse
valide et on retourne à l'étape précédente.

Autre truc : quelques echo "[".$entree."]"; pour voir ce qu'il y a
au départ. Aussi, simplifier la requête pendant que l'on cherche
le problème.


Il faut éviter les bouts de code trop longs si on débute ou si le
problème est incompréhensible.



Denis

  Réponse avec citation
Vieux 01/04/2008, 15h19   #6
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete

alainL a écrit :
> Bruno Desthuilliers a écrit :
>> alainL a écrit :

> ..........
>> pb de syntaxe:
>>
>> and petales_min <= $nb_petales and petales_max >= $nb_petales
>>
>>

>
> Merci. J'ai modifié et je n'ai plus de message d'erreur émanant de mysql...
> Mais la requête ne trouve plus rien alors que des des éléments
> correspondent à la recherche.
>
> fleur like '%$fleur%' and bois like '%$bois%' and petales_min <=
> $nb_petales and petales_max >= $nb_petales and nervures like
> '%$nervures%' and petales like '%$petales%' and corolle like
> '%$corolle%' and couleur like '%$couleur%' and lumiere like '%$lumiere%'
> and terrain like '%$terrain%' and altitude like '%$altitude%'
>
> En partant d'easyphp, des requetes du genre select nom from... where
> petales_min>= 5 and petales_max<=7 affichent les éléments
> correspondants, je pense que la table est OK.
>


pb de logique:

and petales_min => $nb_petales and petales_max =< $nb_petales


!-)


(snip)

> ....
>>
>>> and corolle like '%%%' and couleur like '%%%' and lumiere like '%%%'
>>> and terrain like '%%%' and altitude like '%%%'

>>
>> Tu ne devrais ajouter ces critères que s'ils sont renseignés.
>>

> Il se peut que l'utilisateur ne sache pas comment renseigner un champ.


Oui, mais toi (dans ton code) tu peux vérifier si le champ est renseigné
ou pas, et n'ajouter la clause à la requête que si nécessaire. En
d'autres termes : tu construit ta requête par petits bouts. Exemple:

$champs_like = array("fleur", "bois", "nervures", "petales", "corolle",
"couleur", "lumiere", "terrain", "altitude");

$where = array();

foreach($champs_like as $champ) {
if (isset($_POST[$champ])) {
$val = $_POST[$champ];
// TODO : gérer les quotes etc ici
$where[] = "$champ like '%$val%'";
}
}

$where = implode(' and ', $where);

if (isset($_POST['nb_petales']) {
if ($where) {
$where .= " and ";
}
$nb_petales = $_POST['nb_petales'];
// TODO : s'assurer ici qu'on a une valeur valide

$where .= "and petales_min => $nb_petales "
. "and petales_max =< $nb_petales";
}

$sql = "SELECT yadda yadda etc..." . $where;


> Ca marchait avec la première version de la page, avant l'ajout des
> petales max et min .


Et ? Tu sais, y a pleins de façons parfaitement inefficaces d'obtenir un
résultat correct...

J'ai vu une fois dans un CMS dont je tairai le nom par charité
chrétienne l'algo suivant:

mettre le compteur à zero
selectionner les id de toute une table et le stoquer dans un tableau
pour chaque element du tableau:
sélectionner tous les champs de l'enregistrement correspondant à l'id
si le champ "X" a la valeur "Y":
incrementer le compteur
fin si
fin pour

Sachant que la table en question était susceptible de contenir de
quelques milliers à quelques dizaines de milliers d'enregistrements.

Le résultat était correct. Quand on ne tombait pas en time-out avant...

  Réponse avec citation
Vieux 01/04/2008, 17h41   #7
alainL
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete

Bruno Desthuilliers a écrit :
> alainL a écrit :
>> Bruno Desthuilliers a écrit :

..................
>> fleur like '%$fleur%' and bois like '%$bois%' and petales_min <=
>> $nb_petales and petales_max >= $nb_petales and nervures like
>> '%$nervures%' and petales like '%$petales%' and corolle like
>> '%$corolle%' and couleur like '%$couleur%' and lumiere like
>> '%$lumiere%' and terrain like '%$terrain%' and altitude like
>> '%$altitude%'
>>
>> En partant d'easyphp, des requetes du genre select nom from... where
>> petales_min>= 5 and petales_max<=7 affichent les éléments
>> correspondants, je pense que la table est OK.
>>

>
> pb de logique:
>
> and petales_min => $nb_petales and petales_max =< $nb_petales
>
>
> !-)
>


Là je ne suis plus !
La table contient par exemple pour renoncule:
champ petales_min valeur 4 et champ pétales_max valeur 8

L'utilisateur entre le nb de petales qu'il a comptés sur une fleur :
(input text) : 5 donc $nb_petales a pour valeur 5

Si petales_min(4) <= $nb_petales(5) et petales_max(8)>=$nb_petales(5)
select renoncule. Non ???

--
Alain L

Mon village en Haute Soule : http://jarailet.club.fr
Carnet de voyages: http://jarailet.club.fr/Randobal
  Réponse avec citation
Vieux 01/04/2008, 18h45   #8
alainL
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: php. variables et requete . résolu. Merci

> Olivier :
> Que valent $fleur, $bois, etc., et que valent fleur, bois, etc. dans
> l'un des éléments dont tu dis qu'ils correspondent ?


dans le mille ! $bois était le fautif !

> Denis :
> on modifie l'énoncé jusqu'à ce qu'on obtienne une réponse
> valide et on retourne à l'étape précédente.
> ........... Aussi, simplifier la requête pendant que l'on cherche
> le problème.


J'ai effectivement supprimé la comparaison, sans reussite, puis un autre
nouveau champ (bois) et là, bingo !

> Bruno:
> Soluce 1 : utilise deux champs nb_petales_min et nb_petales_max.


Je crois que c'est la soluce la plus adaptée à la situation.

Et voilà ! Ca marche. Merci à vous trois et mes plates excuses parce que
l'erreur venait des valeurs dans le select du form : bois = (ligneux ou
non_ligneux) et de l'enum de la table :bois = (ligneuse ou non_ligneuse)

Reste le bout de code pour optimiser passé par Bruno... mais là, ce
n'est plus de l'artisanat, c'est une affaire de pro !!! J'ose pas me
lancer !

Bonne soirée à vous

--
Alain L

Mon village en Haute Soule : http://jarailet.club.fr
Carnet de voyages: http://jarailet.club.fr/Randobal
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 12h34.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,20433 seconds with 16 queries