PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » Mettre en gras certains mots dans le PHP » 17-06-2017 15:13:42

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) :


// recherche 1 Pour mettre les mots rechercher en gras dans le résultat

  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

 

#2 Forum Général PHP » Mettre en gras certains mots dans le PHP » 17-06-2017 15:13:42

celyne
Réponses : 2

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.)


<?php

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 :


$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" );
 

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 ?? roll

J'espère qu'une personne va pouvoir m'expliquer afin que je puisse comprendre et refaire ! smile

Je vous remercie de toute l'aide que vous pourrez m'apporter mais également du temps que vous allez accorder à ce problème.

#3 Re : Forum Général PHP » Besoin d'aide » 08-06-2017 09:42:34

Bonjour angeailes,

Tu as une faute sur ton head ! Je t'es écris dans ton code ce que j'ai vu qui n'allait pas.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="style.css" />
    <title>Bon, on dirait que c'est ok</title>
  </head> // Ici tu ferme ton head c'est bien !!!
  <body>
    <?php
      try
      {
        $bdd = new PDO('mysql:host=localhost;dbname=leTest;charset=utf8', 'root', 'root');
        echo '<script type="text/javascript">'
        . 'alert("Connecté");'
        . '</script>';
      }
      catch (Exception $err)
      {
        echo '<script type="text/javascript">'
        . 'alert("Oups, on dirait que la connexion a échouée...");'
        . '</script>';
          die('Erreur : ' . $err->getMessage());    
      }
      $rep = $bdd->query('SELECT * FROM ARTICLE');
      $affichage = $rep->fetch();
    ?>
      <h1>
      <?php
      echo $affichage['titre'];
      ?>
      </h1>
      <p>
      <?php
      echo $affichage['contenu'];
      ?>

      </p>
    <form>
    <textarea name="title" rows="7" cols="38" onfocus="this.value=''">Titre</textarea>
    <input type="button" name="gras" value="G" OnClick="document.forms.portable.ecran.value='<strong></strong>'"/>
    <input type="button" name="B" value="b" OnClick="document.forms.portable.ecran.value='b'"/>
    <textarea name="comment" rows="7" cols="38" onfocus="this.value=''">Start typing</textarea>
    <br>
    <input type="reset" value="Effacer"></form>
   
    <php
    $_POST['comment']
    $_POST['title']
    if (isset ($_POST['title']) && (isset($_POST['comment'])
    {
      if ($_POST['title']!="") && ($_POST['comment']!="")
      {
        $sql = $ajout->prepare("INSERT INTO ARTICLE (contenu,titre) VALUES('".$_POST['contenu']."','".$_POST['titre']."')");
      }
    }
    $affichage->closeCursor();
    ?>
  </body>
</head> // Pourquoi tu le referme une deuxième fois ici? tu dois pas l'avoir en bas ! Tu peux le retirer à cette endroit car il sert a rien et ta faute peu venir de ca.  

Pied de page des forums

Propulsé par FluxBB