8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voilà j'ai 3 tables dans ma BDD Clients. Qui sont les suivantes :

table : client => Champs : Sexe, Age, Nom, Prenom
table : interaction =>Champs : Commentaires, Nom, Ville
table : adresse => Champs : Rue, Num_rue, Ville, région

Comme vous pouvez le voir ma table interaction permet la mise en relation entre ces trois tables.

Dans ses tables j'ai certaines informations à récupérer, qui sont : le Nom, le Prenom, les Commentaires et la région.

Bien sur, pour pouvoir ressortir les informations que j'ai dans ma BDD Clients, je fais une recherche de mots clefs. Les mots clefs dépendent de ce que l'utilisateur va taper dans les cases de recherche.
Voila mon formulaire :

<form method="post" class="motclefs">  <!-- Formulaire pour permettre la recherche par mots clefs<br>
<table>
	<td>
		<tr> <!--NOM -->
			<label for="search">Recherche par le Nom</label>
	      		<input id="name" type="text" name="nom">
	    </tr>
	    <br>

		<tr> <!--PRENOM-->
			<label for="search">Recherche par le Prenom</label>
	        	<input id="firtsname" type="text" name="prenom">
	    </tr>
	    <br>

		<tr> <!--COMMENTAIRES-->
			<label for="search">Recherche par les Commentaires </label>
	        	<input id="com" type="text" name="commentaires">
        </tr>
        <br>

		<tr> <!--REGION-->
			<label for="search">Recherche par la nature de la voie</label>
		        <input id="region" type="text" name="region">
		</tr>
		<br>

	<tr>
	        <input type="submit" name="search" value="Rechercher">
	        	<input type="submit" name="reset" value="Réinitialiser">
	 </tr>
	<br>

	</td>
</table>
</form>


Mais je n'arrive pas à obtenir un lien entre ma recherche de mots clefs et ma requête. Voici
ma requête :


$requete=$bdd->prepare("SELECT  c.*, i.*, a.* FROM client c
                                             LEFT OUTER JOIN  interaction  i
                                             ON 'i.nom'='c.nom' 
                                             LEFT OUTER JOIN adresse a
                                             ON 'i.ville'='a.ville'
         				     WHERE ' ' ); 
$requete->execute();


Donc ma question c'est : Saurez-vous comment je peux faire pour que ma recherche par mots clefs fonctionne avec ma requête afin que sa m'affiche que les lignes voulues? et pas toute ma BDD qui est bien trop longue et donc je perd trop de temps à ressortir les informations par moi même de ces trois tables.

J'espère qu'une personne pourra m'aider Smiley confused
Modifié par pierrik (06 Jun 2017 - 15:53)
Salut,

déjà commentaire sur la bdd, tu n'utilises pas d'identifiant ? Un Nom ou une Ville n'est pas unique donc bon , cela me semble difficile pour que ta table interaction fasse des liens 1 vers 1 en l’état ...
Je verrais bien un modèle dans ce genre la :
table : client => Champs : id_client, Sexe, Age, Nom, Prenom
table : interaction =>Champs : id_interaction, Commentaires, id_client, id_adresse
table : adresse => Champs : id_adresse, Rue, Num_rue, Ville, Region

Ensuite pour l'ordre des réflexions à mener, tu devrais d'abord tester à faire ta requête en sql seulement, et plus tard faire le formulaire et le PHP (une fois que ta requête fonctionne avec des entrées fictives).

Donc pour ta requête, si je comprends bien ton problème, tu cherches à récupérer le Nom, le Prenom, les Commentaires et la Region. Pour retourner ces informations, au vu du formulaire, tu cherches parmi le Nom, le Prenom, les Commentaires et les Rues. Si l'utilisateur rempli plusieurs critères, tu cherches à faire un ET ou un OU logique sur les critères ?

A priori ça devrait donner une requête dans ce genre la (avec des OU) :

SELECT c.Nom, c.Prenom, i.Commentaires, a.Region
FROM client c, interaction i, adresse a
WHERE c.id_client=i.id_client 
AND i.id_adresse=a.id_adresse
AND (
     c.Nom like 'Tata%' 
     OR c.Prenom like 'Titi%' 
     OR i.Commentaires like 'Toto%' 
     OR a.Rue like 'Tutu%' 
)


A toi de voir où tu souhaites mettre les % selon le type de recherche que tu souhaites faire et de voir ce qui se passe si on ne met rien à la place de Tata Titi Toto Tutu