Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surveillance bonne arrivée des données

Est il possible de surveiller que la base est bien mise à jour?

Sujet résolu
    24 mai 2022 à 17:57:32

    GillesMangin-Voirin a écrit:

    tu as surtout fais une remise en forme et supprimé les .$donnees['id_ruche']

    J'ai également intégré la variable $message dans la variable $hbody (au lieu de $TEXT).

    Et j'ai aussi passé la génération du mail dans la condition if pour éviter d'envoyer le mail si aucune ruche ne ressort de la requête ... ça serait balot :)

    GillesMangin-Voirin a écrit:

    j'ai essayé ceci :

    // on exécute la variable de détection						 
    $reponse = $bdd->query(" SELECT M1.id_ruche, DATE_FORMAT( MAX( M1.horodatage ), "%d/%m/%Y %H:%i" ) AS derniere_mesure
        FROM Telemesures_ruches M1 INNER JOIN Liste_ruches R ON M1.id_ruche = R.id_ruche
        WHERE R.date_email IS NULL OR R.date_email < NOW() - INTERVAL 1 MINUTE
        GROUP BY M1.id_ruche HAVING MAX( M1.horodatage ) < NOW() - INTERVAL 10 MINUTE ORDER BY M1.id_ruche ");

    mais PHP me trouve une erreur sur cette ligne

    La coloration syntaxique devrait te mettre la puce à l'oreille ... Tu fermes les guillemets avec celui du DATE_FORMAT avant le %d ...

    Il faudrait mettre des apostrophes au lieu des guillemets soit dans le DATE_FORMAT, soit autour de la requête :

    // Comme ceci
    $reponse = $bdd->query('
    	SELECT M1.id_ruche, DATE_FORMAT( MAX( M1.horodatage ), "%d/%m/%Y %H:%i" ) AS derniere_mesure
        FROM Telemesures_ruches M1 INNER JOIN Liste_ruches R ON M1.id_ruche = R.id_ruche
        WHERE R.date_email IS NULL OR R.date_email < NOW() - INTERVAL 1 MINUTE
        GROUP BY M1.id_ruche HAVING MAX( M1.horodatage ) < NOW() - INTERVAL 10 MINUTE ORDER BY M1.id_ruche'
    );
    
    // Ou comme ceci
    $reponse = $bdd->query("
    	SELECT M1.id_ruche, DATE_FORMAT( MAX( M1.horodatage ), '%d/%m/%Y %H:%i' ) AS derniere_mesure
        FROM Telemesures_ruches M1 INNER JOIN Liste_ruches R ON M1.id_ruche = R.id_ruche
        WHERE R.date_email IS NULL OR R.date_email < NOW() - INTERVAL 1 MINUTE
        GROUP BY M1.id_ruche HAVING MAX( M1.horodatage ) < NOW() - INTERVAL 10 MINUTE ORDER BY M1.id_ruche"
    );

    C'est le métier qui rentre :p

    GillesMangin-Voirin a écrit:

    si je remplace les guillemets par ' elle ne fonctionne plus :

    $reponse = $bdd->query('SELECT * FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND horodatage >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC');

    Je me demande pourquoi?

    Là c'est la syntaxe PHP aussi ... PHP n'interprète les variables dans les chaînes (ici $numRuche) qu'entre les guillemets et non entre les apostrophes.

    Donc :

    // Ceci écrit la chaîne $numRuche sans la remplacer par le contenu de la variable
    $sql = 'SELECT * FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND horodatage >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC';
    
    // Ceci va remplacer $numRuche par le contenu de la variable
    $sql = "SELECT * FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND horodatage >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC";

    Utiliser un éditeur de texte avec de la coloration syntaxique permet souvent de voir ce genre de problème. Avec les apostrophes $numRuche apparaîtrait de la même couleur que le reste du texte, alors qu'avec les guillemets il serait d'une couleur différente. Exemple avec Notepad++ :

    On voit dans le deuxième cas que $numRuche est coloré différemment ...

    GillesMangin-Voirin a écrit:

    avec ta future réponse je vais encore apprendre quelque chose

    :D

    -
    Edité par Benzouye 24 mai 2022 à 17:58:55

    • Partager sur Facebook
    • Partager sur Twitter
    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
      26 mai 2022 à 20:50:01

      Merci j'ai compris (il faut encore que je m'en souvienne...) J'utilise Geany sur Raspberry il met aussi en couleur mais je n'avais pas vraiment fait attention.

      mais du coup j'ai essayé de modifier cette requête

      $reponse = $bdd->query("SELECT * FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND horodatage >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC");
      
      

      qui fonctionnait par celle-ci afin de mettre la fate au format français :

      $reponse = $bdd->query("SELECT * FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND DATE_FORMAT(horodatage, '%d/%m/%Y %H:%i:%s' ) >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC");


      Du coup ma requête ne renvoie rien (pas d'erreur un tableau vide...) J'ai encore dû louper quelque chose..

      Faut-il modifier aussi le format du retour de NOW ou de celui du ORDER BY (ou des 2)?

      Merci

      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2022 à 10:22:41

        Tu as modifié la clause WHERE ...

        NOW() retourne un type DATETIME alors que DATE_FORMAT() retourne une chaîne de caractères, la condition n'est donc jamais vérifiée...

        Il faut mettre le formatage dans la SELECT, donc le rajouter après * ou carrément enlever * pour préciser seulement les colonnes que tu veux récupérer.

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          27 mai 2022 à 12:22:05

          Effectivement ces 2 versions fonctionnent bien!

          Merci

          $reponse = $bdd->query("SELECT * , DATE_FORMAT(horodatage, '%d/%m/%Y %H:%i:%s') AS horodatage FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND horodatage >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC");
          
          ou
          
          $reponse = $bdd->query("SELECT id_ruche, DATE_FORMAT(horodatage, '%d/%m/%Y %H:%i:%s') AS horodatage, hyg, tex, tin,mas,lum, eau  FROM Telemesures_ruches WHERE (id_ruche) = $NumRuche AND  horodatage >= NOW() - INTERVAL 2 WEEK ORDER BY horodatage DESC");
          
          



          • Partager sur Facebook
          • Partager sur Twitter
            1 juin 2022 à 13:03:55

            J'ai enfin pris le temps de tester plusieurs ruches qui ne communiquent pas cela fonctionne nickel voici le résultat:

            Merci

            • Partager sur Facebook
            • Partager sur Twitter

            Surveillance bonne arrivée des données

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown