Je bute sur deux problèmes[résolu]

Petit nouveau ! | 6 Messages

22 mars 2010, 20:44

Bonjour.

Je me permet de venir poster un message ici dans le but de trouvées une ou plusieurs réponse si possible.
Je suis entrain de créer un site ( intranet pour une entreprise ), est je cherche a faire un formulaire qui pourrai me permettre de trouver tel ou tel information stocké dans la base de donnée.

Voici mon code qui conporte des erreurs que je n'arrive pas à résoudre :
<?php require_once('Connections/parc.php'); ?>
<?php
/*
	Page de recherche des mots de passe
*/

$nb_rech =0;
$erreur ="";



if(isset($_POST["submit_rech"]))
{
	$tab_rech=array();
	
	
if(isset($_POST["nom_poste"]) && $_POST["nom_poste"]!="")
	{
		$rech=$_POST["nom_poste"];
		$tab_mots=explode(" ",$rech);
		foreach($tab_mots as $mot)
		{
			$requete="SELECT * FROM `consultation` WHERE nom_poste LIKE \"%$mot%\" ";
		}
	}
	elseif(isset($_POST["email"]) && $_POST["email"]!="")
	{
		$rech=$_POST["email"];
		$tab_mots=explode(" ",$rech);
		foreach($tab_mots as $mot)
		{
			$requete="SELECT * FROM `consultation` WHERE email LIKE \"%$mot%\" ";
		}
	}
	elseif(isset($_POST["login_utilisateur"]) && $_POST["login_utilisateur"]!="")
	{

		$rech=$_POST["login_utilisateur"];
		$tab_mots=explode(" ",$rech);
		foreach($tab_mots as $mot)
		{
			$requete="SELECT * FROM `consultation` WHERE login_utilisateur LIKE \"%$mot%\" ";
		}
	}
	else
	{
		$erreur.="Erreur un ou plusieurs champs sont vides";
	}
	if($erreur=="")
	{
		//execute la recherche
		$resultat=mysql_query($requete);
		while($ligne=mysql_fetch_assoc($resultat))
		{
			$nb_rech++;
			$tab_rech[]=$ligne;
		}

	}
}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<title>Rechercher un poste</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div id="container">

<div id="header"></div>

<div id="sub_header">Le slogan par la !</div>

<div id="main_content_top"></div>

<div id="main_content">

<div class="content-rech">
<h2>Rechercher un poste de travail.</h2>
<p><?php
if($nb_rech ==0)
{

?>
<b>Menu:</b>
<?php echo "<center><font color=\"red\">$erreur</font></center>" ?>
<table>
  <form name="rech" action="recherche.php" method="post">
  <tr>
  <td>Rechercher par nom du poste</td>
  <td><input type="text" name="nom_poste" size="25" value="" />
  </tr>
  <tr>
  <td>Rechercher par adresse email:
  <td><input type="text" name="email" size="25" value="" />
  </tr>
  <tr>
  <td>Rechercher par login:
  <td><input type="text" name="login_utilisateur" size="25" value="" />
  </tr>
  <tr>
  <td colspan="2" align="right"><input type="submit" name="submit_rech" value="Go" />
  <tr>
  </form>
</table>
<?php
}
else
{
?>
<b>Menu:</b>
<div>
<a href="recherche.php">Nouvelle recherche</a> / <a href="index.html">Retour accueil</a>
</div>

<div>1 résultat trouvé dans la base. </div>
<br />
<table align="center">
	<tr>
		<td align="center">Informations générals</td>
	</tr>
</table>
<table border="2" cellpadding="10" align="center">
	<tr>
		<th align="center">ID</th>
    	<th align="center">Nom du poste</th>
    	<th align="center">Os</th>
    	<th align="center">Bâtiment</th>
    	<th align="center">Etage</th>
    	<th align="center">Porte</th>
    	<th align="center">Prise</th>
	</tr>
<?php
for($i=0;$i<$nb_rech;$i++)
{
	$id=$tab_rech[$i]["id"];
	$nom_poste=$tab_rech[$i]["nom_poste"];
	$os=$tab_rech[$i]["os"];
	$batiment=$tab_rech[$i]["batiment"];
	$etage=$tab_rech[$i]["etage"];
	$porte=$tab_rech[$i]["porte"];
	$num_prise=$tab_rech[$i]["num_prise"];

	echo "<tr>";
	echo "<td align=\"center\">$id</td>";
	echo "<td align=\"center\">$nom_poste</td>";
	echo "<td align=\"center\">$os</td>";
	echo "<td align=\"center\">$batiment</td>";
	echo "<td align=\"center\">$etage</td>";
	echo "<td align=\"center\">$porte</td>";
	echo "<td align=\"center\">$num_prise</td>";
	echo "</tr>";
}
?>
</table>
<br />
<table align="center">
	<tr>
		<td align="center">Informations utilisateurs</td>
	</tr>
</table>
<table border="2" cellpadding="10" align="center">
	<tr>
    	<td align="center">Service</td>
    	<td align="center">Email</td>
    	<td align="center">Login</td>
    	<td align="center">Password</td>
    	<td align="center">Application</td>
    	<td align="center">Commande</td>
	</tr>
<?php
for($i=0;$i<$nb_rech;$i++)
{
	
	$service=$tab_rech[$i]["service"];
	$email=$tab_rech[$i]["email"];
	$login_utilisateur=$tab_rech[$i]["login_utilisateur"];
	$password=$tab_rech[$i]["password"];
	
	echo "<tr>";
	echo "<td align=\"center\">$service</td>";
	
	if($email=="-") 
		echo "<td>-</td>";
	else 
		echo "<td align=\"center\"><a target=\"_blank\" href=\"$email\">$email</a></td>";

	echo "<td align=\"center\">$login_utilisateur</td>";
	echo "<td align=\"center\">$password</td>";
	echo "<td align=\"center\">";
	echo "<a href=\"\" onclick=\"javascript:window.open('voir_application.php?id=$id','width=400,height=250,scrollbars=yes');\">Voir</a>";
	echo "</td>";
	echo "<td align=\"center\">";
	echo "<a href=\"\" onclick=\"javascript:window.open('modifie_pass.php?id=$id','pass','width=400,height=250,scrollbars=yes');\">Modifier</a>";
	echo "</td>";
	echo "</tr>";
}
}
?>
</table>
</p>
</div>
<div id="clear"></div>

</div>

<div id="main_content_bottom">
</div>

<div id="footer"><strong>Copyright &copy; 2010</strong> | <a href="#">Nom de l'entreprise</a> | <b>Design </b>r&eacute;alier par ???</div>

</div>

</body>

</html>
Mon problème est que le formulaire fonctionne mais a moitié on va dire, car si renseigne 3 critéres de recherche et que le 1er est faux il me retournera rien ( même si le deuxiéme et juste par exemple ):cry:
Si je renseigne toujours 3 critéres de recherche et que cette fois les 3 sont correct il me donnera que le résultat du premier citére ( j'espére que j'écrit pas trop chinoi est que je suis explicite ) donc j'en conclus que la requete 1er est dominante est que les autres sont exploitatable seulement si le critére 1 n'est pas renseigné.

Comment faire pour qu'il n'y est plus ce problème ???
deuxiéme question :

Je souhaiterai si possible afficher 1 ou plusieurs résultats, dison que les 3 critéres de recherche sont correct mais qu'ils pourraient donner trois résultats différents comment réaliser cela ?


Si je vient poster ici c'est que je fait un projet d'étude et que cela est trés important pour moi j'espére vraiment trouvé de l'aide.

Merci d'avance cordialement dagny
Modifié en dernier par dagny le 24 mars 2010, 09:48, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mars 2010, 11:49

Déjà, utilise les balises
 pour présenter ton code et met un titre plus explicite, on se doute que tu as un problème si tu viens ici, la description de ce problème aidera les recherches futures d'autres personnes.

Tout de suite dans ton code on se rend compte d'un problème : pas de requête dans une boucle. Tu vas exécuter ta requête SELECT autant de fois que tu as de mots, ce n'est pas bon côté performances. Pourquoi ne pas plutôt construire ta requête dans la boucle, et ne l'exécuter qu'une fois.
Voici plusieurs exemples de construction de requêtes : http://forum.phpfrance.com/vos-contributions/requete-sql-dynamique-avec-parametres-variables-nombreux-t3902.html

J'ai regardé vite fait mais si je comprends bien pour le premier critère tu mets des mots séparés par des espaces. Tu veux donc arriver à quelque chose comme ça :
[sql]
SELECT * FROM `consultation` WHERE nom_poste LIKE \"%$mot1%\" OR nom_poste LIKE \"%$mot2%\" OR nom_poste LIKE \"%$mot3%\"
[/sql]

Une fois ce système mis en place, tu pourrais le faire de même pour les deux autres requêtes (mais ça fera peut-être beaucoup de critères à la fois, tu peux à la limite garder 3 requêtes séparées et fusionner les résultats à la fin) :
[sql]
SELECT * FROM `consultation` WHERE nom_poste LIKE \"%$mot1%\" OR nom_poste LIKE \"%$mot2%\" OR nom_poste LIKE \"%$mot3%\"
OR email LIKE \"%$mot4%\" OR email LIKE \"%$mot5%\"
[/sql]

[quote]
Mon problème est que le formulaire fonctionne mais a moitié on va dire, car si renseigne 3 critéres de recherche et que le 1er est faux il me retournera rien ( même si le deuxiéme et juste par exemple ):cry: [/quote]
Normal, si tu as le premier critère de renseigné tu rentres là-dedans :
[php]if(isset($_POST["nom_poste"]) && $_POST["nom_poste"]!="")
et ensuite tu as :
elseif(isset($_POST["email"]) && $_POST["email"]!="")
avec ce elseif, tu ne rentreras jamais dans la partie "email" si la partie "nom poste" est exécutée.
Tu devrais avoir 3 if déconnectés si tu veux traiter les 3 critères de recherche séparément.

Petit nouveau ! | 6 Messages

24 mars 2010, 09:47

j'ai trouver c'est good ouf j'en avez marre merci beaucoup !!!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mars 2010, 12:26

Explique nous ce que tu as fait pour corriger le code, ça peut toujours servir à quelqu'un d'autre...