Récupération des données d'une BDD via PDO

Résolu/Fermé
-
Messages postés
33
Date d'inscription
jeudi 24 janvier 2019
Statut
Membre
Dernière intervention
7 avril 2019
-
Bonjour,
J'ai une BDD avec les informations de mes clients, je souhaite pouvoir insérer les informations de client sur une page...
Pour commencer simple, je souhaite juste qu'il soit écrit sur ma page le nom d'un client. Pour cela j'ai mis ce code:
<?php
$host_name = 'db770114383.hosting-data.io';
$database = 'db770114383';
$user_name = 'dbo770114383';
$password = 'MON MDP ici';
$dbh = null;
try {
  $dbh = new PDO("mysql:host=$host_name; dbname=$database;", $user_name, $password);
} catch (PDOException $e) {
  echo "Erreur!: " . $e->getMessage() . "<br/>";
  die();
}
?>
<html>
<head>
<title>test BDD</title>
</head>
<body>
<?php
$query = 'SELECT nom FROM clients WHERE id=1;';
$arr = $pdo->query($query)->fetch(); //Sur une même ligne ...
?>
Le nom de l'ID 1 est:<br />
<?php echo $data['nom']; ?>
</body>
</html>


Lorsque j'ouvre la page, j'ai cette erreur:
Fatal error: Uncaught Error: Call to a member function query() on null in /homepages/22/d767857963/htdocs/logiciel/v2/basedonnee.php:17 Stack trace: #0 {main} thrown in /homepages/22/d767857963/htdocs/logiciel/v2/basedonnee.php on line 17

Sauriez-vous me dire quel est le problème à la ligne 17 et comment résoudre le problème pour que cela fonctionne?

Merci pour votre aide.

Configuration: Windows / Firefox 64.0

2 réponses

Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Bonjour,

Déjà.. avant de continuer.. je t'invite fortement à lire ET à appliquer ce qui se trouve dans ces deux liens :

https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Ensuite... ton erreur est facile à trouver (et ce n'est pas la seule au passage.....)

Pour ta connexion.. tu as utiliser la variable : $dbh
Ensuite.. pour faire ta requête.. tu as pris : $pdo

Ne vois tu pas le souci ?

Puis plus bas... tu as fais :
$arr = $pdo->query

mais là..
<?php echo $data['nom']; ?>
tu fais référénce à une variable $data ... là encore une erreur facile à trouver...



Bonjour,
Merci pour ton aide... Cela m'a permis d'avancer.
En effet j'ai réussi à faire parler ma BDD. Je souhaite dès lors faire un formulaire d'inscription pour envoyer les données des clients sur la BDD. Pour ce faire, j'ai fait ce code:
Bonjour,
Merci pour ton aide... Cela m'a permis d'avancer.
En effet j'ai réussi à faire parler ma BDD. Je souhaite dès lors faire un formulaire d'inscription pour envoyer les données des clients sur la BDD. Pour ce faire, j'ai fait ce code:

Je ne sais pas copier mon code ici, on me dit que je ne peux pas parler avec SMS, orthographe ou grammaire... Navré.


J'ai cette erreur qui apparait:
Fatal error: Uncaught Error: Call to undefined function add_clients() in /homepages/22/d767857963/htdocs/logiciel/v2/clients/creer_client.php:184 Stack trace: #0 {main} thrown in /homepages/22/d767857963/htdocs/logiciel/v2/clients/creer_client.php on line 184
La ligne 184 c'est celle-ci:
$res = add_clients($pdo, $nom, $prenom, $age, $domiciliation, $dateinscription, $identifiant, $email, $tel, $contact, $numeroaide, $autreaide);


Je ne vois pas mon erreur, saurais-tu m'apporter une aide?
Je me doute que les erreurs sont faciles à trouver mais ce n'est pas mon métier, il faut donc le temps que je comprenne tout. J'apprends de mes erreurs comme on dit

Passe une bonne fin de journée.
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Ta fonction add_clients ... elle se trouve où ? Dans quel fichier ? est-il inclus dans le code de la page où tu l'appelles ?

Pour ce qui est de coller ton code, pense bien à utiliser les balises de code
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Et si ça bloque, purge le cache de ton navigateur et ré-essais.

Sinon, au pire, tu peux me l'envoyer en MP (message privé).
>
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022

La fonction add_clients se trouve dans la page "debut.php", il s'agit de la page que j'appelle au tout début avec les informations de connexion à la BDD.

J'ai vidé le cache et tjrs impossible de te l'envoyer, je vais donc te transmettre mon code en MP.
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Voici donc le code de Gui
<?php include('debut.php'); ?><?php include('../haut.php'); ?> <!DOCTYPE html>
<html>

    <head>

        <meta charset="utf-8" />

        <title>Nouveau client</title>

        <style>

            body
            {
                background: rgba(244,255,78,1)
            }

            header 
            {
                height: 210px;
                border: 2px solid black;
                text-align: center;
                padding: 10px;
                margin: 20px;
            }

            table
            {
                text-align: center;
                margin: auto;
                width: 95%;
              height: 50em;

            }

            footer
            {
                height: 100px;
                border: 2px solid black;
                text-align: center;
                padding: 10px;
                margin: 5px;
            }

ul#menu_horizontal li 
{ 
display : inline;
padding : 0 0.5em;
border: 1px black;
}

ul#menu_horizontal 
{
    list-style-type : none; 
}

a
{
    border: 1px blue;
}
        </style>

    </head>

    <body>
        <header>
            <img src="https://www.tousuniscontrelesuicide.com/fs/Root/duehm-Logo_Rogne.png"
                 alt="[ABC Tech posssède 75% de part de marché et XYZ 25%]"
                 height="200px" 
                 width="200px"
                align="right" 
            >
            <img src="https://www.tousuniscontrelesuicide.com/fs/Root/duehm-Logo_Rogne.png"
                 alt="[ABC Tech posssède 75% de part de marché et XYZ 25%]"
                 height="200px" 
                 width="200px"
                 align="left" 
            >
        <br>
            <h1>Tous unis contre le suicide</h1>
            <h2>Créer un client:</h2>

            <ul id="menu_horizontal">
            <li><a href="../index.php">Accueil</a></li>
            <li><a href="../membres.php">Les membres</a></li>
            <li><a href="../clients.php">Les clients</a></li>
            <li><a href="../aides.php">Les aides</a></li>
            <li><a href="../documents_officiels.php">Les documents</a></li>
            <li><a href="../gestion_avancee.php">Gestion</a></li>
            <?php
                if(isset($_SESSION['user'])){
            ?>
                <li><a href="../update-password.php">Changer mot de passe</a></li>
            <?php
                }
            ?>
            <li><a style="color: red" href="../connexion.php">Me <?php if(isset($_SESSION['user'])){echo"dé";}?>connecter</a></li>
            
            <?php
                if(!isset($_SESSION['user']) || $_SESSION['user']['role']<3) {                    
                    header('Location: ../index.php'); 
                } else {
            ?>
                    <li><a style="color: green" href="../creer-utilisateur.php">Créer un utilisateur</a></li>
            <?php
                }
            ?>    
            </ul>
        </header>
        <br /><br />                

        <br>
        <br>             
        <?php
            if(!empty($_POST)) {

                $valid=true;
                if(!isset($_POST['nom']) || empty($_POST['nom'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner le nom du client.</div>";
                    $valid=false;
                }
                if(!isset($_POST['prenom']) || empty($_POST['prenom'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner le prénom du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['age']) || empty($_POST['age'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner l'âge du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['domiciliation']) || empty($_POST['domiciliation'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner la domiciliation du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['dateinscription']) || empty($_POST['dateinscription'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner la date d'inscription du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['identifiant']) || empty($_POST['identifiant'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner l'identifiant (ID) du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['email']) || empty($_POST['email'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner l'email du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['tel']) || empty($_POST['tel'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner le téléphone du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['contact']) || empty($_POST['contact'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner les autres points de contact du client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['numeroaide']) || empty($_POST['numeroaide'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner le numéro d'aide concernant le client.</div>";
                    $valid=false;
                }

                if(!isset($_POST['autreaide']) || empty($_POST['autreaide'])) {
                    echo "<div class='bandeau bandeau-error'>Merci de renseigner les autres numéros d'aide concernant le client.</div>";
                    $valid=false;
                }

                if($valid) {
                    $nom = htmlspecialchars($_POST['nom']);
                    $prenom = htmlspecialchars($_POST['prenom']);
                    $age = htmlspecialchars($_POST['age']);
                    $domiciliation = htmlspecialchars($_POST['domiciliation']);
                    $dateinscription = htmlspecialchars($_POST['dateinscription']);
                    $identifiant = htmlspecialchars($_POST['identifiant']);
                    $email = htmlspecialchars($_POST['email']);
                    $tel = htmlspecialchars($_POST['tel']);
                    $contact = htmlspecialchars($_POST['contact']);
                    $numeroaide = htmlspecialchars($_POST['numeroaide']);
                    $autreaide = htmlspecialchars($_POST['autreaide']);

                    $res = add_clients($pdo, $nom, $prenom, $age, $domiciliation, $dateinscription, $identifiant, $email, $tel, $contact, $numeroaide, $autreaide);
                    if($res) {
                        echo "<div class='bandeau bandeau-success'>Lle client a bien été ajouté !</div>";
                    } else {                        
                        echo "<div class='bandeau bandeau-error'>Désolé une erreur est survenue.</div>";
                    }
                }
            }
        ?>
            <table border=1 width=100% align="center" cellspacing=0 cellpadding=0 >
                <tr>
                    <td width="100%"><h3>Créer un client:</h3>
                    <form method="POST" action="creer_client.php">
                      <input style= "width: 50%; text-align: center;" type="text" name="nom" placeholder="Nom" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="prenom" placeholder="Prénom" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="age" placeholder="Age" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="domiciliation" placeholder="Domiciliation" required/><br>
                      <br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="dateinscription" placeholder="Date d'inscription" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="identifiant" placeholder="Identifiant" required/><br>
                      <br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="email" placeholder="Email" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="tel" placeholder="Téléphone" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="contact" placeholder="Autres points de contact" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="numeroaide" placeholder="Numéro d'aide" required/><br>
                      <br>
                        <input style= "width: 50%; text-align: center;" type="text" name="autreaide" placeholder="Autre numéro d'aide" required/><br>
                      <br>
                        <input style= "width: 30%; text-align: center;"type="submit" /><br><br>
                    </form>
                </td>
            </table>
        <footer>
            <p>Mailto: tousuniscontrelesuicide@hotmail.com</p>
            <a href="https://www.tousuniscontrelesuicide.com/#Contactez_nous.E">Nous contacter</a>
            <p>Site web:<a href="https://www.tousuniscontrelesuicide.com">www.tousuniscontrelesuicide.com</a></p>
        </footer>
        
    </body>
</html>

Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
A la place d'un include, fais donc un require_once
require_once "debut.php";

histoire d'être sûr qu'il est bien chargé....

Et montre nous le code de ce fichier....


Autre point (qui n'est pas en rapport direct avec ta question.... mais bon....)
La fonction htmlspecialchars ne doit servir qu'à l' AFFICHAGE .. en aucun cas pour la sauvegarde des données.
On stocke TOUJOURS les données en "brut" dans la BDD
Messages postés
33
Date d'inscription
jeudi 24 janvier 2019
Statut
Membre
Dernière intervention
7 avril 2019

La page ''debut.php'' est celle-ci:
<?php
$host_name = 'db**********3.hosting-data.io';
$database = 'db**********3';
$user_name = 'dbo********3';
$password = 'MON MDP ICI';
$pdo = null;
try {
  $pdo = new PDO("mysql:host=$host_name; dbname=$database;", $user_name, $password);
} catch (PDOException $e) {
  echo "Erreur!: " . $e->getMessage() . "<br/>";
  die();

  function add_clients($pdo, $nom, $prenom, $age, $domiciliation, $dateinscription, $identifiant, $email, $tel, $contact, $numeroaide, $autreaide){
        try {
            $stmt = $pdo->prepare("INSERT INTO clients (nom, prenom, age, domiciliation, dateinscription, identifiant, email, tel, contact, numeroaide, autreaide) VALUES(:nom, :prenom, :age, :domiciliation, :dateinscription, :identifiant, :email, :tel, :contact, :numeroaide, :autreaide)");
            $stmt->bindParam(':nom', $nom);
            $stmt->bindParam(':prenom', $prenom);
            $stmt->bindParam(':age', $age);
            $stmt->bindParam(':domiciliation', $domiciliation);
            $stmt->bindParam(':dateinscription', $dateinscription);
            $stmt->bindParam(':identifiant', $identifiant);
            $stmt->bindParam(':email', $email);
            $stmt->bindParam(':tel', $tel);
            $stmt->bindParam(':contact', $contact);
            $stmt->bindParam(':numeroaide', $numeroaide);
            $stmt->bindParam(':autreaide', $autreaide);
            $stmt->execute();
            return false;
        } catch(Exception $e) {
            return false;
        }
    }    
}
?>
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Regarde bien ton code...
Ta fonction se trouve dans le catch...
Sors la du bloc try catch
Messages postés
33
Date d'inscription
jeudi 24 janvier 2019
Statut
Membre
Dernière intervention
7 avril 2019
>
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022

Je n'ai pas compris (je suis un vrai débutant de compet)... Je dois enlever le catch à la ligne 9 et 29?
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000 >
Messages postés
33
Date d'inscription
jeudi 24 janvier 2019
Statut
Membre
Dernière intervention
7 avril 2019

<?php
$host_name = 'db**********3.hosting-data.io';
$database = 'db**********3';
$user_name = 'dbo********3';
$password = 'MON MDP ICI';
$pdo = null;
try {
  $pdo = new PDO("mysql:host=$host_name; dbname=$database;", $user_name, $password);
} catch (PDOException $e) {
  echo "Erreur!: " . $e->getMessage() . "<br/>";
  die();  
}

//Après la connexion.. en dehors de son bloc TRY/CATCH...
// donc... ICI 
function add_clients($pdo, $nom, $prenom, $age, $domiciliation, $dateinscription, $identifiant, $email, $tel, $contact, $numeroaide, $autreaide){
        try {
            $stmt = $pdo->prepare("INSERT INTO clients (nom, prenom, age, domiciliation, dateinscription, identifiant, email, tel, contact, numeroaide, autreaide) VALUES(:nom, :prenom, :age, :domiciliation, :dateinscription, :identifiant, :email, :tel, :contact, :numeroaide, :autreaide)");
            $stmt->bindParam(':nom', $nom);
            $stmt->bindParam(':prenom', $prenom);
            $stmt->bindParam(':age', $age);
            $stmt->bindParam(':domiciliation', $domiciliation);
            $stmt->bindParam(':dateinscription', $dateinscription);
            $stmt->bindParam(':identifiant', $identifiant);
            $stmt->bindParam(':email', $email);
            $stmt->bindParam(':tel', $tel);
            $stmt->bindParam(':contact', $contact);
            $stmt->bindParam(':numeroaide', $numeroaide);
            $stmt->bindParam(':autreaide', $autreaide);
            $stmt->execute();
            return false;
        } catch(Exception $e) {
            return false;
        }
    }


?>