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 :

PHP <-> BDD


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut PHP <-> BDD
    Bonjour,
    pour un projet (application Android), j'ai besoin de communiquer avec une base de données. Le transfert des données se fait à travers une page php..sauf qu'en php j'y connais pas grand chose, à part récupérer une valeur de la bdd et la renvoyer en json. Dès que je souhaite réaliser des calculs avec les données de la bdd sur la page php, ça ne fait plus rien...je ne dois pas faire les choses correctement.. J'utilise la librairie slim avec.

    Ci-dessous un peu de code, ça ne doit pas être très plaisant à voir, mais j'espère que vous pourrez tout de même m'expliquer ce qu'il ne va pas :

    La page index.php qui "reçoit" les demandes et renvoi un json :
    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
     
    //renvoie la réponse au format json
    function echoRespnse($status_code, $response) {
        $app = \Slim\Slim::getInstance();
        // Http response code
        $app->status($status_code);
     
        // setting response content type to json
        $app->contentType('application/json');
     
        echo json_encode($response);
    }
     
    $app->get('/data/dpe', function(){
        $db = new DbHandler();
        $resultShon = $db->getShon();
        $resultelec = $db->calculdpelec($resultShon);
        $resultgaz = $db->calculdpegaz($resultShon);
        $resultbois = $db->calculdpegaz($resultShon);
        $resultfinal = $resultelec + $resultgaz + $resultbois; //théoriquement, c'est une valeur numérique
     
        $response["dpe"] = array();
        $value = array();
     
        $value["value"] = $resultfinal;
        array_push($response["dpe"], $value);
     
        echoRespnse(200, $response);
    });
    une page DbHandler.php qui réalise les requêtes php (j'ai l'impression que c'est là-dedans que ça ne va pas...quand on voit la tête que ça a.. >< )

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public function getShon(){
            $stmt = $this->conn->prepare("SELECT g.valeur FROM variable g WHERE g.nom = 'shon'");
            $stmt->execute();
            $tasks = $stmt->get_result();
            $stmt->close();
     
            $value = $tasks->fetch_assoc();
            return $value["valeur"];
         }
     
         public function calculdpelec($surface){
            $stmt1 = $this->conn->prepare("SELECT COUNT(*) AS tab FROM (SELECT DISTINCT(DATE(ts)) FROM globale) AS alias");
            $stmt1->execute();
            $nbdate = $stmt1->get_result();
            $stmt1->close(); 
     
            $stmt = $this->conn->prepare("SELECT SUM(g.valeur) AS som FROM globale g");
            $stmt->execute();
            $tasks = $stmt->get_result();
            $stmt->close();
     
            $nb = $nbdate->fetch_assoc();
            $value = $tasks->fetch_assoc();
            return (($value["som"] * 2.58)/ $surface) / ($nb["tab"] / 365);
         }
     
         public function calculCoeffRegion(){
            $stmt2 = $this->conn->prepare("SELECT v.valeur FROM variable v WHERE v.nom = 'coefficientRegion'");
            $stmt2->execute();
            $coeffregion = $stmt2->get_result();
            $stmt2->close();
     
            $coeffr = $coeffregion->fetch_assoc();
            return $coeffr["valeur"];
         }
     
        public function calculdpegaz($surface){
            $stmt0 = $this->conn->prepare("SELECT v.valeur FROM variable v WHERE v.nom = 'coefficientgaz'");
            $stmt0->execute();
            $coeffgaz = $stmt0->get_result();
            $stmt0->close();
     
            $stmt1 = $this->conn->prepare("SELECT COUNT(*) AS tab FROM (SELECT DISTINCT(DATE(ts)) FROM gaz) AS alias");
            $stmt1->execute();
            $nbdate = $stmt1->get_result();
            $stmt1->close(); 
     
            $stmt = $this->conn->prepare("SELECT SUM(g.valeur) AS som FROM gaz g");
            $stmt->execute();
            $tasks = $stmt->get_result();
            $stmt->close();
     
            $value = $tasks->fetch_assoc();
            $coeffg = $coeffgaz->fetch_assoc(); 
            $nb = $nbdate->fetch_assoc();
            $coeffr = calculCoeffRegion();
     
            return (($value["som"] * $coeffr * $coeffg["valeur"]) / $surface) / ($nb["tab"] / 365);
         }
     
         public function calculdpebois($surface){
            $stmt1 = $this->conn->prepare("SELECT COUNT(*) AS som FROM (SELECT DISTINCT date FROM gaz) AS alias");
            $stmt1->execute();
            $nbdate = $stmt1->get_result();
            $stmt1->close(); 
     
            $stmt = $this->conn->prepare("SELECT SUM(g.nombre) AS val FROM gaz g");
            $stmt->execute();
            $tasks = $stmt->get_result();
            $stmt->close();
     
            $value = $tasks->fetch_assoc();
            $nb = $nbdate->fetch_assoc();
     
            return (($value["val"] * 1000000) / $surface) / ($nb["som"] / 365);
         }
    Les reqêtes sql fonctionnent, elles ont toutes été testées individuellement sur la bdd.

    Je vous remercie, quelque soit l'aide que vous pourriez m'apporter.

    Cordialement,
    Nicolas

    EDIT : je viens de m'apercevoir qu'il y a un sous-forum dédié à php - mysql, je suppose donc que mon post est mal placé, je m'en excuse.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sans un minimum de debugage ça ca être difficile de t'aider.
    Contrôle le contenu de tes variables aux endroits clefs du code pour trouver à quelle étape ça ne va plus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Merci, d'avoir pris le temps de répondre. Effectivement j'ai oublié d'indiquer l'erreur donnée par le serveur.
    Le log indique que l'erreur se situe à la ligne 249 de DBHandler, faisant référence à ce passage :

    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
     
        public function calculdpegaz($surface){
            $stmt0 = $this->conn->prepare("SELECT v.valeur FROM variable v WHERE v.nom = 'coefficientgaz'");
            $stmt0->execute();
            $coeffgaz = $stmt0->get_result();
            $stmt0->close();
     
            $stmt1 = $this->conn->prepare("SELECT COUNT(*) AS tab FROM (SELECT DISTINCT date FROM gaz) AS alias");
            $stmt1->execute();
            $nbdate = $stmt1->get_result();
            $stmt1->close(); 
     
            $stmt = $this->conn->prepare("SELECT SUM(g.valeur) AS som FROM gaz g");
            $stmt->execute();
            $tasks = $stmt->get_result();
            $stmt->close();
     
            $value = $tasks->fetch_assoc();
            $coeffg = $coeffgaz->fetch_assoc(); 
            $nb = $nbdate->fetch_assoc();
            $coeffr = calculCoeffRegion();  //<---- LINE 249
     
            return (($value["som"] * $coeffr * $coeffg["valeur"]) / $surface) / ($nb["tab"] / 365);
         }
    La méthode en question (calculCoeffRegion) est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function calculCoeffRegion(){
            $stmt2 = $this->conn->prepare("SELECT v.valeur FROM variable v WHERE v.nom = 'coefficientRegion'");
            $stmt2->execute();
            $coeffregion = $stmt2->get_result();
            $stmt2->close();
     
            $coeffr = $coeffregion->fetch_assoc();
            return $coeffr["valeur"];
         }
    La valeur retournée par le select est 0.9. Mais cette valeur dans la bdd est un VARCHAR, peut-être que la transformation chaine de caractère -> décimal ne se fait pas directement comme je l'ai écrit ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Toujours pareil, il faut debuguer :
    Tu nous parles d'une erreur dans un log. De quoi s'agit-il ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Le seul endroid où je peux voir mes erreurs est le fichier error.log de apache.
    La seule indication que j'ai, est la fonction calculCoeffRegion() est indéfinie alors qu'elle est bien définie juste au-dessus de celle dans laquelle elle est appelée...

    Comme indiquée précédemment la valeur du select réalisé par calculCoeffRegion() est 0.9 donc ce qui est cencé être retourné n'est pas null

    Ce n'est pas possible de faire en php $variable = function() avec function() qui retourne une valeur ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quand tu as des erreurs, donne les, c'est quand même utile pour debuguer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $coeffr = $this->calculCoeffRegion();
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Merci, cela fonctionne !
    c'est étonnant de devoir dire où est la méthode même quand celle-ci est dans la même class. Maintenant je le saurai, merci encore.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Justement si tu ne mets pas ->, ce n'est pas la méthode x que tu appelles mais la fonction x.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [PHP-JS] Recherche BDD - erreur
    Par acppca dans le forum Langage
    Réponses: 10
    Dernier message: 24/07/2007, 16h32
  2. Réponses: 8
    Dernier message: 04/07/2007, 12h51
  3. [Conception] PHP + Images et BDD
    Par manuel54 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/02/2007, 21h50
  4. [MySQL] Execution de code PHP dans une BDD
    Par calenfeaion dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 30/06/2006, 13h34

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