Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour tout le monde,
Je débute dans le domaine informatique et surtout en PHP/MySQL et pour mon stage je dois créer un outils qui permettrai à l'entreprise de rechercher plus rapidement dans sa base de donnée car elle a 3 tables avec plusieurs champs et de nombreuse lignes sur chaque table et recherche dans ces tables un truc devient un parcours du combattant.
Voila j'ai regardé un peu partout et je désespère car je ne trouve pas de solution à mon problème.
Donc je vous explique mon problème. J'ai une BDD avec 3 tables ((clients, interactions, adresse) (elles sont fictifs car je fais d'abords sur des fausse pour ensuite faire sur les leurs afin de pas faire n'importe quoi) dans ces 3 tables j'ai plusieurs champs et plusieurs lignes. Ma table interaction est celle qui met en relation les 3 tables. (c'est une représentation identique a la BDD de mon tuteur de stage).
Donc jusque là tout va bien. J'arrive à affiché mes tables mais j'ai créer à coté une recherche par mots clefs pour que sur ma page j'ai que les lignes voulues (selon ma recherche) qui ne s'affiche. La recherche fonctionne sur une seule table (je n'arrive pas à faire en sorte qu'elle fonctionne pour les 3 tables, je ne sais pas pourquoi?).
Et en plus quand je fais ma recherche je devrais avoir les mots clefs rechercher qui ressorte en gras dans mes lignes car chaque lignes possèdent plusieurs champs mais tout les champs ne font pas partie de la recherche.
C'est a dire :
Table 1
1 id champs1 champs2 champs3 champs4 champs5
2 id champs1 champs2 champs3 champs4 champs5
3 id champs1 champs2 champs3 champs4 champs5
4 id champs1 champs2 champs3 champs4 champs5...
Table 2
1 id champs1 champs2 champs3 champs4 champs5
2 id champs1 champs2 champs3 champs4 champs5
3 id champs1 champs2 champs3 champs4 champs5
4 id champs1 champs2 champs3 champs4 champs5...
Table 3
1 id champs1 champs2 champs3 champs4 champs5
2 id champs1 champs2 champs3 champs4 champs5
3 id champs1 champs2 champs3 champs4 champs5
4 id champs1 champs2 champs3 champs4 champs5...
Ma recherche ce fait sur la champs1, champs2 et champs4 donc les mots rechercher de ces champs devraient ressortir en gras mais ce n'ai pas le cas.
Voici mon code php (Ce code corresponds du coup pour une table avec la recherche et sa fonctionne pour cette table car je n'arrive pas a faire fonctionné cette recherche toutes les tables.)
if(isset($_POST['valider'])){
$_SESSION['table']=$_POST['valider'];
}
if(isset($_SESSION['table'])){
if(isset($_POST['Sup'])){
$id=$_POST['id'];
$supprimer = $_POST['Sup'];
try{ $bdd->query("DELETE FROM ".$_SESSION['table']. " WHERE id_".$_SESSION['table']. "=".$id);
}catch(PDOException $e ){
echo "Error: ".$e;
}
}
// Ceci est l'action pour supprimer la ligne d'une table
if(isset($_POST['Modif'])){
$id=$_POST['id'];
$modifier = $_POST['Modif'];
$preparation="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id'){
$preparation=$preparation.$clef.'="'.$value.'",';
}
}
$preparation = substr($preparation, 0, -1);
$modifier=$bdd->query("UPDATE ".$_SESSION['table']. " SET ".$preparation. " WHERE id_".$_SESSION['table']. "=".$id);
}
// Ceci est l'action pour modifier la ligne d'une table
if(isset($_POST['Envoyer'])){
$preparation="";
$insert="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id' && $clef !='Envoyer' && $clef !='"_$j_"' ){
$insert=$insert.$clef.",";
$preparation=$preparation."'".$value."',";
}
}
$preparation = substr($preparation, 0, -1);
$insert = substr($insert, 0, -1);
$ajouter=$bdd->query('INSERT INTO '.$_SESSION['table'].'('.$insert.') VALUES('.$preparation.')');
}
// Ceci est l'action qui permet de faire envoyer ce qu'on a écrit.
echo "<h1>".$_SESSION['table']."</h1>";
echo "<table>";
$entete=$bdd->query("SHOW COLUMNS FROM ".$_SESSION['table']);
echo "<tr>";
$enteteELT=$entete->fetchAll();
for($x=0 ; $x<sizeof($enteteELT) ; $x++){
echo '<th>'.$enteteELT[$x]['Field']. '</th>';
}
echo "</tr>";
if(!empty($_POST['id])){
$_SESSION['id]=$_POST['id];
}
if(empty($_SESSION['id])){
$_SESSION['id']="%%"; // Permet d'avoir tous les résultats su aucune recherche n'a été effectuée
}
//Champ 1 = Code départemental
if(!empty($_POST['champs1'])){
$_SESSION['champs1']="%".$_POST['champs1']."%";
}
if(empty($_SESSION['champs1'])){
$_SESSION['champs1']="%%";
}
//Champ 2
if(!empty($_POST['champs2'])){
$_SESSION['champs2']="%".$_POST['champs2']."%";
}
if(empty($_SESSION['champs2'])){
$_SESSION['champs2']="%%";
}
//Champ 3
if(!empty($_POST['champs3'])){
$_SESSION['champs3']="%".$_POST['champs3']."%";
}
if(empty($_SESSION['champs3'])){
$_SESSION['champs3']="%%";
}
//Champ 4
if(!empty($_POST['champs4'])){
$_SESSION['champs4']="%".$_POST['champs4']."%";
}
if(empty($_SESSION['champs4'])){
$_SESSION['champs4']="%%";
}
//Champ 5
if(!empty($_POST['champs5'])){
$_SESSION['champs5']="%".$_POST['nom']."%";
}
if(empty($_SESSION['champs5'])) {
$_SESSION['champs5']="%%"; // Permet d'avoir tous les résultats su aucune recherche n'a été effectuée
}
if(isset($_POST['reset'])){
$_SESSION['id']="%%";
$_SESSION['champs1']="%%"; // Permet d'avoir tous les résultats si aucune recherche n'a été effectuée
$_SESSION['champs2']="%%";
$_SESSION['champs3']="%%";
$_SESSION['champs4']="%%";
$_SESSION['champs5']="%%";
}
//Permet d'envoyer les requêtes
$requete=$bdd->prepare('SELECT * FROM table WHERE id LIKE :id AND champs1 LIKE :champs1 AND champs2 LIKE :champs2 AND champs3 LIKE :champs3 AND champs4 LIKE :champs4 AND champs5 LIKE :champs5 LIMIT 100' ); //Selectionne ma table
$requete->bindValue(':id,$_SESSION['id']);
$requete->bindValue(':champs1',$_SESSION['champs1']);
$requete->bindValue(':champs2',$_SESSION['champs2']);
$requete->bindValue(':champs3',$_SESSION['champs3']);
$requete->bindValue(':champs4',$_SESSION['champs4']);
$requete->bindValue(':champs5,$_SESSION['champs5']);
$requete->execute();
while($requeteELT=$requete->fetch(PDO::FETCH_ASSOC)){
echo "<tr>";
echo '<form method="POST" action="travail.php">';
$nb_colonne=0;
foreach ($requeteELT as $clef => $valeur) {
$nb_colonne++; if (substr($clef, 0, 3)=='id_'){
echo "<td>".$valeur.'</td>
<input type="hidden" NAME="id" value="'.$valeur.'"/>';
}
else {
echo "<td><input TYPE='text' NAME='".$clef."' value='".$valeur."'></td>";
}
}
// boucle while qui permet la récupération de données des tables
echo '<td>
<input type="hidden" NAME="valider" VALUE="'.$_SESSION['table'].'"/>
<input TYPE="submit" NAME="Modif" VALUE="Modifier"/>
<input TYPE="submit" NAME="Sup" VALUE="Supprimer"/>
</td>'; // Ces boutons permettent d'envoyer la modification ou la suppression d'une ligne de la table
echo '</form>';
echo "</tr>";
}
echo '<tr>';
echo '<form method="POST" action="travail.php">'; // la fonction "action='..'" permet de redériger vers une page, ici on reste sur la même.
echo '<input type="hidden" NAME="valider" VALUE="'.$_SESSION['table'].'"/>';
$entete=$bdd->query("SHOW COLUMNS FROM ".$_SESSION['table']);
echo "<tr>";
while($enteteELT=$entete->fetch()){
if(substr($enteteELT["Field"], 0, 3)=='id_'){
echo '<td><input type="hidden" NAME="id"/></td>';
}
else {
echo "<td><input TYPE='text' NAME='".$enteteELT["Field"]."'></td>";
}
}
?>
<td>
<input TYPE="submit" NAME="Envoyer" VALUE="Ajouter"/></td> <!-- permet d'ajouter une ligne sur la table
</form>
</tr>
<?php echo "</table>"; // affiche la table
} else {
echo " "; // permet de voir les tables sans le détails, sans les lignes, juste le nom de la table qui apparait.
}
?>
Sinon mon code pour mettre en lien les 3 tables c'est ca :
Donc ma question est la suivante : Quelqu'un pourrait m'explique comment je peux faire (avec un exemple car sinon je n'arriverais pas à comprendre) pour que j'ai les mots qui ressorte en gras quand j'ai effectué une recherche ??
J'espère qu'une personne va pouvoir m'expliquer afin que je puisse comprendre et refaire !
Je vous remercie de toute l'aide que vous pourrez m'apporter mais également du temps que vous allez accorder à ce problème.
Dernière modification par celyne (08-06-2017 10:53:27)
Hors ligne
Pour Info voici ce que j'ai essayé en code pour mettre en gras (après je sais pas si je l'avais bien placé ou si il y avait des erreurs je suis trop novice pour le voir par moi même) :
echo "<br/>";
$motclefs = " ";
$search = explode(" ", $motclefs);
foreach ($search as $data) {
$bdd = " (id LIKE '%".$data."%' OR table LIKE '%".$data."%')";
}
$WHERE = 'WHERE'. implode(" ", (array) $bdd);
echo $WHERE.'<hr>';
$search = explode ("AND ", $motclefs);
$WHERE = 'WHERE';
$COUNT = 0;
reset($search);
while (list ($data) = each($search)) {
$COUNT = $COUNT ++ ;
if($COUNT==1) $WHERE = "( table LIKE '%".$data."%' OR id LIKE '%".$data."%')"; //recherche sur 1 mot
else $WHERE = "AND (id '%".$data."%' OR table LIKE '%".$data."%')"; //recherche sur plusieurs mots
}
echo $WHERE.'<hr>';
$id="";
$gras="N";
$motclefs="";
//$motclefs=$_POST['table];
// Requete pour joindre plusieurs tables entre elles
$requete=$bdd->prepare("SELECT c.*, i.*, a.* FROM clients c
LEFT OUTER JOIN interaction i ON 'i.champs1'='c.champs1' LEFT OUTER JOIN adresse a ON 'a.champs2'='i.champs2'
WHERE 'i.champs4' LIKE '%%' AND 'c.champs5' AND 'c.champs3'
ORDER BY 'i.champs1' DESC" );
$requete->execute();
// On parcours toutes les tables
while ($row=$requete->fetch(PDO::FETCH_ASSOC)){
$id=stripslashes($row['id']);
if ($id==$motclefs){
// Fin controle
$gras = "0";
if ($gras=="0") echo("".$motclefs."<br/>");
if ($gras="N") echo("<b>".$motclefs."</b> <br/>");
}
}
var_dump($requete);
//Recherche 2 On determine l'expression a rechercher
if(isset($_POST['motclefs'])){
//On récupère ce qu'a rentrer l'utilisateur dans le champ texte et on utilise la fonction htmlentities pour se protéger d'une faille web
$rec = htmlentities($_POST['motclefs']);
}
else {
$rec = $bdd; //$bdd (c'est ma variable de connexion déclarer en début du code
}
//On determine le type de recherche
if(isset($_POST['type'])){
if($_POST['type']=='un')//Un des mots
{
$type = 1;
}
elseif($_POST['type']=='tout')//Tout les mots
{
$type = 2;
}
else//L'expression exacte
{
$type = 3;
}
}
else{
$type = 1;//type par defaut: L'expression exacte
}
//On determine si on doit surligner les mots dans les resultats
if(!isset($_POST['surligner']) or $_POST['surligner']!='true'){
$surligner = false;
}
else{
$surligner = true;
}
//On fait notre requete on va chercher toutes les entrées de "matable" ou les motclés correspondent a ce que vient de rentrer l'utilisateur
$req = 'SELECT id, nom FROM table WHERE ';
if($type==1){
//ayant un des mots dans leurs informations
$motclefs = explode(' ',$rec);//En separre lexpression en mots clef
foreach($motclefs as $mot){
$req .= ' LIKE "%'.$mot.'%" OR';
}
$req .= ' 1=0';
}
elseif($type==2){
//ayant tout des mots dans leurs informations
$motclefs = explode(' ',$rec);//En separre lexpression en mots clef
foreach($motclefs as $mot)
{
$req .= ' infos LIKE "%'.$mot.'%" AND';
}
$req .= ' 1=1';
}
else{
//ayant l'expression exacte dans leurs informations
$req .= 'infos LIKE "%'.$rec.'%"';
}
//On fait une boucle et on affiche tous les sujets par exemple ou motclés = mot
// while($data= $req->fetch(PDO::FETCH_OBJ))
// {
// echo '<a href="'.$data['unChamps'].'"> '.$data['unChamps'].'</a><br> </br>';
// }
//Le formulaire de recherche
?>
<h2>Résultats</h2>
<?php
//On affiche les resultats
while($requeteELT=$requete->fetch(PDO::FETCH_ASSOC)){
?>
<tr>
<td><?php echo $requeteELT['id']; ?></td>
<td><?php echo $requeteELT['champs1']; ?></td>
<td><?php echo $requeteELT['champs2']; ?></td>
<td><?php echo $requeteELT['champs3']; ?></td>
<td><?php echo $requeteELT['champs4']; ?></td>
<td><?php echo $requeteELT['champs5']; ?></td>
<td>
<?php
if($surligner){//Si il faut surligner les mots, on les surligne
echo "<tr>";
if($type==3){
echo preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $requeteELT['infos']);//On surligne l'expression exacte
}
else{
echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '<strong>$1</strong>', $requeteELT['infos']);//On surligne les mots clef de la recherche
}
}
else{
echo $requeteELT['infos'];//On ne surligne pas
}
}
// Recherche 3
while($motclefs = $requete->fetch(PDO::FETCH_ASSOC)){
echo "<tr>";
echo '<form method="POST" action="travail.php">';
$motclefs[0] == 1;
//Si la variable $_POST['nom'] existe et n'est pas vide, alors $motclefs = $_POST['unChamps'] sinon elle vaut NULL
foreach ($motclefs as $clef => $valeur) {
if (substr($clef, 0, 3)=='id_'){
echo "<td>".$valeur.'</td>
<input type="hidden" NAME="id" value="'.$valeur.'"/>';
}
$motclefs = !empty($_POST['unChamps']) ? $_POST['unChamps'] : NULL;
if ($requete['mot'] == $motclefs){
echo '<input style="font-weight: bold;"';
}
}
var_dump($motclefs); // ça me met boolean falses
// Recherche 4 essaie par fonction
function MotEnGras($motclefs, $phrase) {
$motclefs = strtolower(strtr( $motclefs, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ));
$requete = array("a","e","i","o","u","y","c","n" );
$remplacement = array("[a|à|á|â|ã|ä|å]{1}","[e|è|é|ê|ë]{1}","[i|ì|í|î|ï]{1}","[o|ò |ó|ô|õ|ö|ø]{1}","[u|ù|ú|û|ü]{1}","[y|y]{1}","[c|ç]{1}","[n|ñ]{1}" );
$motclefs = str_replace($requete, $remplacement, $motclefs);
return eregi_replace("($motclefs)", "<strong><b></strong>\\1<strong></b></strong>", $phrase);
}
// Recherche 5 essaie par fonction
function MotEnGras($motclefs, $phrase) {
$motclefs = strtolower(strtr( $motclefs, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ));
$requete = array("a","e","i","o","u","y","c","n" );
$remplacement = array("[a|à|á|â|ã|ä|å]{1}","[e|è|é|ê|ë]{1}","[i|ì|í|î|ï]{1}","[o|ò |ó|ô|õ|ö|ø]{1}","[u|ù|ú|û|ü]{1}","[y|y]{1}","[c|ç]{1}","[n|ñ]{1}" );
$motclefs = str_replace($requete, $remplacement, $motclefs);
return eregi_replace("($motclefs)", "<strong><b></strong>\\1<strong></b></strong>", $phrase);
}
while($motclefs = $requete->fetch(PDO::FETCH_ASSOC)){
echo "<tr>";
echo '<form method="POST" action="travail.php">';
//Si la variable $_POST['nom'] existe et n'est pas vide, alors $motclefs = $_POST['nom'] sinon elle vaut NULL
foreach ($motclefs as $clef => $valeur){
$motclefs++; if (substr($clef, 0, 3)=='id_'){
echo "<td>".$valeur.'</td>
<input type="hidden" NAME="id" value="'.$valeur.'"/>';
}
$motclefs = !empty($_POST['nom']) ? $_POST['nom'] : NULL;
if ($requete['mot'] == $motclefs){
echo '<input style="font-weight: bold;"';
}
}
}
var_dump($motclefs); // ça me met boolean falses
Hors ligne
Bonjour Celyne
Si j'ai bien compris ton problème tu cherches à mettre en gras certains mots d'une chaine.
J'ai déjà fait cela et le script était du genre :
Voici ma proposition en espérant que cela puisse t'aider.
Bon courage
GPN
Dernière modification par GPN (17-06-2017 15:16:48)
Hors ligne
Pages :: 1