Forum Clubic

[ASP] Probleme fonctionnement moteur de recherche

Bonjour,

J’ai actuellement un petit problème avec un moteur de recherche que j’essaie de faire fonctionner.
En effet ce dernier doit me permettre de rechercher des informations (le nom d’un étudiant) dans une table appelée étudiant à partir soit de son nom ou soit de son année de promotion (présent dans une autre table appelée promotion). Le lien entre ces 2 tables étant un code promotion.

En essayant de le faire fonctionner, le logiciel me présente une erreur sur la requête SQL à exécuter.

Voila le code qui pose problème

Table e = table étudiant
Table p = table promotion

query = "SELECT DISTINCT e.code_etudiant, e.nom_etudiant FROM Etudiant AS e INNER JOIN Promotion AS p ON e.code_promotion = p.code_promotion"	

if request.querystring("nom") <> "" Then
	issetName = 1
	select case request.QueryString("type")
  case "0"
  	nom = "Nom LIKE '" & request.querystring("nom_etudiant") & "%'"
  case "1"
  	nom = "Nom LIKE '%" & request.querystring("nom_etudiant") & "%'"
  case "2"
  	nom = "Nom LIKE '%" & request.querystring("nom_etudiant") & "'"
	end select	
End If

if request.querystring("annee") <> "" Then
	issetAnnee = 1
	annee = "e.code_promotion=p.code_promotion AND p.annee_promotion" & request.querystring("annee_promotion")
End If

' construction de la requete

if issetName = 1 AND issetAnnee = 1 Then
	query = query & " WHERE " & nom & " AND " & annee
ElseIf issetName=1 Then
	query = query & " WHERE " & nom
ElseIf issetAnnee=1 Then
	query = query & " WHERE " & annee
End If

set rs = Server.CreateObject("ADODB.Recordset")

' Pagination
rs.pageSize = vpagesize

rs.Open query , connect,3,3

Si quelqu’un pouvait m’aider à résoudre ce problème, ça serait vraiment sympa car je bloque dessus depuis pas mal de temps

Merci

Je ne fais pas d’asp, mais je te conseillerai d’afficher la requête?

La requête est mentionnée dans le code…sinon personne n’a d’idée? Autre petit souci, je n’arrive pas a trouver un script ASP qui me permette de créer un système de réservation en ligne (panier d’achat) associé à une BDD Access…Pourtant, ca doit se trouver, mais je n’en ai trouvé qu’un avec Excel et impossible de l’ajuster…

Merci d’avance

Salut,
il manque un égal dans la condition where sur l’année:

if request.querystring("annee") <> "" Then
issetAnnee = 1
annee = "e.code_promotion=p.code_promotion AND p.annee_promotion =" & request.querystring("annee_promotion")
End If

Il faudrait indiquer le message d’erreur que tu as, il indique peut-être ou se situe l’erreur de syntaxe.
tu peut aussi afficher la valeur de query pour vérifier que tout est correct.
Enfin, pour faire des tests, il faudrait tester un exemple de requête directement en SQL, pour vérifier la jointure, les noms de colonnes…
:slight_smile:

Et si je peux me permettre une petite critique sur la forme du programme, il est toujours préférable de formatter au maximum la requête dans une seule String au départ, plutôt que de concaténer des morceaux de Where: en fait, il ne faudrait rajouter que les arguments nom et annee: plutôt que de faire un switch contenant la clause where, renseigner le pattern contenant juste nom ou nom&’%’ ou ‘%’ & nom & ‘%’.

En plus il faudrait tester la présence de caractère quote dans tes string passées en argument, (voire “encoder” les string, si asp peut le faire?), parce que sinon, tu as une faille de sécurité, n’importe qui peut balancer une requête en la passant en argument de l’url. Mais ça c’est un petit plus :wink:

La requête affichée dans le code ne te donne pas le résultat final qui peut dépendre de l’utilisateur (variable POST, GET) d’où l’utilité de l’afficher pour voir où se situe l’erreur :slight_smile: c’est une (très) bonne habitude à prendre.

On a réussi à résoudre notre problème grâce à l’aide d’un utilisateur d’un autre forum. Merci encore de votre aide

Voice le code qui résoud notre problème

query = "SELECT DISTINCT Etudiant.code_etudiant, Etudiant.nom_etudiant, Promotion.annee_promotion FROM Etudiant INNER JOIN Promotion ON Etudiant.code_promotion = Promotion.code_promotion"

if request.querystring(“nom”) <> “” Then
Requete = 1
nom = " (nom_etudiant LIKE ‘%" & request.querystring(“nom”) & "%’) "
End If

if request.querystring(“annee”) <> “” Then
Requete = 2
annee = " (annee_promotion=’" & request.querystring(“annee”) &"’) "
End If

if request.querystring("annee") <> "" AND request.querystring("nom") <> "" Then
Requete = 3
End If

’ construction de la requete

Select case Requete
Case "1"
query = query & " WHERE " & nom & " "
Case "2"
query = query & " WHERE " & annee & " "
Case "3"
query = query & " WHERE " & nom & " AND " & annee & " "
Case else
query = query

End select
set rs = Server.CreateObject("ADODB.Recordset")