8721 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis étudiant en école d'informatique, et je dois pour un projet réaliser un site d'e-commerce.

Pour ce faire, j'ai besoin de réaliser un module de recherche sensé me permettre de faire des recherches uni et multicritères (bon jusque là c'est évident) mais qui me permet aussi de définir les catégories de mon menu de haut de page.

Le problème qui me fait face est que je ne peux pas savoir à l'avance ce qu'il y aura dans la requête SELECT (je ne sais pas à l'avance quelle(s) table(s) sera/ront concernée(s), ni quels champs dans cette/ces table(s) seront à prendre en compte (étant entendu que cette requête doit être la plus généraliste possible, permettant sa ré-utilisabilité dans l'ensemble du site ^^)

Cela fait maintenant 3jours que je m'arrache les cheveux sur ce problème, j'ai quelques bouts de code sans queues ni têtes que je ne mets pas pour le moment, préférant partir sur une base saine pour créer le script (vu que je retourne le même script depuis 3jours, je m'embrouillerai plus qu'autre chose si je le prends comme base !)

De ce fait, je poste ce message pour demander si, parmi vous, quelqu'un saurait comment réaliser ça et pourrait m'expliquer la marche à suivre, voire même m'aider à réaliser le script ! (l'espoir fait vivre, je sais ;p) (bon si déjà j'avais la marche à suivre, je pourrai avancer ^^)

PS : je suis tenu d'utiliser le PDO (base de données mySQL) et le modèle MVC pour l'organisation du code

merci d'avance !
Peux-tu préciser ce que tu entends par : "mais qui me permet aussi de définir les catégories de mon menu de haut de page" ?
En fait, je souhaite faire en sorte que le contenu du menu soit généré par la requête, ce qui permet d'ajouter des catégories de produits à la BDD sans avoir à rajouter des lignes de code
(pour le moment, je me contente de mettre ds CD et DVD, mais si jamais une nouvelle catégorie devait être ajoutée, que le responsable de la logistique du site n'ait pas à aller voir dans le code pour ça, mais se contente de rajouter une table à la BDD)

... c'est clair dans ma tête, mais je ne sais pas si je l'explique bien XD
J'ai déjà une table catégorie, ce que je souhaite c'est un module de recherche permettant d'être utilisé soit pour faire une recherche uni ou multi critères (sans pour autant savoir quels critères seront demandés, donc si il y a des champs vides ils ne sont pas pris en compte)

Mais qui permette aussi d'aller chercher le contenu de la table catégorie pour l'afficher dans mon menu principal.

En fait je souhaite n'utiliser qu'une seule requête généraliste que je peux modifier à ma guise sans entrer dans le code (permettant à un admin de gérer ses stocks sans modification du code source php)
Désolé de ne pas avoir répondu plus tôt, je n'étais pas chez moi ...

Alors pour les tables qui sont concernées on a :

table article : Id_Article, Intitule_Article, Date_Edition_Article, Editeur_Article, Auteur_Article, Id_Sous_Categorie. (Elle contient d'autres champs, mais qui ne sont pas nécessaires dans la recherche)

table categorie : Id_Categorie, Intitule_Categorie

table sous-categorie : Id_Sous_Categorie, Intitule_Sous_Categorie, Id_Categorie

La bdd contient d'autres tables, mais elles ne sont pas à prendre en compte dans la recherche.
Petit up pour dire que j'ai encore tenté quelque chose :

j'ai cette fois essayé d'utiliser les requêtes préparées, cependant, vu que je n'en ai jamais utilisé avant, je ne sais pas trop comment m'en servir ...

Voilà ce que j'ai fait pour le moment : (chaque fonction est dans un fichier différent) (je rappelle que j'utilise PDO, ma connexion fonctionne, donc je ne la mets pas ici (sauf si vous en avez besoin ?)

fichier METIER_Articles.php (contient les fonctions du contrôleur et se trouve dans le dossier Controleur)

<?php 
require("../Modele/CAD_Articles.php");

function AppelSearch()
{
	$critere = new array();
	$resultat = new array();

	for (int i=0; i<count($_POST); i++)
	{
		$critere[$i] = $_POST[$i];
	}

	$resultat = RechercheArt($critere, "article");

	return $resultat;
}


Fichier CAD_Articles.php (contient les fonctions du modèle et se trouve dans le dossier Modele)

<?php
require("CAD.php"); //contient la fonction de connexion, 
//(la variable contenant la connexion s'appelle $connexion)


function RechercheArt(array $criteres, $table)
{

	$stmt = $connexion->prepare('SELECT * FROM '.$table.' WHERE Intitule_Article LIKE %?%, Editeur_Article LIKE %?%, Auteur_Article LIKE %?%');
	
	$res = new array();

	if ($stmt->execute($criteres))
	{
		$i=0;
		while ($row = $stmt->fetch())
		{
	    	$res[$i] = print_r($row);
	    	i++;
		}
	}

	return $res;
?>
}


Et voici la page du formulaire test que j'utilise :

<?php 
require_once("Constructeur/METIER_Articles.php");
?>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<link rel="stylesheet" href="CSS/style.css" />
		<script type="text/javascript" src="scripts.js"></script>
		<title>Accueil</title>
	</head>
	<body>		
		<form method="post" action="index.php">
			<table>
				<tr>
					<td>nom : </td>
					<td><input type="text" name="Intitule" size="25"></td>
				</tr>
				<tr>
					<td>artiste : </td>
					<td><input type="text" name="Artiste" size="25"></td>
				</tr>
				<tr><td><input type="submit" value="rechercher" action="appelSearch();"></td></tr>
			</table>
		</form>
</body>
</html>


Cependant ça ne fonctionne pas, alors certes je n'ai pas fini, mais le script plante dès le début, et je ne vois pas trop où je me trompe Smiley ohwell
Modifié par Dustdevil (20 Jun 2013 - 11:42)
Bonjour,
Je ne sais pas si ton problème est toujours d'actualité, mais à mon avis, cette ligne là ne fonctionne pas:
<tr><td><input type="submit" value="rechercher" action="appelSearch();"></td></tr>

Je n'ai jamais vu d'action qui pointe sur une fonction javascript, et je ne suis pas sûr que ce soit faisable... (quelqu'un peut-il confirmer?)
A la rigueur il devrait peut être y avoir moyen de faire un onClick="appelSearch();" ou un truc du genre...
Bonjour,

J'ai abandonné l'idée de faire cette recherche dynamique, par manque de temps et d'aide ><

Pour ce qui de la ligne, elle ne fonctionne effectivement pas, on ne peut appeler directement une fonction php depuis l'attribut action d'un bouton (ce n'était pas du javascript, mais le nom de ma fonction php ^^)(il aurait fallu que j'appelle le fichier contenant cette fonction)

J'ai trouvé un autre moyen du coup, j'ai juste fait une recherche basique

Mais merci quand même pour votre aide ^^