begin process at 2012 05 31 13:03:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

problème fonction.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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.

StiriX

Salut !

Oula c'est pas super clair ton message là. Quel est le message d'erreur ?

Tu veux faire une condition dans ta requête ? Essaye de faire plus simple qu'on y voient plus clair

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 ?


1 2

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,669 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales