Moteur de recherche de base

  • Auteur de la discussion Auteur de la discussion deleted535977
  • Créé le Créé le
Statut
N'est pas ouverte pour d'autres réponses.
D

deleted535977

Salut a tous

Ont se retrouve sur un nouveaux Tutoriels Moteur de recherche de base

Structure table:

Code:
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 ;


Le formulaire de recherche (search.php):​

Code:
<form action="./search.php" method="GET">
    <label for="name">Nom du joueur</label>
    <input type="text" name="name">
    <input type="submit" value="Rechercher">
</form>

Je ne m'attarde pas sur le html vu que c'est un tuto php/my-sql.

à la suite du code html vous allons ajouter du php:

Code:
<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'])&&is_numeric($_GET['page'])&&
            $_GET['page']>0&&$_GET['page']<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 <<<LINE
            <tr>
                <td>{$char['id']}</td>
                <td><b>{$char['name']}</b></td>
                <td>{$char['token']}</td>
            </tr>
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;';
        }
    }
    ?>

Conseil pour améliorer:
-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).
-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.
-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.

Version pdo pour les gens qui aiment la pdo:



Code:
<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'])&&is_numeric($_GET['page'])&&
            $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page'];
        $fourchette = ($page - 1) * $np_page;
        $query = $cxn->prepare("SELECT * FROM players` WHERE `name` LIKE '%:name%' ORDER BY `name` ASC LIMIT :fourchette, :npp");
         $query->bindValue(':name', $name, PDO::PARAM_STR);
        $query->bindValue(':fourchette', $fourchette, PDO::PARAM_INT);
        $query->bindValue(':npp', $np_page, PDO::PARAM_INT);
        $query->execute();
        while ($char = $query->fetch()) {
            echo <<<LINE
            <tr>
                <td>{$char['id']}</td>
                <td><b>{$char['name']}</b></td>
                <td>{$char['token']}</td>
            </tr>
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;';
        }
    }
    ?>

 
Tu explique rien ... On comprend pas à quoi sa sert ...
 
Tu n'éxpliques rien, c'est faillible, et en plus c'est quasiment illisible avec l'alignement actuel.
 
Avec de l'ajax c'est perf ça >> Puis tu devrais passer à PDO ..
 
Ça sent le tutoriel trouvé sur internet.. Du moins le peu d'explications sur le code sera la bienvenue.
 
Un minimum de mérite pour la personne ayant rédiger le tutoriel, ajoute la source en bas du " tuto "
 
Moteur de recherche hyper lourd. Vive elasticsearch :tchuss:
 
C/C un tuto qui vient de 2014...
 
Je déplace en corbeille à la demande de l'auteur :modo:
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut