Accueil > Forum > > > > problème fonction.
problème fonction.
mardi 25 août 2009 à 15:59:48 |
problème fonction.

anthony428
|
Salut,
j'essai d'adapter un script qui me permet de rechercher dans ma base de données en fonction des mots clés tapés dans un moteur de recherche.
LE problème est que je voudrais ajouter une condition à ma requete sql et que je n'y arrive pas.
Voici la fonction :
Code PHP :
function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
{
// option de recherche
$option = $_POST['option'];
// texte de recherche
$search = $_POST['search'];
// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;
// si "Rechercher tous les mots" ou "Rechercher un de ces mots"
if($option == 'all' || $option == 'one')
{
// liste des mots
$mots = explode(' ', $search);
// spararateur
if($option == 'all')
$sep = ' AND ';
else
$sep = ' OR ';
} // if($option == 'all' || $option == 'one')
// "Rechercher l'expression exacte"
else
{
$mots = $search;
$sep = '';
}
} // if(!isset($fonction_requete))
if(!is_array($champs))
$champs = array($champs);
if($option == 'all' || $option == 'one')
{
// pour savoir si on en est la premire itration ou non
$i = 0;
// pour tous les mots
foreach($mots as $mot)
{
if(!$i)
{
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
$i = 1;
}
else
$search .= $sep . '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
} // foreach($mots as $mot)
} // if($option == 'all' || $option == 'one')
else if($option == 'sentence')
$search = '~#^!|!^#~ LIKE \'%' . $mots . '%\'';
$i = 0;
// dbut de requte
if(empty($count))
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' ;
else
$req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ' ;
// ajout des champs
foreach($champs as $champ)
{
if(!$i)
{
$req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
}
if(empty($count))
{
$req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";
return $req_search;
} }
Je ne comprends pas comment adapter ma requete.
Je voudrais que ma requete affiche le même résultat mais seulement si le champ auteur = $login
En théorie, je devrais donc rajouter à la fin de ma requete :
WHERE auteur = '$login';
Cette syntaxe SQL fonctionne en direct sur ma base mais pas lorsque j'essai de l'adapter dans mon code.
J'ai essayé de l'adapter ici mais cela ne fonctionne pas :
Code PHP :
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE auteur = '$login'' ;
Est ce que quelqu'un pourrait m'aider à y voir plus clair ?
Merci d'avance.
|
|
mercredi 26 août 2009 à 11:51:05 |
Re : problème fonction.

anthony428
|
S'il vous plait, là je coince vraiment sur ce problème.
Il s'agit vraiment d'un problème de syntaxe, je ne pense pas que le problème soit difficile à résoudre pourtant, je ne trouve pas comment écrire ma requête correctement.
Please, un peu d'aide...
|
|
mercredi 26 août 2009 à 11:59:29 |
Re : problème fonction.
|
mercredi 26 août 2009 à 13:51:02 |
Re : problème fonction.

anthony428
|
Je veux bien faire plus clair mais je ne vois pas comment ?
J'ai posté la fonction de recherche dans la base de données.
Le message d'erreur est une erreur de syntaxe sql:
"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 '( date_entretien LIKE '%%' ) OR ( nom_societe LIKE '%%' ) OR ( statut LIKE '%%' ' at line 1"
Je n'arrive pas à mettre en place la condition dans ma requête étant donné qu'il ne s'agit pas exactement d'une requête sql classique.
Je pense que le code a adapter se trouve plus bas dans la fonction, je l'ai posté à part.
Code PHP :
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE' ;
Mon problème est que je ne vois pas comment écrire la fin de la requête.
lorsque j'écris ceci :
Code PHP :
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE auteur = '$login'' ;
j'ai le message d'erreur de syntaxe.
Merci de te pencher sur mon problème.
|
|
mercredi 26 août 2009 à 13:57:06 |
Re : problème fonction.

nautilus99
|
Bonjour,
Code PHP : $req_search = "SELECT $select FROM $table WHERE auteur = '$login' " ;
et tes autres clauses avec un AND avant tes autres clauses.
|
|
mercredi 26 août 2009 à 14:19:04 |
Re : problème fonction.

anthony428
|
Merci nautilus99 pour ta réponse mais je ne comprends pas ta phrase
et tes autres clauses avec un AND avant tes autres clauses.
Quelle partie du code dois je déplacer ?
|
|
mercredi 26 août 2009 à 15:43:03 |
Re : problème fonction.

nautilus99
|
Tous tes autres champs dans ton foreach par exemple..
Code PHP : $req_search = "SELECT $select FROM $table WHERE auteur = '$login' AND " ;
et à la suite, tes autres clauses.
Dans ce cas, les autres clauses ne sont évaluées que et uniquement pour les enregistrements correspondant à ta première clause...
Pour optimiser une requête, on met toujours le discriminant principal en premier.
|
|
mercredi 26 août 2009 à 16:20:49 |
Re : problème fonction.

anthony428
|
Merci pour ces éléments de réponse mais cela ne fonctionne toujours pas comme je le voudrais. En fait, il n'y a plus de problème de syntaxe mais c'est comme si la condition (WHERE) n'était pas appliquée, il n'y a aucun changement sur les résultats affichés.
Voici mon code modifié, est ce que je l'ai modifié comme il fallait ?
Code PHP :
function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
{
$auteur = $_SESSION['login'];
// option de recherche
$option = $_POST['option'];
// texte de recherche
$search = $_POST['search'];
// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;
// si "Rechercher tous les mots" ou "Rechercher un de ces mots"
if($option == 'all' || $option == 'one')
{
// liste des mots
$mots = explode(' ', $search);
// spararateur
if($option == 'all')
$sep = ' AND ';
else
$sep = ' OR ';
} // if($option == 'all' || $option == 'one')
// "Rechercher l'expression exacte"
else
{
$mots = $search;
$sep = '';
}
} // if(!isset($fonction_requete))
if(!is_array($champs))
$champs = array($champs);
if($option == 'all' || $option == 'one')
{
// pour savoir si on en est la premire itration ou non
$i = 0;
// pour tous les mots
foreach($mots as $mot)
{
if(empty($count))
$req_search = "SELECT $select FROM $table WHERE auteur = '$login' AND " ;
else
$req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';
if(!$i)
{
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
$i = 1;
}
else
$search .= $sep . '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
} // foreach($mots as $mot)
} // if($option == 'all' || $option == 'one')
else if($option == 'sentence')
$search = '~#^!|!^#~ LIKE \'%' . $mots . '%\'';
$i = 0;
// dbut de requte
// ajout des champs
foreach($champs as $champ)
{
if(!$i)
{
$req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
}
if(empty($count))
{
$req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";
return $req_search;
} }
|
|
mercredi 26 août 2009 à 16:30:02 |
Re : problème fonction.

nautilus99
|
et en utilisant un echo ou autre pour afficher le code requête généré, ça te donne quoi ?
Manifestement, tu dois tester tes requêtes et le svérifier. Il doit s'agir d'une erreur soit dans une regexp soit que le code généré n'est pas celui qu etu attends.
Testes le résultat en live avec mysql query browser ou mysql workbench ou phpmyadmin pour affiner ta requête..
etensuite tu traduis ça avec tes regexp jusqu'à obtenir le résultat désiré..
|
|
mercredi 26 août 2009 à 17:05:44 |
Re : problème fonction.

anthony428
|
Merci de m'aider pour le débogage.
Lorsque je fais un echo de ma requete, j'ai ceci :
SELECT champ1,champ2,champ3 FROM matable WHERE auteur = 'anthony' AND ( date_entretien LIKE '%%' ) OR ( nom_societe LIKE '%%' ) OR ( statut LIKE '%%' ) OR ( adresse LIKE '%%' ) OR ( bp LIKE '%%' ) OR ( cp LIKE '%%' ) OR ( ville LIKE '%%' ) OR ( site LIKE '%%' ) OR ( nom_technicien LIKE '%%' ) OR ( interlocuteur LIKE '%%' ) OR ( civilite LIKE '%%' ) OR ( fonction LIKE '%%' ) OR ( telephone LIKE '%%' ) OR ( portable LIKE '%%' ) OR ( e_mail LIKE '%%' ) OR ( siret LIKE '%%' ) OR ( actionnariat LIKE '%%' ) OR ( filiale LIKE '%%' ) OR ( commentaire LIKE '%%' ) OR ( activite1 LIKE '%%' ) OR ( activite2 LIKE '%%' ) OR ( ca LIKE '%%' ) OR ( evolution_ca LIKE '%%' ) OR ( effectif LIKE '%%' ) OR ( das1 LIKE '%%' ) OR ( das2 LIKE '%%' ) OR ( das3 LIKE '%%' ) OR ( das4 LIKE '%%' ) OR ( das5 LIKE '%%' ) OR ( das6 LIKE '%%' ) OR ( das7 LIKE '%%' ) OR ( nom_das1_1 LIKE '%%' ) OR ( nom_das1_2 LIKE '%%' ) OR ( nom_das1_3 LIKE '%%' ) OR ( nom_das2_1 LIKE '%%' ) OR ( nom_das2_2 LIKE '%%' ) OR ( nom_das2_3 LIKE '%%' ) OR ( nom_das3_1 LIKE '%%' ) OR ( nom_das3_2 LIKE '%%' ) OR ( nom_das3_3 LIKE '%%' ) OR ( nom_das4_1 LIKE '%%' ) OR ( nom_das4_2 LIKE '%%' ) OR ( nom_das4_3 LIKE '%%' ) OR ( nom_das5_1 LIKE '%%' ) OR ( nom_das5_2 LIKE '%%' ) OR ( nom_das5_3 LIKE '%%' ) OR ( nom_das6_1 LIKE '%%' ) OR ( nom_das6_2 LIKE '%%' ) OR ( nom_das6_3 LIKE '%%' ) OR ( nom_das7_1 LIKE '%%' ) OR ( nom_das7_2 LIKE '%%' ) OR ( nom_das7_3 LIKE '%%' ) OR ( das1_com LIKE '%%' ) OR ( das2_com LIKE '%%' ) OR ( das3_com LIKE '%%' ) OR ( das4_com LIKE '%%' ) OR ( das5_com LIKE '%%' ) OR ( das6_com LIKE '%%' ) OR ( das7_com LIKE '%%' ) OR ( description LIKE '%%' ) OR ( materiel LIKE '%%' ) OR ( savoir_faire LIKE '%%' ) OR ( recherche LIKE '%%' ) OR ( effectif_bureau LIKE '%%' ) OR ( oui_brevet LIKE '%%' ) OR ( non_brevet LIKE '%%' ) OR ( nombre_brevet LIKE '%%' ) OR ( projet_brevet LIKE '%%' ) OR ( fond_propre LIKE '%%' ) OR ( oseo LIKE '%%' ) OR ( rdt LIKE '%%' ) OR ( ptr LIKE '%%' ) OR ( credit_impot LIKE '%%' ) OR ( fui LIKE '%%' ) OR ( anr LIKE '%%' ) OR ( ademe LIKE '%%' ) OR ( feder LIKE '%%' ) OR ( fedear LIKE '%%' ) OR ( fep LIKE '%%' ) OR ( banque LIKE '%%' ) OR ( business LIKE '%%' ) OR ( fond_prive LIKE '%%' ) OR ( fond_collectivite LIKE '%%' ) OR ( fondation LIKE '%%' ) OR ( non_cofinancement LIKE '%%' ) OR ( autre LIKE '%%' ) OR ( autre_financement LIKE '%%' ) OR ( montant LIKE '%%' ) OR ( aides_public LIKE '%%' ) OR ( aides_innovation LIKE '%%' ) OR ( propriete LIKE '%%' ) OR ( relation LIKE '%%' ) OR ( partenaire1 LIKE '%%' ) OR ( partenaire2 LIKE '%%' ) OR ( partenaire3 LIKE '%%' ) OR ( contrats LIKE '%%' ) OR ( certif LIKE '%%' ) OR ( cert1 LIKE '%%' ) OR ( cert2 LIKE '%%' ) OR ( cert3 LIKE '%%' ) OR ( cert4 LIKE '%%' ) OR ( certif_encours LIKE '%%' ) OR ( cert1_encours LIKE '%%' ) OR ( cert2_encours LIKE '%%' ) OR ( cert3_encours LIKE '%%' ) OR ( cert4_encours LIKE '%%' ) OR ( qualite LIKE '%%' ) OR ( certif_envisage LIKE '%%' ) OR ( date_echeance LIKE '%%' ) OR ( secteur LIKE '%%' ) OR ( rayon LIKE '%%' ) OR ( pays LIKE '%%' ) OR ( clients LIKE '%%' ) OR ( concurrent LIKE '%%' ) OR ( pays_concurrent LIKE '%%' ) OR ( entrant LIKE '%%' ) OR ( force1 LIKE '%%' ) OR ( force2 LIKE '%%' ) OR ( force3 LIKE '%%' ) OR ( faiblesse1 LIKE '%%' ) OR ( faiblesse2 LIKE '%%' ) OR ( faiblesse3 LIKE '%%' ) OR ( menace1 LIKE '%%' ) OR ( menace2 LIKE '%%' ) OR ( menace3 LIKE '%%' ) OR ( opportunite1 LIKE '%%' ) OR ( opportunite2 LIKE '%%' ) OR ( opportunite3 LIKE '%%' ) OR ( orientation LIKE '%%' ) OR ( besoin1 LIKE '%%' ) OR ( besoin2 LIKE '%%' ) OR ( besoin3 LIKE '%%' ) OR ( autre_besoin LIKE '%%' ) OR ( prioritaire LIKE '%%' ) OR ( potentiel LIKE '%%' ) OR ( annuellement LIKE '%%' ) OR ( faible LIKE '%%' ) OR ( collaboration LIKE '%%' ) OR ( freins LIKE '%%' ) OR ( coop_envisageable LIKE '%%' ) OR ( attentes LIKE '%%' ) OR ( oui_connaissance LIKE '%%' ) OR ( non_connaissance LIKE '%%' ) OR ( oui_rencontre LIKE '%%' ) OR ( non_rencontre LIKE '%%' ) OR ( droit LIKE '%%' ) OR ( auteur LIKE '%%' ) ORDER BY date_entretien DESC LIMIT 0, 500
Désolé pour le code brut...
Sinon, lorsque je teste cette requête sous phpmyadmin directement sur ma base, il affiche le même résultat que sur ma page web mais il n'y a aucune erreur dans la requête.
Ce qui signifie donc, comme tu le disais, que la requête que j'utilise n'est pas celle dont j'ai besoin.
Elle devrait afficher les enregistrements dont la valeur du champ auteur = $login et dont les enregistrements comporte l'un des mots clés saisi.
J'ai l'impression qu'il comprend comme s'il y avait un OR à la place du AND après mon WHERE ... ???
Je ne comprend pas ?
Comment puis je modifier cette requête ?
|
|
Cette discussion est classée dans : fonction, mots, option, search, if
Répondre à ce message
Sujets en rapport avec ce message
problème syntaxe requete sql couplée avec php. [ par anthony428 ]
Salut, j'essai d'adapter un script qui me permet de rechercher dans ma base de données en fonction des mots clés tapés dans un moteur de recherche. Le
fonction php "cochez tout" [ par anthony428 ]
Bonjour, j'ai une page php qui m'affiche des cases à cocher en fonction des résultats retournés dans ma base de données. Le problème est que je sou
Sécurité des mots de passe [ par Jiho64 ]
Bonjour, Je projette d'écrire un sujet sur la sécurité des sites web en général et je souhaiterai avoir quelques précisions sur les mots de passe, a
poblème fonction php [ par suethi75 ]
Bonjour, Je suis en train de développer un site marchand. Cependant, lorsque je veux simplement afficher ma page d'accueil, il m'affiche l'erreur su
fonction php - sur une image [ par jarodjarod ]
Bonjour à tous, Voila, je suis blocké devant une fonction de stéganographie compliqué, enfin je comprend en générale ce qu'elle fait mais je cherche
Problème codage php [ par schpice ]
Voila j'ai effectué un code en php mais celui-ci ne marche pas et je ne vois pas pouquoi, donc je viens demander de l'aide si des fois qq1 voit mes er
selection option avec if et else et else if [ par gigawatt ]
BonjourQuelqu'un peut il apporter sa contribution à ma requête:En fait j'explique: certains clients de ma base foxpro ont plusieurs contrats de mainte
fonction php + supprimer des mots dans une chaine [ par hadjiphp ]
Bonjour, merci pour ce site et souhaite de trouver tous ce que je veux. je vous remercie. Bonjour, j'ai une question : je cherche une fonction
Moteur de recherche [ par pitchoune ]
Salut !Voici mon probleme :Soit un formulaire de recherche comportant une zone de texte et 2 boutons radio dans la page recherche.php3----------------
fonction php pour inserer mots avec caractères dans bdd [ par nunor ]
bonjour, Quand j' insere les mots - chambres d'enfants - canapé convertible quelles sont les fonctions que l'on utilise pour les inserer dans BDDonnée
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|