Aller directement au contenu
  • Catégories
  • Récent
  • Mots-clés
  • Populaire
  • Web
  • Utilisateurs
  • Groupes
Habillages
  • Clair
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Sombre
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Défaut (Aucun habillage)
  • Aucun habillage
Réduire
Melinyel

Melinyel

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

Moteur de recherche de base

Planifié Épinglé Verrouillé Déplacé PHP
5 Messages 3 Publieurs 5.2k Vues
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • mars073M Hors-ligne
    mars073M Hors-ligne
    mars073
    a écrit sur dernière édition par
    #1

    Bonjour à tous,
    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.
    Contexte: Le moteur de recherche sert à trouver un joueur et afficher ses statistiques.

    Structure table:

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

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

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

    <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;';
    		}
    	}
    	?>
    

    Bonne programmation à tous!
    Cordialement,
    Mars073

    votes-45296e7.png

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

    1 réponse Dernière réponse
    3
    • VansV Hors-ligne
      VansV Hors-ligne
      Vans
      a écrit sur dernière édition par
      #2

      Merci pour ce partage.

      Ce tutoriel vient de toi ?

      1 réponse Dernière réponse
      0
      • mars073M Hors-ligne
        mars073M Hors-ligne
        mars073
        a écrit sur dernière édition par
        #3

        oui, je l'ai gratté direct sur le forum donc je suis même pas sûr qu'il fonctionne complètement x')

        je m'étais mis la tabulation en c/c pour alligner le code c'était galère xD

        votes-45296e7.png

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

        1 réponse Dernière réponse
        0
        • AzadA Hors-ligne
          AzadA Hors-ligne
          Azad
          a écrit sur dernière édition par
          #4

          La tabulation est très médiocre sur l'affichage des messages. Mais bon, déjà l'éditeur de IPB est suffisemment bien, on va pas tout demander non plus.

          Merci du partage, c'est du bon boulot. 🙂

          Tu as tiré l'idée d'un projet perso ou ça t'es venu comme ça ?

          +1 Rep.

          Administrateur du forum.

          Contactez-moi par message privé ou par mail.

          1 réponse Dernière réponse
          0
          • mars073M Hors-ligne
            mars073M Hors-ligne
            mars073
            a écrit sur dernière édition par
            #5

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

            votes-45296e7.png

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

            1 réponse Dernière réponse
            0

            Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

            Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

            Grâce à votre participation, ce message peut devenir encore meilleur 💗

            S'inscrire Se connecter
            Répondre
            • Répondre à l'aide d'un nouveau sujet
            Se connecter pour répondre
            • Du plus ancien au plus récent
            • Du plus récent au plus ancien
            • Les plus votés


            • Se connecter

            • Connectez-vous ou inscrivez-vous pour faire une recherche.
            Powered by NodeBB Contributors
            • Premier message
              Dernier message
            0
            • Catégories
            • Récent
            • Mots-clés
            • Populaire
            • Web
            • Utilisateurs
            • Groupes