Page 1 sur 1

Moteur de recherches

Posté : 21 mai 2019, 11:16
par Klimero12
Bonjour,
Nouveau sur le site et débutant en php, je suis en train de créer une application Web comprenant une table Mysql nommée fiche.
Je galère depuis plusieurs jours sur la création d'un moteur de recherches multicritères.
J'ai commencé mon moteur de recherches mais j'ai un soucis dans l'affichage. A l'ouverture de la page "rechercher.php ,j'ai mon imput et mon submit mais j'ai aussi la dernière valeur "nom" enregistrée dans ma table. je souhaiterais sur ma page recherche que la case imput et le submit et que la valeur recherchée apparaisse qu’après la validation du submit.
Et pour poursuivre avoir un champ qui me permet de modifier la fiche trouvée.
<?php
include_once 'dbconfig.php';
if(!$user->is_loggedin())
{
 $user->redirect('index.php');
}
$user_id = $_SESSION['user_session'];
$stmt = $DB_con->prepare("SELECT * FROM users WHERE user_id=:user_id");
$stmt->execute(array(":user_id"=>$user_id));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);



$bdd = new PDO('mysql:host=localhost;dbname=base;','root','');
$articles = $bdd->query('SELECT * FROM fiche ORDER BY id DESC');
if(isset($_GET['q']) AND !empty($_GET['q']))
	{
   $q = htmlspecialchars($_GET['q']);
   $articles = $bdd->query('SELECT * FROM fiche WHERE nom LIKE "%'.$q.'%" ORDER BY id DESC');
   }
?>

<!DOCTYPE html>
<html lang="fr-FR">
    <head>
        <title>Rechercher/title>
        <meta charset= "utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="stylesheet" href="css/header.css" type="text/css"  />
		<link rel="stylesheet" href="css/menu.css" type="text/css"  />
		<link rel="stylesheet" href="css/footer.css" type="text/css"  />
    </head>
		<body>
			<?php
				include('header.php');
				include('menu.php');
			?>

<form method="GET">
   <input type="search" name="q" placeholder="Recherche..." />
   <input type="submit" value="Valider" />
</form>
<?php 

		
	if($donnees = $articles->fetch()){?>
	<p>
				Identité  : <?php echo $donnees['nom']?>&nbsp;<?php echo $donnees['prenom'];?></br>
				
			</p>
	
	
	<?php
		}
		?>


Concernant ma table, elle se nomme "fiche" et comprend plusieurs champs ID, nom, prenom, adresse, CP, ville, tph, dated, dater.
Je sais que ma demande est régulière de la part des débutants mais je n'ai pas trouvé de tuto très explicite sur le sujet.
Merci de votre aide
Cordialement
Eric

Re: Moteur de recherches

Posté : 21 mai 2019, 13:56
par Saian
Salut,
<?php

include_once 'dbconfig.php';

if(!$user->is_loggedin())
{
  $user->redirect('index.php');
  /* après un redirect il vaut mieux forcer la sortie du script car selon la manière dont le redirect
     est codé, le code en dessous peut s'exécuter... */
  exit();
}

/* à quoi sert ce bloc ? $userRow n'est pas utilisé */
$user_id = $_SESSION['user_session'];
$stmt = $DB_con->prepare("SELECT * FROM users WHERE user_id=:user_id");
$stmt->execute(array(":user_id" => $user_id));
$userRow = $stmt->fetch(PDO::FETCH_ASSOC);

/* il semble que tu ais une variable $DB_con pourquoi créer une nouvelle connexion ? autre base de 
   données ? de plus si tu ne veux pas remonter de nom et prénom si le formulaire n'a pas été envoyé 
   pourquoi faire cette requête ici sans condition alors que la requête de recherche est juste 
   en dessous ? */
$bdd = new PDO('mysql:host=localhost;dbname=base;','root','');
$articles = $bdd->query('SELECT * FROM fiche ORDER BY id DESC');

if (isset($_GET['q']) && !empty($_GET['q']))
{
  $q = htmlspecialchars($_GET['q']);
  $articles = $bdd->query('SELECT * FROM fiche WHERE nom LIKE "%'.$q.'%" ORDER BY id DESC');
}

?>
<!DOCTYPE html>
<html lang="fr-FR">
<head>
  <title>Rechercher</title>
  <meta charset= "utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="css/header.css" type="text/css" />
  <link rel="stylesheet" href="css/menu.css" type="text/css" />
  <link rel="stylesheet" href="css/footer.css" type="text/css" />
</head>
<body>
  <?php include('header.php'); ?>
  <?php include('menu.php'); ?>
  <form method="GET">
    <input type="search" name="q" placeholder="Recherche..." />
    <input type="submit" value="Valider" />
  </form>
  <?php if(isset($articles) && $donnees = $articles->fetch()): ?>
    <p>
      Identité  : <?php echo $donnees['nom']; ?>&nbsp;<?php echo $donnees['prenom']; ?><br/>
    </p>
  <?php endif; ?>
</body>
</html>

Tu devrais plutôt avoir ça à priori :
<?php

include_once 'dbconfig.php';

if(!$user->is_loggedin())
{
  $user->redirect('index.php');
  exit();
}

if (isset($_GET['q']) && !empty($_GET['q']))
{
  $bdd = new PDO('mysql:host=localhost;dbname=base;','root','');
  $q = htmlspecialchars($_GET['q']);
  $articles = $bdd->query('SELECT * FROM fiche WHERE nom LIKE "%'.$q.'%" ORDER BY id DESC');
}

?>
<!DOCTYPE html>
<html lang="fr-FR">
<head>
  <title>Rechercher</title>
  <meta charset= "utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="css/header.css" type="text/css" />
  <link rel="stylesheet" href="css/menu.css" type="text/css" />
  <link rel="stylesheet" href="css/footer.css" type="text/css" />
</head>
<body>
  <?php include('header.php'); ?>
  <?php include('menu.php'); ?>
  <form method="GET">
    <input type="search" name="q" placeholder="Recherche..." />
    <input type="submit" value="Valider" />
  </form>
  <?php if(isset($articles) && $donnees = $articles->fetch()): ?>
    <p>
      Identité  : <?php echo $donnees['nom']; ?>&nbsp;<?php echo $donnees['prenom']; ?><br/>
    </p>
  <?php endif; ?>
</body>
</html>

Après si tu veux pouvoir éditer la fiche résultat, tu peux ajouter le formulaire à cet effet dans le bloc qui affiche le résultat.

Re: Moteur de recherches

Posté : 21 mai 2019, 17:05
par Klimero12
Saian,
Un grand merci pour ton aide, je cherche mon erreur depuis plusieurs jours sans trouver.
J'ai forcé la sortie comme tu le mentionnes avec exit();
* à quoi sert ce bloc ? $userRow n'est pas utilisé */ Il manquait un morceau de mon code que j'ai rajouté.
J'ai pris en compte tes remarques :
"pourquoi créer une nouvelle connexion" supprimée.
requête ici sans condition : supprimée.
$bdd modifiée en $DB_con.
<?php
include_once 'dbconfig.php';
if(!$user->is_loggedin())
{
 $user->redirect('index.php');
 exit();
}
$user_id = $_SESSION['user_session'];
$stmt = $DB_con->prepare("SELECT * FROM users WHERE user_id=:user_id");
$stmt->execute(array(":user_id"=>$user_id));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);

if (isset($_GET['q']) && !empty($_GET['q']))
{
  $q = htmlspecialchars($_GET['q']);
  $articles = $DB_con->query('SELECT * FROM fiche WHERE nom LIKE "%'.$q.'%" ORDER BY id DESC');
}
?>

<!DOCTYPE html>
<html lang="fr-FR">
<head>
  <title>Rechercher</title>
  <meta charset= "utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="css/header.css" type="text/css" />
  <link rel="stylesheet" href="css/menu.css" type="text/css" />
  <link rel="stylesheet" href="css/footer.css" type="text/css" />
</head>
<body>
  <?php include('header.php'); ?>
  <?php include('menu.php'); ?>
  <form method="GET">
    <input type="search" name="q" placeholder="Recherche..." />
    <input type="submit" value="Valider" />
  </form>
  <?php if(isset($articles) && $donnees = $articles->fetch()): ?>
    <p>
      Résultat de votre recherche  : <?php echo $donnees['nom']; ?>&nbsp;<?php echo $donnees['prenom']; ?><br/>
    </p>
  <?php endif; ?>
</body>
</html>
Je vais pouvoir continuer mon projet
Encore merci