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 :

SQL - PHP - Rêquetes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut SQL - PHP - Rêquetes
    Bonjour,

    Actuellement, je suis à la recherche de solution

    Au lieu de faire 10000 requêtes et 10000 pages. Je préfère utiliser les paramètres !

    Alors :

    - J'aimerais avoir deux paramètre :
    1 Paramètre -> Pour le temps.
    1 Paramètre -> Choisir le capteur : (CO,CO2,LUX,BAT,HALL,LP,PIR,STR,HUM,PRES,TC)
    Le premier paramètre est déjà fais.
    Le deuxième non. (J'ai du mal avec celui là)


    Par exemple, je voudrais choisir le capteur CO2 avec toute ces informations (value) dans le mois = 4 ou semaine = 2 :

    172.16.xx.xx/sensor/getTranslation.php?periode=4CO

    4 = Concernant la période = Mois
    CO = Concernant le capteur que j'aimerais avoir

    Voici mon code que j'ai déjà réaliser :

    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
    <?php
    include 'Database.php';
     
    $database = new Database();
    $con = $database->getConnection();
     
    // Par défaut on prend la dernière heure
    $periode = 'HOUR';
    if( !empty( $_GET['periode'] ) ) {
        switch( $_GET['periode'] ) {
            case 1:
                $periode = 'HOUR';
                break;
            case 2:
                $periode = 'DAY';
                break;
            case 3:
                $periode = 'WEEK';
                break;
            case 4:  
                $periode = 'MONTH';
                break;
            case 5:
                $periode = 'YEAR';
                break;
        } 
    }
     
    $sql = "SELECT timestamp,sensor,value from sensorparser Where timestamp > CURDATE() - INTERVAL 1 ".$periode;
     
    $result = $con->query($sql)->fetchAll(PDO::FETCH_ASSOC);
     
    header("content-type:application/json");
     
    $value = str_replace("filename", "fileName", json_encode($result));
    $value = str_replace("folderdirectory", "folderDirectory", $value);
    $value = str_replace("lastchange", "lastChange", $value);
     
    echo $value;
     
    $database->closeConnection();
    $database = null;
    $con = null;
    exit();

    Merci d'avance

    Cordialement

  2. #2
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Salut,
    Si j'ai bien compris, tu concatènes tes paramètres.

    Pas bon, pas bon ;-)

    Choisis plutôt de les passer tels quels dans l'URL
    172.16.xx.xx/sensor/getTranslation.php?periode=month&capteur=co

    Tu testes si les paramètres sont passés et tu crées ta requête SQL.

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    tu passes plusieurs paramètres à ton url :
    172.16.xx.xx/sensor/getTranslation.php?periode=4&capteur=CO
    ensuite dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $p = isset($_GET['periode']) ? (int)$_GET['periode'] : 1;
    $periode = [1 => 'HOUR', 2 => 'DAY', 3 => 'WEEK', 4 => 'MONTH', 5 => 'YEAR'][$p] ?? 'HOUR';
     
    $caps = [
        'CO' => 'blabla', 'CO2' => 'blabla', 'LUX'=> 'blabla', 'BAT' => 'blabla', 'HALL' => 'blabla', 'LP' => 'blabla', 
        'PIR' => 'blabla', 'STR' => 'blabla', 'HUM' => 'blabla', 'PRES' => 'blabla', 'TC' => 'blabla'
    ];
    $c = $_GET['capteur'] ?? 'TC';
    $capteur = $caps[$c] ?? 'TC';
    Tu dois toujours tout vérifier, contrôler dès qu'il s'agit de données en provenance de l'extérieur

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut
    Ok, mais les value, sensor, time... je les récupères depuis une base de donnée. Les données ne sont pas en dure.
    C'est compliqué pour moi cette partie si possible de compléter avec mon code pour voir la diff

    PS : j'affiche en Json, sur ma page.

    Merci d'avance

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    quelque chose dans ce genre :
    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
    // à partir d'une url de ce genre :
    // 172.16.xx.xx/sensor/getTranslation.php?periode=4&capteur=CO
     
    include 'Database.php';
     
    $db  = new Database();
    $cnx = $database->getConnection();
     
    $p       = isset($_GET['periode']) ? (int)$_GET['periode'] : 1;
    $periode = [1 => 'HOUR', 2 => 'DAY', 3 => 'WEEK', 4 => 'MONTH', 5 => 'YEAR'][$p] ?? 'HOUR';
     
    $caps = [
        'CO' => 'blabla', 'CO2' => 'blabla', 'LUX'=> 'blabla', 'BAT' => 'blabla', 'HALL' => 'blabla', 'LP' => 'blabla',
        'PIR' => 'blabla', 'STR' => 'blabla', 'HUM' => 'blabla', 'PRES' => 'blabla', 'TC' => 'blabla'
    ];
    $c       = $_GET['capteur'] ?? 'TC';
    $capteur = $caps[$c] ?? 'TC';
     
    $sql = <<<sql
    SELECT `timestamp`, `sensor`, `value` 
      FROM sensorparser 
     WHERE `timestamp` > CURDATE() - INTERVAL 1 {$periode}
           AND `sensor` = {$capteur} 
    sql;
     
    $data = $cnx->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    $json = json_encode($data);
     
    echo strtr($json, ['filename' => 'fileName', 'folderdirectory' => 'folderDirectory', 'lastchange' => 'lastChange']);

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut
    Alors après implémentation dans mon serveur et en modifiant quelques variable, j'ai toujours un problème que je ne perçois pas :
    - Et pourquoi 'BlaBla' ?

    Le code : Page Translation.

    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
    <?php
    // à partir d'une url de ce genre :
    // 172.16.xx.xx/sensor/getTranslation.php?periode=4&capteur=CO
     
    include 'Database.php';
     
    $database  = new Database();
    $con = $database->getConnection();
     
    $p       = isset($_GET['periode']) ? (int)$_GET['periode'] : 1;
    $periode = [1 => 'HOUR', 2 => 'DAY', 3 => 'WEEK', 4 => 'MONTH', 5 => 'YEAR'][$p] ?? 'HOUR';
     
    $caps = [
        'CO' => 'blabla', 'CO2' => 'blabla', 'LUX'=> 'blabla', 'BAT' => 'blabla', 'HALL' => 'blabla', 'LP' => 'blabla',
        'PIR' => 'blabla', 'STR' => 'blabla', 'HUM' => 'blabla', 'PRES' => 'blabla', 'TC' => 'blabla'
    ];
    $c       = $_GET['capteur'] ?? 'TC';
    $capteur = $caps[$c] ?? 'TC';
     
    $sql = <<<sql
    SELECT `timestamp`, `sensor`, `value` 
      FROM sensorparser 
     WHERE `timestamp` > CURDATE() - INTERVAL 1 {$periode}
           AND `sensor` = {$capteur} 
    sql;
     
    $data = $con->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    $json = json_encode($data);
     
    echo strtr($json, ['filename' => 'fileName', 'folderdirectory' => 'folderDirectory', 'lastchange' => 'lastChange']);
    Résultat :
    http://xxxx.xxxx.xxx.xxx:xxxx/sensor...e=4&capteur=CO

    Nom : eRREUR.PNG
Affichages : 57
Taille : 23,4 Ko

    Le code : Page Database :

    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
    <?php
     
    class Database {
     
        private $host = "xx.xxx.xxx.xx";
        private $username = "xxxx";
        private $password = "xxxx";
        private $database = "xxxx";
     
        public $connection;
     
        public function getConnection() {
            $this->connection = null;
     
            try {
                $this->connection = new PDO("mysql:host=".$this->host.";dbname=".$this->database, $this->username, $this->password);
                $this->connection->exec("set names utf8");
            } catch (PDOException $exception) {
                echo "Error: ".$exception->getMessage();
                die();
            }
     
     
     
            return $this->connection;
     
        }
     
        public function closeConnection() {
            $this->connection = null;
        }
     
    }
     
    ?>
    Merci d'avance

    Et désolé pour les questions...

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    le message d'erreur veut juste dire que la requête à échouée.
    Tu sais qu'il faut éviter absolument d'utiliser les mots réservés SQL.
    TIMESTAMP et VALUE sont réservés par SQL, tu devrais renommer toutes ces colonnes pour commencer.
    Ensuite quand tu présentes la requête fais un simple echo $sql; pour vérifier quelle tête elle a.

Discussions similaires

  1. [SQL] PhP Variable
    Par boo64 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/05/2006, 14h49
  2. [MySQL] Fonctions calculs SQL/PHP pour projet football
    Par spamyx dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 16h16
  3. [MySQL] Requete SQL PHP
    Par CaptainChoc dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/10/2005, 16h13
  4. [MySQL] Sql-Php / Requete/ Afficher l'age (aide nécessaire please)
    Par Odilon dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 21/10/2005, 09h21
  5. [SQL+php] requete a trouver
    Par theclear dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/10/2004, 09h50

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