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

- - Dernière réponse : 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
Afficher la suite 

2 réponses

Messages postés
26491
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 octobre 2019
1825
0
Merci
Bonjour,

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

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

http://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.
jordane45
Messages postés
26491
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 octobre 2019
1825 -
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é).
> jordane45
Messages postés
26491
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 octobre 2019
-
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.
Commenter la réponse de jordane45
Messages postés
26491
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 octobre 2019
1825
0
Merci
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>

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


?>
jordane45
Messages postés
26491
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 octobre 2019
1825 -
Et pour la connexion.... ajoute l'option permettant de voir les erreurs PDO ..
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Gui4671
Messages postés
33
Date d'inscription
jeudi 24 janvier 2019
Statut
Membre
Dernière intervention
7 avril 2019
-
Ok c'était tout simple en fait... Je retiens pour la prochaine fois :)

Un grand merci pour ton aide. Ca fonctionne correctement!
Commenter la réponse de jordane45