Notice: Undefined variable [Résolu/Fermé]

Signaler
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018
-
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018
-
Bonsoir. Je suis en train de faire un moteur de recherche en PHP.

Voici ma vue crée avec Bootstrap et le traitement fait en PHP :
<?php
include_once '__gestionBase.inc.php';
$nom=($_REQUEST['nom']);

$messagePersonne=obtenirMessagePersonne($nom);
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="[https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js]"></script>
          <script src="[https://oss.maxcdn.com/respond/1.4.2/respond.min.js]"></script>
        <![endif]-->
    </head>

  <body>
    <h1>De l'amour à la haine...</h1>
     <form class="navbar-form pull-left">
      <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
      <button type="submit" class="btn">Rechercher</button>
          <h2><?php if (isset($_POST['nom'])==($_REQUEST['nom'])):?>
        <?php echo $messagePersonne?>
        <?php endif ?>
        </h2>
            </form><br>

    <script src="[http://code.jquery.com/jquery.js]"></script>
    <script src="js/bootstrap.min.js"></script>
  </body>
  


Sachant que j'utilise une base de données MySQL avec mon package EasyPHP, j'ai crée un modèle utilisant PDO et appelé __gestionBase.inc.php inclus dans ma vue index.php. Le voici :
<?php

/*
  __gestionBase.inc.php


* Ce fichier regroupe l'ensembl des fonctions utilisées pour la connexion et la gestion de la base de données *  *//* La première fonction regroupe la fonction se connectant à la base de données * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion * Elle retourne un objet PDO en cas de succès et false en cas d'échec */function gestionnaireDeConnexion() {    $pdo = null;    try {        $pdo = new PDO('mysql:host=localhost;dbname=amour et haine', 'root', 'root', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));    } catch (PDOException $err) {        $messageErreur = $err->getMessage();        error_log($messageErreur, 0);    }    return $pdo;}/* * Retourne le message d'une personne * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec */function obtenirMessagePersonne($nom) {    $messagePersonne = false;    $pdo = gestionnaireDeConnexion();    if ($pdo != false) {        $nom = $pdo->quote($nom);        $req = "select message from Personne where nom=$nom ";        $resultat = $pdo->query($req);        $messagePersonne = $resultat->fetch();    }    return $messagePersonne;}


Or mon navigateur Firefox affiche comme erreur quand j'appelle ma vue :

"Notice: Undefined index: nom in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\amourethaine\index.php on line 3"

"Notice: Undefined index: nom in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\amourethaine\index.php on line 43"

Visiblement l'index nom n'est pas défini. Or j'ai bien orthographié l'index de la base de données. J'ai aussi fais un var_dump de nom dans mon fichier __gestionBase.inc.php ça m'affiche l'erreur. Pouvez-vous m'aider ? Cordialement.
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

15 réponses

Messages postés
1709
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018
774
Et si tu fais un var_dump de $_REQUEST au début du script?

<?php
var_dump($_REQUEST);
...

Car dans $_REQUEST il trouve pas l'index nom, donc il y a un problème avec le formulaire.

Après je comprend pas pourquoi tu met $_REQUEST['nom'] entre parenthèses, c'est inutile.

Sinon pour le reste de ton code:

<?php if (isset($_POST['nom'])==($_REQUEST['nom'])):?>


Cette condition sera toujours fausses car tu n'as pas précisé de method="POST" dans la balise form donc par défaut c'est $_GET.

Ensuite elle est inutile, enfin étrange car tu compares un booléen, car isset retourne true si il y a une valeur et que c'est différent de null, ou false dans le cas contraire, et $_REQUEST['nom'] retourne une chaine de caractère ou une erreur car l'index n'existe pas (ce qui est le cas).

Après je comprend pas pourquoi tu refermes les balises PHP après la condition et utilise un endif, tu peux tout faire en une ligne

<?php if (isset($messagePersonne) && $messagePersonne != '') echo "<h2>$messagePersonne</h2>"; ?>

à la place de

<?php if (isset($_POST['nom'])==($_REQUEST['nom'])):?>
<?php echo $messagePersonne?>
<?php endif ?>

Déjà ici je vérifie que $messagePersonne existe et qu'il est pas vide, et je l'affiche en même temps que les balises h2, car sinon si la condition était fausse, tu aurais des h2 vide et c'est pas top niveau sémantique (déjà les h2 en fin de form c'est pas top)


Après pour le second script, ton gestionnaire de connexion est propre mais le problème c'est que si un jour tu as plusieurs requêtes sql à faire, je présume que tu vas utiliser la fonction à chaque fois, et donc créer plusieurs connexion à la BDD inutile car tu as juste à stocker dans une variable au début, à vrai dire t'as même pas besoin de la fonction.

Après évite les espaces pour les noms de base de donnée, ou de tableau et autre, ça peut poser problème dans certain cas, utilise le camelCase, donc comme ça amourEtHaine ou le snake_case, comme ça amour_et_haine
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Bonjour. En prenant compte tes conseils voici mes modifications dans la vue index.php :
<?php
include_once '__gestionBase.inc.php';

$messagePersonne=obtenirMessagePersonne($nom);
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="[https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js]"></script>
          <script src="[https://oss.maxcdn.com/respond/1.4.2/respond.min.js]"></script>
        <![endif]-->
    </head>

  <body>
    <h1>De l'amour à la haine...</h1>
     <form class="navbar-form pull-left"method="POST">
      <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
      <button type="submit" class="btn">Rechercher</button>
          <?php if (isset($messagePersonne) && $messagePersonne!='') echo "<h2>$messagePersonne</h2>"?>
            </form><br>

    <script src="[http://code.jquery.com/jquery.js]"></script>
    <script src="js/bootstrap.min.js"></script>
  </body>
  


Et voici mon code modifié dans mon fichier de connexion :

<?php

/*
  __gestionBase.inc.php


* Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données *  *//* La première fonction regroupe la fonction se connectant à la base de données * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion * Elle retourne un objet PDO en cas de succès et false en cas d'échec */
function gestionnaireDeConnexion() {    
 $pdo = null;    
 try {        
   $pdo = new PDO('mysql:host=localhost;dbname=amourethaine', 'root', 'root', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
   
    } catch (PDOException $err) {
      $messageErreur = $err->getMessage();        error_log($messageErreur, 0); 
    }   
  return $pdo;
}
/* * Retourne le message d'une personne * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec */

function obtenirMessagePersonne($nom) {   
 $messagePersonne = false;    
$pdo = gestionnaireDeConnexion();   
if ($pdo != false) {        
$nom = $pdo->quote($nom);        
$req = "select message from Personne where nom=$nom ";        
$resultat = $pdo->query($req);        
$messagePersonne = $resultat->fetch();    
}  
  return $messagePersonne;
}


Sachant que j'ai crée une nouvelle base de données en important le script SQL dans l'ancienne base, Firefox affiche

"Notice: Undefined variable: nom in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\amourethaine\index.php on line 4"

Là je ne vois toujours pas.


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Messages postés
1709
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018
774
Là c'est pire car tu n’enregistres même plus $_REQUEST['nom'] dans $nom, donc tu utilises une variable inexistante dans une fonction est c'est pour ça que ça plante.

Vas valoir apprendre à débuter ce type d'erreur bête car tu n'avanceras jamais en PHP.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Comme tu pourras le voir dans le lien que je t'ai donné..... tu dois initialiser PROPREMENT tes variables AVANT de les utiliser....
Dans ton cas... tu as écris :
$messagePersonne=obtenirMessagePersonne($nom);

Sauf que $nom est initialisé nul part....

Tu dois donc procéder à la récupération des données AVANT
par exemple :
<?php
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//répération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if($nom){
 $messagePersonne=obtenirMessagePersonne($nom);
}
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="[https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js]"></script>
          <script src="[https://oss.maxcdn.com/respond/1.4.2/respond.min.js]"></script>
        <![endif]-->
    </head>

  <body>
    <h1>De l'amour à la haine...</h1>
     <form class="navbar-form pull-left"method="POST">
      <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
      <button type="submit" class="btn">Rechercher</button>
        <?php if (!empty($messagePersonne)){
          echo "<h2>$messagePersonne</h2>";
		?>
    </form>
	<br>
    <script src="http://code.jquery.com/jquery.js"></script>
    <script src="js/bootstrap.min.js"></script>
  </body>



Au passage .... ce code :
if (isset($messagePersonne) && $messagePersonne!='')

Revient à écrire tout simplement :
if (!empty($messagePersonne))


et cette ligne :
if ($pdo != false)

revient à écrire :
 if($pdo)


Pense aussi à mettre des TRY/CATCH dans tes requêtes
(tu devras aussi activer la gestion des erreurs PDO : regardes ici : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Ta fonction devient un truc du genre :
function obtenirMessagePersonne($nom) {   
   $messagePersonne = false;    
   $pdo = gestionnaireDeConnexion();   
   if ($pdo) {        
     $nom = $pdo->quote($nom);        
     $req = "select message from Personne where nom=:nom ";    
     $datas = array(":nom"=>$nom);	 
	 try{
       $prep = $pdo->prepare($req);        
	   $prep->execute($datas);
       $resultat = $prep->fetch();    
	 }catch(Exception $e){
	   echo "Erreur ! ".$e->getMessage();
	 }
   }  
  $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
  return $messagePersonne;
}

Sans parler de l'oublie des "quotes" autour de ta variable dans ta requête.... que j'ai remplacé par l'utilisation de requête préparée (le prepare et le execute)
Ni du fait que tu fais un fetch... mais tu ne précise pas quelle colonne tu retournes...

Bref... que d'erreurs !!
Messages postés
1709
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018
774
A vrai dire j'ai pris l'habitude de mettre:

if (isset($messagePersonne) && $messagePersonne!='')
et non juste !empty car empty retourne false dans certain cas comme "0" car 0 ça revient à false, et même en string c'est interprété comme false, donc par exemple si tu fais un calcul et que le résultat est 0, si tu fais un empty le résultat sera false alors qu'avec un isset et différent de vide tu as un true.

Tu peux tester facilement avec:

$var = "0";
var_dump(!empty($var), isset($var) && $var != "");
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
1709
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018

Oui..; mais là il veut tester une variable sensée contenir du texte ...... j'en conclus donc qu'il ne devrait pas y avoir de 0.....
Et si tu veux aller par là ... imagine que ta variable existe bien... mais égale à NULL ... le ISSET retournera FALSE également....
Mais comme pour le empty.... c'est un cas particulier qu'il faudra gérer SI besoin
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Bonjour. J'ai testé vos solutions jordane45. Et là je n'ai plus d'erreurs de variable non définie mais le message qui doit s'afficher en dessous de mon formulaire ne s'affiche toujours pas. Sachant que le message affiché fait référence à la colonne "message" de ma table "personne", il ne s'affiche toujours pas. J'ai fais un var_dump sur ma fonction gestionnaireDeConnexion() de mon fichier __gestionBase.inc.php et il m'affiche NULL. J'ai l'impression que mon projet ne se connecte pas à ma base de données. Pouvez-vous m'aider s'il vous plait ? Et soyez indulgent s'il vous plait car je redémarre en PHP après avoir délaissé.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Montres nous ton code modifié que l'on puisse essayer de voir où se situe le problème maintenant.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020

et active la gestion des erreurs php PDO:
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Voici la vue index.php

<?php
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>


Voici le fichier __gestionBase.inc.php
<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    $pdo = null;
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine', 'root', 'root');
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        error_log($messageErreur, 0);
    }
    return $pdo;
}


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $messagePersonne = false;
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    return $messagePersonne;
}
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Tu n'as pas activé les erreurs pdo dans la connexion à la bdd
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Toujours la même erreur. Voici mon fichier __gestionBase.inc.php modifié

<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    $pdo = null;
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine, charset=utf8', 'root', 'root');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        error_log($messageErreur, 0);
    }
    return $pdo;
}

var_dump(gestionnaireDeConnexion());


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $messagePersonne = false;
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    return $messagePersonne;
}


Et la vue index.php reste la même :

 <?php
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Ton
var_dump(gestionnaireDeConnexion());
placé en plein milieu de ton fichier.... ne sert strictement à rien !!!!

Essayes ça :
<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine, charset=utf8', 'root', 'root');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        error_log($messageErreur, 0);
		exit();
    }
    return $pdo;
}

//var_dump(gestionnaireDeConnexion()); //Ne sert à rien ici !


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
			//le temps des tests :
			print_r($resultat);
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
	  $messageErreur = "Pas de connexion à la bdd !";
	  error_log($messageErreur, 0);
	}
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    return $messagePersonne;
}


et pour le fichier index :
 <?php
 /* Fichier index.php */
 
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}

//------- LE TEMPS DES TESTS -----------//
function debug($var){
 echo '<br><pre>';
 print_r($var);
 echo '</pre><br>';
 
}

debug($_POST);
debug($messagePersonne);

//------------- FIN ZONE DE TESTS -------------//

?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Oui je sais que le var_dump ne sert à rien au milieu du fichier. J'ai oublié de l'enlever.

Pour les tests, la page index.php affiche un tableau vide et me dit que la variable $messagePersonne n'est pas défini.

Ensuite quand je tape un nom et que je clique sur "chercher" ça me renvoie vers une page blanche. Il y a de l'amélioration mais le message ne s'affiche toujours pas dans la page index.php. Je ne sais pas si ça vient de la base de données que j'ai bien orthographié amourethaine tout attaché sans majuscule tout comme la table personne (nom en minuscule sans majuscule, prenom en minuscule sans majuscule et message idem).

Voici mon code mise à jour :

(__gestionBase.inc.php)

<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine, charset=utf8', 'root', 'root');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        error_log($messageErreur, 0);
		exit();
    }
    return $pdo;
}

//var_dump(gestionnaireDeConnexion()); //Ne sert à rien ici !


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
			//le temps des tests :
			print_r($resultat);
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
	  $messageErreur = "Pas de connexion à la bdd !";
	  error_log($messageErreur, 0);
	}
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    return $messagePersonne;
}


(index.php)

 <?php
 /* Fichier index.php */
 
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}

//------- LE TEMPS DES TESTS -----------//
function debug($var){
 echo '<br><pre>';
 print_r($var);
 echo '</pre><br>';
 
}

debug($_POST);
debug($messagePersonne);

//------------- FIN ZONE DE TESTS -------------//

?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Tu utilises la fonction error_log()
Donc tu dois avoir des logs dans le apache de ton serveur.....
A la limite... remplaces les par des ECHO stp histoire que ça s'affiche sur ta page
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Oui j'ai constaté dans le apache affichage de mes erreurs. Mais j'ai l'impression que cela vient de ma base de données que n'est pas reconnu.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

si tu ne me donnes pas les erreurs .... IMPOSSIBLE de te répondre
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

L'erreur c'est : [Fri Sep 09 20:11:41.767201 2016] [:error] [pid 13084:tid 1128] [client 127.0.0.1:49423] PHP Notice: Undefined variable: messagePersonne in C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\projects\\amourethaine\\index.php on line 27

Voici mes fichiers : index.php :
 <?php
 /* Fichier index.php */
 
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}

//------- LE TEMPS DES TESTS -----------//
function debug($var){
 echo '<br><pre>';
 print_r($var);
 echo '</pre><br>';
 
}

debug($_POST);
debug($messagePersonne);

//------------- FIN ZONE DE TESTS -------------//

?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>


Et le fichier __gestionBase;inc.php

<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine, charset=utf8', 'root', 'root');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        echo error_log($messageErreur, 0);
		exit();
    }
    return $pdo;
}

//var_dump(gestionnaireDeConnexion()); //Ne sert à rien ici !


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
			//le temps des tests :
			print_r($resultat);
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
	  $messageErreur = "Pas de connexion à la bdd !";
	  error_log($messageErreur, 0);
	}
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    return $messagePersonne;
}
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777

L'erreur c'est : [Fri Sep 09 20:11:41.767201 2016] [:error] [pid 13084:tid 1128] [client 127.0.0.1:49423] PHP Notice: Undefined variable: messagePersonne in C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\projects\\amourethaine\\index.php on line 27

jusque là rien de vraiment anormal...
Que t'affichent les debug que je t'ai codé ligne 26 et 27 SUR TA PAGE ?
Ca veut simplement dire que la variable $messagePersonne n'existe pas.
Donc on peut supposer que soit la variable $nom est vide et donc que ton code ne rentre jamais dans le IF.

Bien entendu.... tu fais ces tests APRES avoir submit ton formulaire !!!
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Les logs affichent : "[Fri Sep 09 20:38:35.421599 2016] [:error] [pid 13084:tid 1128] [client 127.0.0.1:50423] SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES), referer: http://localhost/projects/amourethaine/index.php
[Fri Sep 09 20:38:57.147183 2016] [:error] [pid 13084:tid 1128] [client 127.0.0.1:50445] SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES), referer: http://localhost/projects/amourethaine/index.php"
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Visiblement mon accès avec l'utilisateur root est restreint. Or j'ai vérifié dans phyMyAdmin dans la section utilisateur et la colonne Mot de passe il y a bien indiqué "non".
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018


j'ai vérifié dans phyMyAdmin dans la section utilisateur et la colonne Mot de passe il y a bien indiqué "non"

Dans ce cas.... pourquoi as tu mis un password dans la connexion à la bdd ?

$pdo = new PDO('mysql:host=localhost;dbname=amourethaine, charset=utf8', 'root', 'root');



Essaye sans password :
$pdo = new PDO('mysql:host=localhost;dbname=amourethaine, charset=utf8', 'root', '');
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Maintenant il me dit qu'il ne connait pas la base de données et le jeu de caractère. Et j'ai vérifié le nom de la base de données, je les bien orthographié comme dans mon fichier __gestionBase.inc.php. Par contre le jeu de caractère de la base n'est pas UTF8 je l'ai enlevé. Mais le message que je souhaite afficher en dessous de mon code ne s'affiche pas encore. Voici mes fichier mise à jour :

index.php

 <?php
 /* Fichier index.php */
 
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}

//------- LE TEMPS DES TESTS -----------//
function debug($var){
 echo '<br><pre>';
 print_r($var);
 echo '</pre><br>';
 
}

debug($_POST);
debug($messagePersonne);

//------------- FIN ZONE DE TESTS -------------//

?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>


__gestionBase.inc.php

<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine', 'root', '');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        echo $messageErreur;
		exit();
    }
    return $pdo;
}

//var_dump(gestionnaireDeConnexion()); //Ne sert à rien ici !


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
			//le temps des tests :
			print_r($resultat);
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
	  $messageErreur = "Pas de connexion à la bdd !";
	  error_log($messageErreur, 0);
	}
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    return $messagePersonne;
}
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Il me faut le message d'erreur EXACTE
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

En fait il y a pas d'erreur affiché. Mais au dessus de ma vue, il y a un tableau affiché en php (array (... )) et quand écris dans le champ un mot il s'ajoute automatiquement au tableau. Ici j'ai tapé toto et toto s'est ajouté au tableau. Par contre dans le fichier erreur log d'Apache, il est écrit "[Sat Sep 10 16:50:00.549253 2016] [:error] [pid 10288:tid 1124] [client 127.0.0.1:62020] PHP Notice: Undefined variable: messagePersonne in C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\projects\\amourethaine\\index.php on line 27"
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777

ans le fichier erreur log d'Apache, il est écrit "[Sat Sep 10 16:50:00.549253 2016] [:error] [pid 10288:tid 1124] [client 127.0.0.1:62020] PHP Notice: Undefined variable: messagePersonne in C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\projects\\amourethaine\\index.php on line 27"

Nan mais ce message là... je t'ai déjà indiqué qu'on n'avait pas à s'en occuper pour l'instant.
Il montre par contre que ta fonction obtenirMessagePersonne ne retourne visiblemen rien...

Peux tu modifier le code de ta fonction obtenirMessagePersonne comme ceci :

function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
	    //le temps des tests :
	    print_r($resultat);
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
	  $messageErreur = "Pas de connexion à la bdd !";
           echo $messageErreur;
	}
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';

    //Pour les tests :
    echo "requête = ".$req;
    print_r($datas);

    return $messagePersonne;
}
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Avec cette modif, la requête s'affiche à l'écran quand je valide mon formulaire


Et le code de mon fichier index.php :
 <?php
 /* Fichier index.php */
 
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}

//------- LE TEMPS DES TESTS -----------//
function debug($var){
 echo '<br><pre>';
 print_r($var);
 echo '</pre><br>';
 
}

debug($_POST);
debug($messagePersonne);

//------------- FIN ZONE DE TESTS -------------//

?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>


Et celui de __gestionBase.inc.php :

<?php

/*
  __gestionBase.inc.php
 * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
 * 
 */


/* La première fonction regroupe la fonction se connectant à la base de données
 * Elle se connecte à la base de données "amour et haine" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
 * Elle retourne un objet PDO en cas de succès et false en cas d'échec
 */

function gestionnaireDeConnexion() {
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=amourethaine', 'root', '');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    } catch (PDOException $err) {
        $messageErreur = $err->getMessage();
        echo $messageErreur;
		exit();
    }
    return $pdo;
}

//var_dump(gestionnaireDeConnexion()); //Ne sert à rien ici !


/*
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'échec
 */

function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {
        $nom = $pdo->quote($nom);
        $req = "select message from personne where nom=:nom ";
        $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
			//le temps des tests :
			print_r($resultat);
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
	  $messageErreur = "Pas de connexion à la bdd !";
	  echo $messageErreur;
	}
    $messagePersonne = !empty($resultat) ? $resultat['message'] : '';
    
    //Pour les tests :
    echo "requête = ".$req;
    print_r($datas);
    
    return $messagePersonne;
}
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
OK.
et.... question bête.... tu as testé la requête DIRECTEMENT (en passant par phpmyadmin onglet sql par exemple) la requête pour voir si elle retournait quelque chose ???
select message from personne where nom='toto'

par ce que le code semble bon... mais rien ne correspond dans ta bdd pour le nom 'toto' visiblement....
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Non 'toto' dans la bdd n'existe pas. C'était juste pour le test. Mais quand je tape un autre nom existant dans ma base, ça renvoie bien le message
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018


Mais quand je tape un autre nom existant dans ma base, ça renvoie bien le message


ben c'est bon alors ?? Oo

Ne te reste plus qu'à retirer la fonction debug et les lignes 26/27 que je t'ai fait ajouter pour les tests.... et éventuellement les autres lignes où je t'avai marqué "pour les tests"
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Non ce n'est pas fini ! Le message s'affiche quand j'éxecute la requête dans phpMyAdmin ! Mais pas dans la vue index.php et c'est le but de mon application donc ce n'est pas fini.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777 >
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Ah.. j'avais mal lu.
Et lorsque tu tapes un nom existant dans ta BDD mais cette fois dans ton formulaire... qu'est-ce qui s'affiche à l'écran ET dans les logs d'erreur ?
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Quand je tape un nom dans mon formulaire et que je le valide, dans mon fichier il est écrit que :
"[Sat Sep 10 18:37:47.385335 2016] [:error] [pid 10288:tid 1120] [client 127.0.0.1:64290] PHP Notice: Undefined variable: messagePersonne in C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\projects\\amourethaine\\index.php on line 27"
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
COmme visiblement tu n'as toujours pas compris que ce message n'a pas d'importance... on va faire en sorte qu'il n'apparaisse plus.
Donc modifie le code de ta page ( à la ligne 27) comme ceci :
if($messagePersonne){
   debug($messagePersonne);
}


Ensuite, ce qui m'interresse c'est les résultat des différents print / echo et debug que je t'ai fais ajouter.
Si ils apparaissent lorsque tu écris 'toto'... ils devraient également apparaître avec une "vraie" valeur.
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Sachant que j'ai rajouté "Toto" dans ma base de données avec une valeur dans la colonne "message" lui correspond. Voilà le résultat à l'écran
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Tu peux me fournir un DUMP de ta table (données + structure) que je teste de mon côté ?
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018
>
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020

Je vous ai envoyé mon script sql de ma base de données en message privée.
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Essaye ça.
<?php
/*  __gestionBase.inc.php */

function gestionnaireDeConnexion() {
    try{
  $bdd =new PDO('mysql:host=localhost;dbname=amourethaine; charset=utf8', 'root', '');
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
 } catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
 }
    return $bdd;
}


/**
 * Retourne le message d'une personne
 * Retourne PDOStatement|false Un objet PDO en cas de succès, "false" en cas d'echec
 */
function obtenirMessagePersonne($nom) {
    $pdo = gestionnaireDeConnexion();
    if ($pdo) {

        $req = "SELECT message 
          FROM personne 
          WHERE nom=:nom ";
          $datas = array(":nom" => $nom);
        try {
            $prep = $pdo->prepare($req);
            $prep->execute($datas);
            $resultat = $prep->fetch();
        } catch (Exception $e) {
            echo "Erreur ! " . $e->getMessage();
        }
    }else{
   $messageErreur = "Pas de connexion à la bdd !";
   echo $messageErreur;
 }
    $messagePersonne = !empty($resultat) ? $resultat->message : '';
    return $messagePersonne;
}


 <?php
 /* Fichier index.php */
 
//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD + fonctions
require_once '__gestionBase.inc.php';

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

//traitement du formulaire
$messagePersonne='';
if ($nom) {
    $messagePersonne = obtenirMessagePersonne($nom);
}

?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">

        <title>De l'amour à la haine...</title>

        <!-- Bootstrap core CSS -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for this template -->
        <link href="bootstrap/css/theme.css" rel="stylesheet">
        <link href="bootstrap/css/style.css" rel="stylesheet">

        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

    <body>
        <h1>De l'amour à la haine...</h1>
        <form class="navbar-form pull-left"method="POST">
            <input type="text" name="nom" class="span4" placeholder="Prénom Nom">
            <button type="submit" class="btn">Rechercher</button><br>
            <?php
            if (!empty($messagePersonne)) {
                echo "<h2>$messagePersonne</h2>";
            }
            ?>
        </form><br>

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>



Cordialement, 
Jordane                                                                 
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018



Ca marche. Mais néanmoins, je souhaiterai que "toto" reste afficher dans le champ quand le message s'affiche.

Cordialement
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
ben... tu le rajoutes dans ton code.... (dans le value de ton input)
<input type="text" name="nom" class="span4" placeholder="Prénom Nom" value="<?php echo $nom;?>">
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018



Ca marche super !! Merci pour votre aide précieuse. J'ai enlevé les lignes de code pour le débogage.

Merci ;)
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Heu excusez-moi mais finalement ce n'est pas fini. Car je souhaiterai en plus du nom que le prénom soit aussi prise en compte dans l'affichage du message. Comment dois-je faire ? Trifouiller la requête sql dans ma fonction obtenirMessagePersonne ?
Messages postés
29555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2020
2 777
Bonjour,
Trifouiller la requête sql dans ma fonction obtenirMessagePersonne ?

Oui.
Messages postés
12194
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 septembre 2020
688
Peux-tu marquer la question comme résolue?
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Non ce n'est pas résolue. Car je veux que le moteur de recherche prenne en compte le nom et le prénom d'une personne. Et pour l'instant il ne prend en compte le nom uniquement. Donc non résolue.
Messages postés
12194
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 septembre 2020
688
Je pense que c'est mieux de marquer ceci comme résolu, la question de départ étant résolue. Je te conseille de créer un nouveau sujet pour ta nouvelle question.
Messages postés
144
Date d'inscription
dimanche 16 novembre 2014
Statut
Membre
Dernière intervention
30 juin 2018

Très bien. Message reçu.