squallio
Messages postés4Date d'inscriptionsamedi 20 mars 2010StatutMembreDernière intervention16 avril 2010
-
22 mars 2010 à 19:48
Arto_8000
Messages postés1044Date d'inscriptionlundi 7 mars 2005StatutMembreDernière intervention13 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.
Arto_8000
Messages postés1044Date d'inscriptionlundi 7 mars 2005StatutMembreDernière intervention13 juillet 20107 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.
squallio
Messages postés4Date d'inscriptionsamedi 20 mars 2010StatutMembreDernière intervention16 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
Arto_8000
Messages postés1044Date d'inscriptionlundi 7 mars 2005StatutMembreDernière intervention13 juillet 20107 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.