2 problèmes que je ne comprend pas !

squallio Messages postés 4 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 16 avril 2010 - 22 mars 2010 à 19:48
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 23 mars 2010 à 15:32
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>










Le slogan par la !










Rechercher un poste de travail.

<?php
if($nb_rech ==0)
{

?>
 Menu: 
<?php echo "<center>$erreur</center>" ?>
<form name =\"rech\" action= \"recherche.php\" method=\"post\">
----

Rechercher par nom du poste,

----, Rechercher par adresse email:

----, Rechercher par login:

----, 
----

</form>

<?php
}
else
{
?>
 Menu: 


[recherche.php Nouvelle recherche] / [index.html Retour accueil]




1 résultat trouvé dans la base. 



Informations générals

ID |
Nom du poste |
Os |
Bâtiment |
Etage |
Porte |
Prise |

<?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 \"----
\";
echo \"$id, \";
echo \"$nom_poste, \";
echo \"$os, \";
echo \"$batiment, \";
echo \"$etage, \";
echo \"$porte, \";
echo \"$num_prise, \";
echo \"\";
}
?>



Informations utilisateurs

Service,
Email,
Login,
Password,
Application,
Commande,

<?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 \"----
\";
echo \"$service, \";

if($email==\"-\")
echo \"-, \";
else
echo \"[# Nom de l'entreprise] | Design réalier par ???







</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

3 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
23 mars 2010 à 00:56
Il faudrait que tu merges tes critères en une seule requête SQL. C'est plus simple à gérer surtout pour les résultats puisque tout vient en un seul résultat.

Rapidement ça donnerait quelque chose dans le genre :
<?php
$erreur = "";

if (isset($_POST['submit_rech'])) {
$sql = 'SELECT * FROM `consultation` WHERE ';
$nbCritere = 0;
$fields = array(
'nom_poste'         => 'nom_poste',
'email'             => 'email',
'login_utilisateur' => 'login_utilisateur'
);

// On parcours chaque champs du formulaire et on construit la requête SQL //
foreach ($fields as $champInput => $champSQL) {
if (isset($_POST[$champInput]) && $_POST[$champInput] != "") {
if ($nbCritere > 0)
$sql .= ' AND ';

$sql .= '(';
$tab_mots=explode(' ', $_POST[$champInput]);
for($i=0; $i<count($tab_mots); $i++) {
if ($i != 0)
$sql .= ' OR ';
$sql .= $champSQL . ' LIKE "%' . mysql_real_escape_string($mot) . '%"';
}
$sql .= ')';
$nbCritere++;
}
}

$tab_rech = array();
if ($nbCritere > 0) {
$resultat=mysql_query($requete);
while($ligne=mysql_fetch_assoc($resultat)) {
$tab_rech[]=$ligne;
}
} else {
$erreur.="Erreur un ou plusieurs champs sont vides";
}
}
?>


J'ai pas vraiment testé, mais essentiellement ça devrait être ça.
0
squallio Messages postés 4 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 16 avril 2010
23 mars 2010 à 08:58
Je m'excuse mais cela ne fonctionne pas !
Pourquoi avez vous supprimez $nb_rech =0; cette variable me permet de ne pas afficher le tableau si aucune recherche est effectuer ???

Je vous remercie vraiment pour cette premiére réponse mais serait il possible de vous solicité encore un peut plus de maniére a trouver une solution ?


En espérant avoir une solution merci beaucoup !
cordialement
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
23 mars 2010 à 15:32
Le nombre de recherche est un peu absurde comme principe puisque tu fais une recherche ou non. Tu peux quand même vérifier si une recherche a été faite en vérifiant si le tableau de résultat est présent if(isset($tab_rech) && count($tab_rech) > 0).

Le code est juste la à titre indicatif et comme j'ai dit "J'ai pas vraiment testé". C'est une façon plus simple des fois de montrer un principe (parce que le code reprend le principe de regrouper tous tes recherches en une seule). L'essentiel qu'il faut que tu comprendre c'est juste l'algorythme de regrouper tous tes critères dans une seule recherche à partir de là tu l'intègre comme tu veux dans ton script.

En gros la requête bâti va ressembler à ceci :

SELECT * FROM `consultation` WHERE (email LIKE "%valeur1" OR email LIKE "%valeur2%") AND (nom_poste LIKE "%valeur3" OR nom_poste LIKE "%valeur4")

Cette requête va te donner un résultat unique pour tous tes critères de recherche.
0