Prbleme recheche multi champ

cs77 Messages postés 2 Date d'inscription mercredi 21 octobre 2009 Statut Membre Dernière intervention 2 novembre 2009 - 28 oct. 2009 à 11:28
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 2 nov. 2009 à 21:29
Bonjour,

Je suis novice en Php et Mysql.
Je dois préparer un site pour une association de généalogie.

Les membres de l'association feront des recherches sur les actes de naissances, mariage et décès. Ils rechercheront soit l'année, soit un nom soit les deux l'année et le nom.

J'ai mis un bouton radio pour les actes, un de ces 3 boutons doit être obligatoirement coché.

J'ai réussi à faire la recherche par année.

Mais je n'arrive pas à faire la recherche soit par année, soit par nom ou les 2.

Voici des exemples, soit faire une recherche sur l'année 1786, soit sur le nom Dupont et enfin voire s'il existe un Dupont en 1786.

Je pense que mon problème vient de la ligne 32 :$resultn = mysql_query("SELECT * from ".$tablen. " WHERE (annee=) OR (nom LIKE '%) OR ((annee=) AND (nom LIKE '%))".$_GET["an"],$connect), et particulièrement du .$_GET["an"].
lors de la recherche dans mon formulaire j'ai aucune réponse

mais quand j'écris ce code $resultn = mysql_query("SELECT * from ".$tablen." WHERE annee=".$_GET["an"], $connect)
lors de la recherche dans mon formulaire j'ai les réponses correspondantes à l'année, c'est normal.

Je fais mes tests en local avec Wamp et j'écris mon code avec Notepad++

Merci de votre aide

Voici mon code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
</head>


                 Critères de Recherche du dépouillement de l'état civil 




<form action="index.php" method="get">




      Naissances         
      Mariages         
      Décès        





Année
:



Nom
  
:





                       
</form>
<?php $adress = "localhost";
$portdb "3306"; $userdb "root"; $pssdb = ""; $datab = "agbcr"; $tablen = "naissance";$tablem = "mariage";$tabled = "deces";
$tbl_res = "";

$acte "";if($_GET["acte"] "nai") { $connect = mysql_connect($adress,$userdb,'') or die("Erreur de connexion au serveur."); mysql_select_db($datab,$connect) or die ("erreur de connexion base"); $resultn = mysql_query("SELECT * from ".$tablen. " WHERE (annee=) OR (nom LIKE '%) OR ((annee=) AND (nom LIKE '%))".$_GET["an"],$connect);}

else if($_GET["acte"] == "mar"){ $connect = mysql_connect($adress,$userdb,'') or die("Erreur de connexion au serveur."); mysql_select_db($datab,$connect) or die ("erreur de connexion base"); $resultm = mysql_query("SELECT * from ".$tablem." WHERE annee=".$_GET["an"], $connect); }
else if($_GET["acte"] == "dec"){ $connect = mysql_connect($adress,$userdb,'') or die("Erreur de connexion au serveur."); mysql_select_db($datab,$connect) or die ("erreur de connexion base"); $resultd = mysql_query("SELECT * from ".$tabled." WHERE annee=".$_GET["an"], $connect); }
if($resultn){ $i=0; while ( $row = mysql_fetch_array($resultn) ){ if($i % 2 == 0){ $color = "#E8F2FF"; }else{ $color = ""; } $nom = $row[2]; $date = $row[4]; $pere = $row[5]; $mere = $row[6]; $prof = $row[7]; $cote = $row[8]; $photo = $row[9];; $tbl_res .= "<tr style="background-color:".$color.";"><td>".$nom."</td><td>".$date."</td><td>".$pere."</td><td>".$mere."</td><td>".$prof."</td><td>".$cote."</td><td>".$photo."</td></tr>"; $i = $i+1; } mysql_close(); echo "Nombre de résultat trouvé, pour la recherche naissance: ".$i."
"; echo ' nom,  date de naissance,  père, mère,  profession du père,  cote,  photo,  '.$tbl_res.'
'; } 
else if($resultm){ $i=0; while ( $row = mysql_fetch_array($resultm) ){ if($i % 2 == 0){ $color = "#E8F2FF"; }else{ $color = ""; } $nom = $row[2]; $date = $row[4]; $pere = $row[5]; $mere = $row[6]; $prof = $row[7]; $cote = $row[8]; $photo = $row[9];; $tbl_res .= "<tr style="background-color:".$color.";"><td>".$nom."</td><td>".$date."</td><td>".$pere."</td><td>".$mere."</td><td>".$prof."</td><td>".$cote."</td><td>".$photo."</td></tr>"; $i = $i+1; } mysql_close(); echo "Nombre de résultat trouvé, pour la recherche mariage: ".$i."
"; echo ' nom,  date de naissance,  père, mère,  profession du père,  cote,  photo,  '.$tbl_res.'
'; } 
else if($resultd){ $i=0; while ( $row = mysql_fetch_array($resultd) ){ if($i % 2 == 0){ $color = "#E8F2FF"; }else{ $color = ""; } $nom = $row[2]; $date = $row[4]; $pere = $row[5]; $mere = $row[6]; $prof = $row[7]; $cote = $row[8]; $photo = $row[9];; $tbl_res .= "<tr style="background-color:".$color.";"><td>".$nom."</td><td>".$date."</td><td>".$pere."</td><td>".$mere."</td><td>".$prof."</td><td>".$cote."</td><td>".$photo."</td></tr>"; $i = $i+1; } mysql_close(); echo "Nombre de résultat trouvé, pour la recherche décès:".$i."
"; echo ' nom,  date de naissance,  père, mère,  profession du père,  cote,  photo,  '.$tbl_res.'
'; } ?>









</html>

5 réponses

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
2 nov. 2009 à 05:54
Slt,

J'ai regardé vite fait ton code, et j'avoue que j'ai eu un peu de mal à comprendre la logique. Il y a des choses superflues aussi ! Bref, je regarde ça plus tard et te tiens au courant sauf si quelqu'un d'autre répond avant moi :) !
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
2 nov. 2009 à 15:32
Je pense que mon problème vient de la ligne 32 :$resultn = mysql_query("SELECT * from ".$tablen. " WHERE (annee=) OR (nom LIKE '%) OR ((annee=) AND (nom LIKE '%))".$_GET["an"],$connect)
Heu, je pense que oui, hin !
Si tu ne renseigne pas à quoi comparer tes champs c'est un peu normal !
- Où est la variable à laquelle tu compare le champs 'annee' ?
- Où est la variable à laquelle tu compare le champs 'nom' ?
0
cs77 Messages postés 2 Date d'inscription mercredi 21 octobre 2009 Statut Membre Dernière intervention 2 novembre 2009
2 nov. 2009 à 20:46
Il doit falloir que je numérote ma checkbox rch. Je vais essayer de ce coté ci
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
2 nov. 2009 à 21:23
Il doit falloir que je numérote ma checkbox rch. Je vais essayer de ce coté ci
Non, je pense pas que ça soit cela le problème. De plus t'es checkbox sont superflues et ne servent à rien en l'état.
Les valeurs 'nom' et 'annee' seront récupérer par les input avec la méthode GET : $_GET['nom'] et $_GET['annee']
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
2 nov. 2009 à 21:29
Salut,

Première remarque, quand on demande de l'aide sur une requête SQL on commence toujours par fournir une description complète de la table. Faire un DESCRIBE c'est pas bien compliqué, ça ne prend pas de temps et ça aide tout le monde.

Pour ce qui est de ta requête, tu as le droit de la créer en plusieurs morceaux, de cette manière par exemple :
<?php
$query = 'SELECT * FROM ta_table WHERE ';
if (!empty($_GET['an']))
  $query .'annee ' . intval($_GET['an']) . (!empty($_GET['nom']) ? ' AND ' : '');
if (!empty($_GET['nom']))
  $query .= 'nom LIKE \'%' . mysql_real_escape_string($_GET['nom']) . '%\'';
?>


Ton code étant d'une laideur a pleurer (bon sang l'indentation ce n'est pas fait pour les chiens) ne t'attends surtout pas a obtenir une solution pour ton code exactement, a toi d'adapter quelque chose de relativement générique comme l'exemple que je vient de mettre. Perso je ne vais pas me faire chier a lire un code complètement obfusqué et j'ai presque envie de prendre une telle obfuscation comme du foutage de gueule contre ceux qui veulent t'aider.
0
Rejoignez-nous