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 simplement (sans calcul intermédiaire) 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.
La page index.php me renvoi les données au format json
Code : Tout sélectionner
//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(); //fonctionne
$resultelec = $db->calculdpelec($resultShon); //fonctionne
$resultgaz = $db->calculdpegaz($resultShon); //fonctionne
$resultbois = $db->calculdpebois($resultShon); //<--- fonctionne pas
$resultfinal = $resultelec + $resultgaz + $resultbois;
$response["dpe"] = array();
$value = array();
$value["value"] = $resultfinal;
array_push($response["dpe"], $value);
echoRespnse(200, $response);
});
Code : Tout sélectionner
public function getShon(){ //fonctionne
$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){ //fonctionne
$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(valeur) AS som FROM globale");
$stmt->execute();
$tasks = $stmt->get_result();
$stmt->close();
$nb = $nbdate->fetch_assoc();
$value = $tasks->fetch_assoc();
if($nb["tab"] == 0){
$final = 0;
} else {
$final = (($value["som"] * 2.58)/ intval($surface)) / ($nb["tab"] / 365);
}
return $final;
}
function calculcoeffregion(){ //un mystère
$stmt2 = $this->conn->prepare("SELECT valeur FROM variable WHERE nom = 'coefficientRegion'"); /
/le select fonctionne, donne 0.9
$stmt2->execute();
$coeffregion = $stmt2->get_result();
$stmt2->close();
$coeffr = $coeffregion->fetch_assoc();
return doubleval($coeffr["valeur"]);
//je ne sais pas s'il y a quelque chose, mais c'est cencé être 0.9
}
public function calculdpegaz($surface){ //fonctionne pas
$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 = doubleval(calculcoeffregion()); //<--- le problème vient de là fonction indéfnie;
if($nb["tab"] == 0){
$final = 0;
} else{
$final = (($value["som"] * $coeffr * $coeffg["valeur"]) / intval($surface)) / ($nb["tab"] / 365);
}
return $final;
}
public function calculdpebois($surface){ //tout fonctionne
$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(nombre) AS val FROM bois");
$stmt->execute();
$tasks = $stmt->get_result();
$stmt->close();
$value = $tasks->fetch_assoc();
$nb = $nbdate->fetch_assoc();
if($nb["som"] == 0){
$final = 0;
} else {
$final = (($value["val"] * 1000000) / intval($surface)) / ($nb["som"] / 365);
}
return $final;
}
C'est l'erreur qui est indiqué dans le fichier log erreur.log d'apache (situé sur le serveur).
Je me doute très bien que le code doit ressembler à un brouillon, mais j'espère que quelqu'un aura la motivation de m'aider^^
Je vous remercie d'avance pour toute aide que vous pourriez m'apporter.
Cordialement.