8768 sujets

Développement web côté serveur, CMS

Bonjour Smiley cligne

Je vous explique le contexte : je suis actuellement sur un projet, je dois faire deux tableaux php connecté en DAO à la base de données.

Ces 2 tableaux sont situé sur deux pages php différentes.

Dans la base de donnée il y a deux tables qui constitue ces tableaux. Soit "mind_map" et "bulle". Bulle à pour clé étrangère id_mind_map.

Quand je suis sur la page avec le tableau 1 qui contient les données de la table : "mind_map", j'ai possibilité de cliquer sur un lien qui me permet de créer une bulle.

Ce lien m'envoie sur une nouvelle page avec l'autre tableau 2 qui contient les données de la table :"bulle".

La condition que je dois mettre en place est : de permettre d'afficher dans le tableau 2 que les bulles qui correspondent à id_mind_map.

Mon problème est que j'arrive à recupéré l'id_mind_map mais je n'arrive pas à faire la condition, j'ai essayé mais je ne trouve pas le bon résultat.

Voici les bouts de codes :

Code sur la page du tableau 2
 <?php
// Connection à la BDD
require_once "init.php";

// Récupère l'ID dans l'URL
$conditionURL = isset($_GET['id']);

if($conditionURL){
    $les_bulles=array();
    $dao = new BullesDAO(); 
    $les_bulles = $dao->findAll($conditionURL); 
}
?> 


Code du DAO :

<?php

class BullesDAO extends DAO {

    /**
    * Constructeur
    */

    function __construct() {
        parent::__construct();
    }

    /** 
    * Lecture d'une ligne par son ID
    * @param int ID de le ligne
    * @return \Bulles
    */

    public function find($id)
    {
        $sql = "SELECT * FROM bulle WHERE id_bulle= 
 :id_bulle";
        try {
            $params = array(":id_bulle" => $id);
            $sth=$this->executer($sql, $params);
            $row = $sth->fetch(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            die("Erreur lors de la requête SQL : " . $e->getMessage());
        }
        $bulles=null;
        if ($row) {
            $bulles = new Bulles($row);
        }
        // Retourne l'objet métier
        return $bulles;
    } // function find()
  
    /**
    * Lecture de tous les lignes
    * @return array
    */
    public function findAll($conditionURL)
    {
        $sql = "SELECT * FROM bulle WHERE id_mind_map = ".$conditionURL." ";
        try {
            $sth=$this->executer($sql);
            $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            die("Erreur lors de la requête SQL : " . $e->getMessage());
        }
        $les_bulles = array();
        foreach ($rows as $row) {
            $les_bulles[] = new Bulles($row);
        }
        // Retourne un tableau d'objets "lignes"
        return $les_bulles;
    } // function findAll()
?>



Pouvez - vous m'aider svp ? Merci d'avance Smiley ravi
Salut

Est ce que ton findAll te renvoi bien le résultat de ta requête ? pour cela test avec un
var_dump($resultat);die;
JENCAL a écrit :
Salut

Est ce que ton findAll te renvoi bien le résultat de ta requête ? pour cela test avec un
var_dump($resultat);die;


Alors j'ai essayé votre commande est le résultat est "null" avec un message d'erreur, j'imagine que ce message est dut au "die" de la commande.
Non mais j'ai mis "$resultat" pour faire un exemple, toi tu dois faire un var_dump de TON résultat de requête hein Smiley smile
J'ai trouvé la solution : il fallait que je fasse ça pour bien récupéré la valeur pour qu'elle ne soit pas en booléen ^^


if(isset($_GET['id'])){
   
    $les_bulles=array();
    $dao = new BullesDAO(); 
    $les_bulles = $dao->findAll($_GET['id']); 
}


public function findAll()
    {
        $sql = "SELECT * FROM bulle WHERE id_mind_map = ".$_GET['id']."";

Modifié par MlleYouma (27 Jan 2020 - 13:59)
Oulaaaa, fait très attention, tu envoie ce que tu as dans ton GET direct dans ta requête..

Ca veut dire que tu es "ouverte" au INJECTION SQL, si je connais ton URL je peux détruire ta base de données, ou pire.

Je te conseil de passer par des requêtes préparé.

Si dans ta requête, dans l'url je met "1; drop database" ou un truc du genre, c'est fini :=)
Okay, je vois mais comment ça des requetes préparés ?
Par exemple en mettant le GET dans une variables ?
Modifié par MlleYouma (27 Jan 2020 - 14:13)
MlleYouma a écrit :
Okay, je vois mais comment ça des requetes préparés ?
Par exemple en mettant le GET dans une variables ?


Non si tu met le get dans une varible cela ne va rien résoudre à part "mettre l'injection dans une variable"...

Soit tu passe par PDO (qui te permet de faire des requêtes préparé simplement) mais il faut que tu lise la doc etc...

Soit tu te faire une méthode GET ID qui te retourne forcement un INT

exemple

public (ou private) function _getID($id){
     if(is_int($id)){
          return $id;
     }else{
          return intVal($id);
     }
}


et là tu peux faire
if(isset($_GET['id'])){
   $id = $this->_getID($_GET['id']); //te return un entier dans tous les cas.
    $les_bulles=array();
    $dao = new BullesDAO(); 
    $les_bulles = $dao->findAll($id); 
}

Modifié par JENCAL (27 Jan 2020 - 15:37)
J'ai compris la méthode, mais j'ai une erreur, est je ne vois pas comment la régler.
Voici l’erreur :
Erreur fatale : erreur non interceptée: appel à la fonction non définie _getID () dans D: \ xampp \ htdocs \ projets \ STAGE \ Mind_Map \ Tableau_bulle.php: 9 Trace de pile: # 0 {main} jeté dans D: \ xampp \ htdocs \ projets \ STAGE \ Mind_Map \ Tableau_bulle.php sur la ligne 9
il faut créer la méthode _getID hein...

c'est ce que dit l'erreur "appel à la fonction non définie"
Modifié par JENCAL (03 Feb 2020 - 13:04)