IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Erreur PHP ou MySQL ?


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut Erreur PHP ou MySQL ?
    Bonjour,

    Je veux insérer la valeur prise par la variable de session $_SESSION["FruitOrdre_$i"] dans la table feuille-fruit-desordre mais l'insertion de mon enregistrement ne s'effectue pas.
    Dans mon code, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $SQLinsertPlant = insertPlant();
    sachant que la fonction insertPlant est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function insertPlant()
    	{
    		$SQLinsertPlant = $pdo->query("INSERT INTO `feuille-fruit-desordre` (`id`, `fruit`) VALUES (NULL,   '".$_SESSION["FruitOrdre_$i"]."')  ");
    		return $SQLinsertPlant;
    	}
    Je ne rencontre pas de message d'erreur mais l'insertion ne se fait pas et si je fais appel à vous, c'est parce que je ne vois pas mon erreur.
    Êtes-vous plus réveillé(e)s que moi ?

  2. #2
    Membre actif
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Points : 246
    Points
    246
    Par défaut
    Bonjour,

    Qu'est-ce qui est retourné par $pdo->query() ?
    Un objet instance de la class PDOStatement ou FALSE ?
    Si vous avez besoin d'une librairie permettant de gérer facilement les fichiers et les dossiers en PHP... ou si vous êtes juste curieux(se) :
    https://github.com/moDevsome/moFilesManager

    N'hésitez pas à me faire un retour

  3. #3
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Sur base de la lecture de ton code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function insertPlant()
        {
            $SQLinsertPlant = $pdo->query("INSERT INTO `feuille-fruit-desordre` (`id`, `fruit`) VALUES (NULL,   '".$_SESSION["FruitOrdre_$i"]."')  ");
            return $SQLinsertPlant;
        }
    Que vaut la variable $i ? Elle n'est pas déclarée dans ta fonction.
    Et que vaut $pdo ? Non déclaré également au sein de ta fonction.

    Ton code est plutôt mauvais; toutes mes excuses d'être aussi direct :

    * Tu utilises des variables non déclarées,
    * Tu ne vérifies pas p.ex. avec un isset() pour voir si $_SESSION contient effectivement ta variable,
    * Tu ne protèges pas ton code (en ce qui concerne les SQL injections),
    * Tu retournes quelque chose mais qu'est-ce ? un objet ? un booléen ?

    Vu que ta fonction ne contient qu'une seule ligne (le pdo->query), je te suggère en l'état de supprimer ta fonction et de remplacer son appel par, justement, le $pdo->query que je suppose initialisé à ce moment-là.

    Bonne soirée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  4. #4
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Bonjour à tous 2 et merci pour vos interventions.
    Je regarde ça et reviens vers vous asap.

  5. #5
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par Soundboy39 Voir le message
    Bonjour,

    Qu'est-ce qui est retourné par $pdo->query() ?
    Un objet instance de la class PDOStatement ou FALSE ?
    Bonjour Sounboy39,

    Merci pour ton intervention mais je suis incapable de répondre à ta question. Il n'y a aucun message de retourné.

  6. #6
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Bonjour cavo789,

    Désolé pour le délai mais j'ai dû en urgence m'ateler à d'autres tâches.

    Citation Envoyé par cavo789 Voir le message
    Que vaut la variable $i ? Elle n'est pas déclarée dans ta fonction.
    En effet, elle n'est as déclarée dans la fonction. C'est juste une avriable que j'incrémente et qui m'a permis précédemment de créer des variables de session différentes dans lesquelles j'ai stocké des valeurs.
    Quand $i=0, j'ai par exemple $_SESSION["FruitOrdre_1"] qui contient Peuplier, $_SESSION["FruitOrdre_2"] qui contient Aulne, etc.

    Citation Envoyé par cavo789 Voir le message
    Et que vaut $pdo ?
    C'est la connexion à la BdD

    Citation Envoyé par cavo789 Voir le message
    Ton code est plutôt mauvais; toutes mes excuses d'être aussi direct :
    Aucun problème, je suis un amateur pur et dur et n'ai aucune prétention technique dans ce domaine, ce n'est pas mon métier. Je me borne juste à maintenir en vie un site pour une communauté.

    Citation Envoyé par cavo789 Voir le message
    Tu utilises des variables non déclarées
    Si tu entends par là que les variables n'existent pas, hé bien elles existent. J'ai limité le code car il aurait fallu que j'envoie 5 fichiers de plusieurs centaines de lignes et j'ai eu peur de noyer le poisson.

    Citation Envoyé par cavo789 Voir le message
    Tu ne vérifies pas p.ex. avec un isset() pour voir si $_SESSION contient effectivement ta variable
    Exact, j'ai oublié ça. Je le modifie ainsi mais ne suis pas sûr de mon coup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	function insertPlant()
    	{
    		if (isset($_SESSION["FruitOrdre_$i"]))
    			{
    				$SQLinsertPlant = $pdo->query("INSERT INTO `feuille-fruit-desordre` (`id`, `fruit`) VALUES (NULL,   '".$_SESSION["FruitOrdre_$i"]."')  ");
    			}
     
    		else
    			{
    				$SQLinsertPlant ="Probleme";
    			}
    		return $SQLinsertPlant;	// provoque la fin de la fonction et le renvoi de la valeur qui la suit
    	}
    Citation Envoyé par cavo789 Voir le message
    Tu ne protèges pas ton code (en ce qui concerne les SQL injections)
    C'est également vrai mais ça dépasse largement mon domaine de compétence.

    Citation Envoyé par cavo789 Voir le message
    Tu retournes quelque chose mais qu'est-ce ? un objet ? un booléen ?
    Aucune idée, comment savoir ?

    Citation Envoyé par cavo789 Voir le message
    Vu que ta fonction ne contient qu'une seule ligne (le pdo->query), je te suggère en l'état de supprimer ta fonction et de remplacer son appel par, justement, le $pdo->query que je suppose initialisé à ce moment-là.
    Là encore, j'ai joué à l'apprenti-sorcier en mettant ce code dans un fichier à part, un peu sur ce que j'ai cru comprendre du fonctionnement d'un modèle MVC pour lequel on met les fonctions dans le modèle, non ?

  7. #7
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Bonjour Denis

    Citation Envoyé par Denis Placé Voir le message
    En effet, elle n'est as déclarée dans la fonction. C'est juste une avriable que j'incrémente et qui m'a permis précédemment de créer des variables de session différentes dans lesquelles j'ai stocké des valeurs.
    Oui mais non ;-)
    Reprends ta fonction (celle que j'ai commentée) : tu utilises la variable $i dans ta fonction; au sein de ta fonction cette variable n'existe pas; elle n'y est ni déclarée ni assignée. Elle vaut donc null.

    Ce que tu me dis c'est que tu as déclaré et initialisé cette variable ailleurs; ok, très bien mais ... dans ta fonction, cette variable est inconnue.

    Et c'est la même chose pour ma question "Et que vaut $pdo ?"

    Au sein de ta fonction, $pdo est inconnu d'où problème; c'est quoi ? ben c'est rien. Et donc pas du tout ta connexion à la base de données.

    Citation Envoyé par Denis Placé Voir le message
    Aucune idée, comment savoir ?
    Ben... vu que tu es le programmeur, tu devrais le savoir ;-) (je taquine)

    Avec un code propre, quand tu fais appel à une fonction comme "getFirstName()" p.ex. tu attends quoi ? Ici, j'ai pris un exemple simple : une chaîne de caractères. Il n'est pas logique de recevoir un chiffre.

    Ta fonction devrait retourner; selon un principe "clean code" (code propre), un boolean je suppose. Tu es intéressé de savoir si ton insert à fonctionné.

    Que retourne $pdo->query ? Regarde la doc. Tu reçois un recordset qui retourne les valeurs (comme si je fais un SELECT FROM; je reçois les records).

    Toi tu veux faire quoi ? Un INSERT. Ne devrais-tu pas alors t'intéresser à la fonction pdo->exec() plutôt (https://www.php.net/manual/en/pdo.exec.php) ?
    Cette fonction va retourner, voir dans la doc, un entier : le nombre de records ayant été impacté. Si aucun n'a été impacté, retourne 0.

    Donc, si zéro, ouch!, il y a eu un souci. Ton INSERT est supposé ajouté un enregistrement.

    Du coup, si $pdo->exec(....) retourne le chiffre 1, ta fonction est réussie et peut retourner la valeur true. Sinon, ouch.

    Voici une proposition de code (PHP 7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function insertPlant(string $fruit): void
    {
        $rows = $this->pdo->exec("INSERT ...");
     
        if (1 !== $rows) {
            throw new \Exception("Un problème est survenu");
        }
    }
    L'idée : tu appelles ta fonction depuis une classe qui a déjà initialisé la propriété $this->pdo (afin qu'elle soit globale).

    La fonction est appelée avec un paramètre qui correspond à ton $_SESSION["FruitOrdre_$i"].

    Cette fonction ... ne retourne rien. Car, en fait, on n'est pas intéressé de savoir si elle retourne true ou false. On veut (clean coding) qu'elle plante s'il y a eu un problème afin qu'on puisse réagir. En programmation propre, les erreurs ne doivent jamais être silencieuses; il faut les capturer immédiatement et les gérer (avec un try catch p.ex.).

    Je sais que j'ai été très certainement très technique ici; l'idée est de te donner quelques pistes.

    Bonne journée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  8. #8
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Re-bonjour cavo789,

    Suite à ton intervention, j'ai lu et tenté de comprendre ce que tu dis......
    J'ai donc modifié ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function insertPlant(string $fruit): void
    {
        $rows = $this->pdo->exec("INSERT INTO `feuille-fruit-desordre` (`id`, `fruit`) VALUES (NULL,   '".$fruit."')  ");
     
        if (1 !== $rows) {
            throw new \Exception("Un problème est survenu");
        }
    }
     
    insertPlant(string $fruit);
    J'ai bien entendu vérifié que $fruit existe bien et contient ma bonne chaîne de caractères qui, parfois, peut valoir bota-1234.jpg (mais c'est normal ).
    Malheureusement, le traitement du script s’arrête (et donc l'insertion ne se fait pas) et aucun message d'erreur ne s'affiche.

    Citation Envoyé par cavo789 Voir le message
    Je sais que j'ai été très certainement très technique ici; l'idée est de te donner quelques pistes.
    Euh.... légèrement technique J'ai de la lecture pour plusieurs jours, en tenant compte du travail de compréhension que cela entraîne.

    Merci de t'occuper de mon cas.

  9. #9
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Ton script est-il gigantesque car si pas, poste le ici pour qu'on puisse t'aider.

    Dans la fonction tu fais appel à $this->pdo mais as-tu défini cette propriété ? L'as-tu initialisée ? J'ai supposé dans mon dernier message que tu étais dans une classe php et j'ai supposé que tu avais initialisé la variable....

    Pour "rien ne se passe" pense à afficher les erreurs php. Cherche des infos sur error_reporting().
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  10. #10
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Encore merci pour ton implication,

    Citation Envoyé par cavo789 Voir le message
    Dans la fonction tu fais appel à $this->pdo mais as-tu défini cette propriété ? L'as-tu initialisée ? J'ai supposé dans mon dernier message que tu étais dans une classe php et j'ai supposé que tu avais initialisé la variable....
    Euh ... non, pas de classe à l'horizon Je regarde ça de mon côté pour tenter de comprendre comment ça marche et reviens vers toi.

    Citation Envoyé par cavo789 Voir le message
    Pour "rien ne se passe" pense à afficher les erreurs php. Cherche des infos sur error_reporting().
    J'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL);
    dans mon modèle donc normalement... ça devrait afficher les erreurs (je pense).

  11. #11
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Exemple ci-dessous; non testé!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
     
    class Fruit {
     
     
      // Properties
      private $pdo;
     
      private function __construct() {
          // Variables à définir !
          $this->pdo = new PDO($dsn, $user, $pass, $driver_options);
      }
     
      public function insertPlant(string $fruit): void
      {
        $rows = $this->pdo->exec("INSERT INTO `feuille-fruit-desordre` (`fruit`) VALUES ('".$fruit."')");
     
        if (1 !== $rows) {
            throw new \Exception("Un problème est survenu");
        }
      }
    }
     
    $fruit = new Fruit();
    $fruit->insert('Fraise');
    unset($fruit);
     
    ?>
    C'est juste pour illustrer la création d'une classe et son utilisation.

    Note: j'ai viré "id" de ton SQL car je suppose qu'il s'agit d'un champ de type auto-incrément dans ta table; il ne faut donc pas le mettre dans le SQL, ton gestionnaire de base de données le traitant seul en ajoutant +1 à chaque fois.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  12. #12
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Même si ça coince toujours de la même façon, je sens que je commence à comprendre un peu le truc.
    On va dire que mon fichier appelant le modèle est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    include "../php/PDO_conn.php"; // Inclusion du fichier de connexion à la base de données
    require('modele.php');
     
        $fruitOrdre = 'bota-0187-tpm.jpg';
     
        insertPlant(string $fruit);
     
        $fruit = new Fruit();   // créé un objet
        $fruit->insertPlant('$fruitOrdre');
        unset($fruit);
    ?>
    modele.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    error_reporting(E_ALL);   // permet d'afficher les erreurs donc utile pour debugage
     
    if(session_id() == '')
          {
            session_start(); // A mettre sur chaque page utilisant la session
          }
     
    function connectBDD()
    	{
    		/* Variables de connexion */
    		try
    			{
    			    include "../php/PDO_conn.php"; // Inclusion du fichier de connexion à la base de données
    			}
    		catch(Exception $e)
    			{
    			    die('Erreur : '.$e->getMessage());
    			}
    	}
     
    class Fruit
        {
            // Properties
            private $pdo;
     
            private function __construct() {
                // Variables à définir !
                $this->pdo = new PDO($pdo_conn['hostname'], $pdo_conn['database'], $pdo_conn['password'], $driver_options);
                }
     
              public function insertPlant(string $fruit): void
              {
                $rows = $this->pdo->exec("INSERT INTO `feuille-fruit-desordre` (`fruit`) VALUES ('".$fruitOrdre."')");
     
                if (1 !== $rows) {
                    throw new \Exception("Un problème est survenu");
                }
              }
        }
    ?>
    Dans la connexion à la BdB, je n'ai pas modifié ton $driver_options. Je ne sais pas à quoi ça sert mais ce n'est peut-être pas la seule erreur.
    PS: Je sais qu'il y a un doublon dans la connexion à la BdD mais ce n'est pas le problème pour l'instant.

  13. #13
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    En ligne 51 de mon 1er fichier, ça ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fruit->insertPlant('$FruitOrdre');
    J'essaie mais ça ne change rien.

  14. #14
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Oui, pardon, erreur de typo dans mon exemple. Le nom de la fonction (ligne 14) est bien insertPlant et donc bien $fruit->insertPlant
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  15. #15
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Ok mais ça ne fonctionne pas quand-même.
    Comme je le disais, dans la connexion à la BdD, je n'ai pas modifié ton $driver_options. Je ne sais pas à quoi ça sert mais ce n'est peut-être pas la seule erreur.

  16. #16
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    PS: Je viens de simplifier le code que j'ai posté hier à 11h34 afin de ne pas "noyer le poisson".

  17. #17
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Je viens de modifier mon fichier appelant ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    	require "../php/PDO_conn.php"; // Inclusion du fichier de connexion à la base de données
     
    	require('modele4.php');
     
        $fruit = new Fruit();
        $fruit->insertPlant('peuplier');
     
        $fruitOrdre = 'bota-0187-tpm.jpg';
        unset($fruit);
        echo "ici";
    ?>
    Tandis que modele.php vaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    error_reporting(E_ALL);
     
    if(session_id() == '')
          {
            session_start();
          }
     
    class Fruit
        {
            public function insertPlant(string $fruit)
              {
                  $prep = $pdo->prepare("INSERT INTO `feuille-fruit-desordre` (`fruit`) VALUES (:fruit)     ");
                  $prep->bindParam(':fruit', $fruit);
                  $prep->execute();
              }
        }
    ?>
    La ligne 7 du fichier appelant faut planter le script et entraine une erreur HTTP ERROR 500.
    Par ailleurs, mon site fonctionne en dehors de cette page donc c'est bien cette ligne qui entraine le problème (ou ce qui se trouve dans le modèle et qui y fait référence) mais je ne vois pas quoi.

  18. #18
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Bonjour Denis

    Es-tu en PHP 7 ? Si pas, dans ton modèle, ligne 11, change vers publicfunction insertPlant($fruit). (supprimer "string" donc)

    Note: c'est difficile de t'aider en ce moment parce que ton code me paraît "complexe" dans le sens où, là, à la lecture, je continue à me dire que tu fais des erreurs que je pensais avoir déjà mentionné.

    Dans ta fonction insertPlant, $pdo existe-t-il ? Si tu regardes ton modèle, cette variable n'est jamais initialisée.

    Je parlais de clean_code mais c'est même au-delà ici : une classe PHP (ta classe Fruit) est supposée être autonome càd que pdo doit y être instanciée ce qui n'est pas le cas. Sauf erreur de ma part, ton code ne pourra jamais fonctionner en tant que tel.

    Fût une époque où l'on pouvait déclarer des variables globales; tu la déclarais dans un fichier (comme globale) et tu la récupérais dans un autre fichier mais ça, c'est à l'opposé du clean code.

    Ceci pour dire : à lire tes bouts de code, perso, je pense que cela ne fonctionnera pas et qu'il te faut d'abord mettre tout ça au propre. Une classe n'est pas un modèle, c'est un fichier qui est supposé ne contenir que, et strictement que, la déclaration de la classe; pas de "if ..." comme tu l'as mis p.ex. (concrètement tes lignes 9 à 18 uniquement).




    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  19. #19
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Merci cavo789 pour cette nième intervention,

    Citation Envoyé par cavo789 Voir le message
    Es-tu en PHP 7 ?
    Non, je suis en 5.5.38 donc je supprime string.

    Citation Envoyé par cavo789 Voir le message
    $pdo existe-t-il ?
    Je dirais oui car je l'initialise dans ma connexion à la base de données, connexion qui s'effectue correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require "../php/PDO_conn.php";
    Si j'insère J'obtiens object(PDO)#1 (0) { }

    Citation Envoyé par cavo789 Voir le message
    Une classe n'est pas un modèle, c'est un fichier qui est supposé ne contenir que, et strictement que, la déclaration de la classe; pas de "if ..." comme tu l'as mis p.ex. (concrètement tes lignes 9 à 18 uniquement).
    Ce que j'appelle "fichier appelant" est le contrôleur et j'ai mis la classe dans le modèle. Je n'aurais pas dû ?

    Comme tu le dis, cette histoire est mal partie donc tant pis, je vais laisser tomber le MVC et considérer qu'elle est résolue.
    Un grand merci à tous et surtout à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Erreur PHP ne peut charger l'extension mysql
    Par cyberfred1073 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/03/2007, 00h27
  2. Message d'erreur page PHP et MySQL
    Par littlesnoopy dans le forum Installation
    Réponses: 6
    Dernier message: 19/01/2007, 10h25
  3. Erreur php ou erreur mysql
    Par heyboy dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 11/10/2006, 11h45
  4. erreur php mysql
    Par taka10 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/08/2006, 10h41
  5. Erreur PHP et MySQL
    Par rane dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/05/2006, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo