Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. Programmation
  3. Développement web
  4. PHP
  5. Moteur de recherche de base

Moteur de recherche de base

Scheduled Pinned Locked Moved PHP
5 Posts 3 Posters 5.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mars073M
    mars073M
    mars073
    wrote on last edited by
    #1

    <p>Bonjour à tous,<br/>
    Aujourd’hui je vais vous montrer comment coder un moteur de recherche de base, vous pouvez donc aussi bien améliorer la structure de vos tables que la condition de recherche elle même.<br/>
    Contexte: Le moteur de recherche sert à trouver un joueur et afficher ses statistiques.<br/><br/>
    Structure table:</p>
    <pre class="ipsCode prettyprint lang-auto">
    CREATE TABLE players (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(255) NOT NULL,
    guild text NOT NULL,
    token int(11) NOT NULL,
    PRIMARY KEY (id)
    ) AUTO_INCREMENT=1 ;
    </pre>
    <p>Le formulaire de recherche (search.php):</p>
    <pre class="ipsCode prettyprint lang-auto">
    <form action="./search.php" method="GET">
    <label for="name">Nom du joueur</label>
    <input type="text" name="name">
    <input type="submit" value="Rechercher">
    </form>
    </pre>
    <p>Je ne m'attarde pas sur le html vu que c'est un tuto php/my-sql.<br/><br/>
    à la suite du code html vous allons ajouter du php:</p>
    <pre class="ipsCode prettyprint lang-auto">
    <table width="100%">
    <tr>
    <th>#</th>
    <th>Nom</th>
    <th>Points</th>
    </tr>
    <?php
    $page = 0;
    if (isset($_GET['name']) {
    $page = 1; // Page par défaut affichée
    $np_page = 25; // Nom de résultat par page
    $name = addslashes($_GET['name']); // suppression faille sql
    $icxn = mysqli_connect("127.0.0.1", "root", "toor", "game"); //connexion mySQLi

    	// vérification du numéro de la page si elle est indiqué dans l'url en "?page=n"
    	if (isset($_GET['page'])&amp;&amp;is_numeric($_GET['page'])&amp;&amp;
    		$_GET['page']&gt;0&amp;&amp;$_GET['page']&lt;9999999) $page = $_GET['page'];
    	$fourchette = ($page - 1) * $np_page;
    	$iquery = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%' ORDER BY `name` ASC LIMIT $fourchette, $np_page");
    	while ($char = mysqli_fetch_array($iquery)) {
    		echo &lt;&lt;&lt;LINE
    		&lt;tr&gt;
    			&lt;td&gt;{$char['id']}&lt;/td&gt;
    			&lt;td&gt;&lt;b&gt;{$char['name']}&lt;/b&gt;&lt;/td&gt;
    			&lt;td&gt;{$char['token']}&lt;/td&gt;
    		&lt;/tr&gt;
    

    LINE;
    }
    }
    ?>
    </table>
    <?php
    if ($page!=0) {
    echo "page(s): ";
    $iquery_count = mysqli_query($icxn, "SELECT * FROM players WHERE name LIKE '%$name%'");
    $count = mysqli_nums_rows($iquery_count);
    for ($i = 1; $i < $count/$np_page; $i++) {
    echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;';
    }
    }
    ?>
    </pre>
    <p>Conseil pour améliorer:<br/>
    -Si la table est beaucoup avec votre moteur faite une colonne de plus où il y a une simplification des caractères (ex: "é" => "e"; "â" => "a"; etc).<br/>
    -Attention aux caractères html utilisiez la fonction strip_tag() ou autre sur ce qui causer des faille xss par exemple si le client peu choisir le nom de son personnage et mettre du code html dedans c'est mort.<br/>
    -Supprimez les caractères "%" et "_" si ils sont présent dans $name et instauré une limite au niveau du nombre de caractères pour la recherche exemple: minimum 4 caractères, pour évites de charger trop de chose.<br/><br/>
    Version pdo pour les gens qui aiment la pdo:</p>
    <pre class="ipsCode prettyprint lang-auto">
    <table width="100%">
    <tr>
    <th>#</th>
    <th>Nom</th>
    <th>Points</th>
    </tr>
    <?php
    $page = 0;
    if (isset($_GET['name']) {
    $page = 1; // Page par défaut affichée
    $np_page = 25; // Nom de résultat par page
    $name = $_GET['name'];
    $cxn = new PDO('mysql:host=127.0.0.1;dbname=game', 'root', 'toor'); //connexion mySQL

    	// vérification du numéro de la page si elle est indiqué dans l'url en "?page=n"
    	if (isset($_GET['page'])&amp;&amp;is_numeric($_GET['page'])&amp;&amp;
    		$_GET['page']&gt;0&amp;&amp;$_GET['page']&lt;9999999) $page = $_GET['page'];
    	$fourchette = ($page - 1) * $np_page;
    	$query = $cxn-&gt;prepare("SELECT * FROM players` WHERE `name` LIKE '%:name%' ORDER BY `name` ASC LIMIT :fourchette, :npp");
    	$query-&gt;bindValue(':name', $name, PDO::PARAM_STR);
    	$query-&gt;bindValue(':fourchette', $fourchette, PDO::PARAM_INT);
    	$query-&gt;bindValue(':npp', $np_page, PDO::PARAM_INT);
    	$query-&gt;execute();
    	while ($char = $query-&gt;fetch()) {
    		echo &lt;&lt;&lt;LINE
    		&lt;tr&gt;
    			&lt;td&gt;{$char['id']}&lt;/td&gt;
    			&lt;td&gt;&lt;b&gt;{$char['name']}&lt;/b&gt;&lt;/td&gt;
    			&lt;td&gt;{$char['token']}&lt;/td&gt;
    		&lt;/tr&gt;
    

    LINE;
    }
    }
    ?>
    </table>
    <?php
    if ($page!=0) {
    echo "page(s): ";
    $query_count = $cxn->prepare("SELECT * FROM players WHERE name LIKE '%:name%'");
    $query_count->bindValue(':name', $name, PDO::PARAM_STR);
    $query_count->execute();
    $count = $query_count->rowCount();
    for ($i = 1; $i < $count/$np_page; $i++) {
    echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;';
    }
    }
    ?>
    </pre>
    <p>Bonne programmation à tous!<br/>
    Cordialement,<br/>
    Mars073</p>

    Aide à l'apprentissage et la réalisation pour des graphismes, des programmes, des sites ou autres.Signature aléatoire, proposez vous aussi une signature ici!

    1 Reply Last reply
    3
    • VansV
      VansV
      Vans
      wrote on last edited by
      #2

      <p>Merci pour ce partage.</p>
      <p>Ce tutoriel vient de toi ?</p>

      1 Reply Last reply
      0
      • mars073M
        mars073M
        mars073
        wrote on last edited by
        #3

        <p>oui, je l'ai gratté direct sur le forum donc je suis même pas sûr qu'il fonctionne complètement x')</p><p>je m'étais mis la tabulation en c/c pour alligner le code c'était galère xD </p>

        Aide à l'apprentissage et la réalisation pour des graphismes, des programmes, des sites ou autres.Signature aléatoire, proposez vous aussi une signature ici!

        1 Reply Last reply
        0
        • AzadA
          AzadA
          Azad
          wrote on last edited by
          #4

          <p>La tabulation est très médiocre sur l'affichage des messages. Mais bon, déjà l'éditeur de <abbr title="Invision Power Board">IPB</abbr> est suffisemment bien, on va pas tout demander non plus.<br/><br/>
          Merci du partage, c'est du bon boulot. 🙂 </p>
          <p>Tu as tiré l'idée d'un projet perso ou ça t'es venu comme ça ?<br/><br/>
          +1 Rep.</p>

          Administrateur du forum.
          Contactez-moi par message privé ou par mail.

          1 Reply Last reply
          0
          • mars073M
            mars073M
            mars073
            wrote on last edited by
            #5

            <p>J'avais utilisé le même système pour une armurerie Wow (y a genre 3ans)</p>

            Aide à l'apprentissage et la réalisation pour des graphismes, des programmes, des sites ou autres.Signature aléatoire, proposez vous aussi une signature ici!

            1 Reply Last reply
            0

            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

            With your input, this post could be even better 💗

            Register Login
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            • Login

            • Login or register to search.
            Powered by NodeBB Contributors
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • World
            • Users
            • Groups