D
deleted535977
Salut a tous
Ont se retrouve sur un nouveaux Tutoriels Moteur de recherche de base
Structure table:
Le formulaire de recherche (search.php):
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> ';
}
}
?>
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> ';
}
}
?>
