CREATE TABLE `liens` (
`lien_id` INT( 11 ) NOT NULL AUTO_INCREMENT,
`alt` VARCHAR( 100 ) NOT NULL,
`href` VARCHAR( 150 ) NOT NULL,
`mots` TINYTEXT NOT NULL,
PRIMARY KEY ( `lien_id` )
);
INSERT INTO `liens` VALUES ( 1, 'Killeak', 'www.killeak.net/', 'killeak tutoriels php sql standard mysql' ),
( 2, 'PHP France', 'www.phpfrance.com/', 'tutoriels php france forums aide documentation sql javascript' ),
( 3, 'Festival d\'Annecy', 'www.annecy.org/', 'festival france animation dessins animés court long métrage annecy' );
<?php
// Connection à la base de données, avec les paramètres par défaut
$connection = mysql_connect( "localhost", "root", "" ) OR die( "Impossible de se connecter.<br />\nErreur MySQL '" . mysql_error() . "'" );
// Sélection de la base de données elle-même
mysql_select_db( "base_de_donnees_mysql", $connection ) OR die( "Impossible de selectionner la base spécifiée.<br />\nErreur MySQL '" . mysql_error() . "'" );
// récupération des variables postées
if( isset( $_POST["recherche"] ) ) $recherche = $_POST["recherche"];
if( isset( $_POST["critere"] ) ) $critere = $_POST["critere"];
?>
<html>
<head>
<title>test.php / Petit moteur de recherche basique</title>
</head>
<body>
<?php
if( !$recherche )
/*
cette ligne est l'équivalent de "if( empty( $recherche ) OR $recherche == 0 )", en bien plus simple, puisque $recherche est un booléen, s'il est vide ou égal à zéro, c'est 'FALSE', donc affichage du moteur, si il est à 1 ou même toute autre valeur, il est 'TRUE', donc exécution de la recherche...
*/
{
?>
<form name="annuaire" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<?php /* $_SERVER["PHP_SELF"] est la nouvelle syntaxe de $PHP_SELF, et contient le nom du script en cours d'execution */ ?>
<input type="text" name="critere" value="" size="16" />
<input type="hidden" name="recherche" value="1" />
<?php
/*
l'input 'hidden', invisible, sert à préciser que lorsque le formulaire est posté, il y a une recherche qui est lancée, si on ne met pas cet input, le script afficherait perpétuellement le formulaire...
cette remarque, et donc cet input masqué, n'est valable que parce que le même document sert à la fois à afficher le formulaire et à traiter les informations. si la propriété ACTION du FORM était un autre script, il n'y aurait pas besoin de préciser le nouvel affichage à faire après le POST...
*/
?>
<input type="submit" name="envoyer" value="Rechercher" />
<input type="reset" name="annuler" value="Annuler" />
</form>
<?php
}
else
{
$requete = "SELECT alt, href FROM liens WHERE mots LIKE '%" . stripslashes( $critere ) . "%'";
// exécution de la requête
$execution = mysql_query( $requete, $connection ) OR die( "Impossible d'exécuter la requête !" );
// puis obtention du nombre de lignes retournées par MySQL
$nbr_tuples = mysql_num_rows( $execution );
if( $nbr_tuples > 0 )
{
/*
si il y a un(des) element(s), on le(s) affiche.
ce test n'est absolument pas obligatoire, surtout si on passe directement au TANT QUE. En effet, une requête qui ne donne aucun résultat n'est pas un requête incorrecte, le DIE ne s'applique pas !
Cela explique le "arobase" devant mysql_num_rows (c'est le silencieux).
Si on passe directement au TANT QUE, il n'y pas non plus de message d'erreur, puisque mysql_fetch_array est alors incapable d'avancer au premier élément, donc c'est (déjà) la fin, et aucune ligne n'est affichée...
Pour conclure, ce SI ne sert qu'à mettre un message "pas d'éléments trouvés" dans le SINON, point barre.
*/
echo "<b>$nbr_tuples</b> lien(s) trouvé(s).<br />\n";
while( $un_lien = mysql_fetch_array( $execution ) )
{
echo "<b>- " . $un_lien["alt"] . "</b><br />\n";
echo "http://" . $un_lien["href"] . "<br />\n<br />\n";
}
mysql_free_result( $execution );
}
else
// affichage d'un message d'erreur
echo ":'( pas de résultats...<br />\n";
}
?>
</body>
</html>
<?php
mysql_close();
?>