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

Résolu/Fermé
Gui - 23 janv. 2019 à 16:24
Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019 - 25 janv. 2019 à 17:21
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

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
23 janv. 2019 à 17:19
Bonjour,

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

https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

https://forums.commentcamarche.net/forum/affich-37584947-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...



0
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:
0
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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
24 janv. 2019 à 17:10
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é).
0
Gui > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
24 janv. 2019 à 17:27
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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
24 janv. 2019 à 22:59
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>

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
24 janv. 2019 à 23:03
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
0
Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019
Modifié le 25 janv. 2019 à 16:25
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;
        }
    }    
}
?>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
25 janv. 2019 à 16:25
Regarde bien ton code...
Ta fonction se trouve dans le catch...
Sors la du bloc try catch
0
Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
25 janv. 2019 à 16:37
Je n'ai pas compris (je suis un vrai débutant de compet)... Je dois enlever le catch à la ligne 9 et 29?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019
25 janv. 2019 à 17:00
<?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;
        }
    }


?>
0