Page 1 sur 1

Besoin d'aide : Envoyer des requêtes MQTT via un script PHP

Posté : 03 mars 2021, 16:52
par ARP67
Bonjour,

Je débute avec PHP et MySQL, j'ai réussi à envoyer, stocker et afficher des valeurs dans ma base de donnée ainsi qu'envoyer des messages mosquitto_pub.
Maintenant j'aimerai exécuter ma fonction lors d'un clique sur un bouton HTML, mais je me rend compte qu'exécuter du PHP depuis HTML est impossible sauf si on bypass un peu cela :

Code : Tout sélectionner

<input type="submit" class="button" name="insert" value="insert" /> <?php $bdd = new PDO("mysql:host=localhost;dbname=iotmqtt", "root", "toto"); if($_GET){ if(isset($_GET['insert'])){ test(); } } function test(){ $stmt = $bdd->prepare('INSERT INTO lampe (stats) VALUES (:stats)'); shell_exec('mosquitto_pub -h localhost -t test -m "ON"'); $stmt->bindValue(':stats', 'ON', PDO::PARAM_STR); $stmt->execute(); } ?>
Lorsque je clique sur le bouton il ne se passe rien !

PS : Le code pour se connecter et ajouter une valeur à la BDD fonctionne, je pense que ça vient du shell_exec ou du if($GET)

Re: Besoin d'aide : Envoyer des requêtes MQTT via un script PHP

Posté : 03 mars 2021, 17:29
par Ryle
Salutations !

PHP est un script qui s'exécute côté serveur, il n'y a donc effectivement pas d'interaction avec le html qui est utilisé côté client pour afficher la page.

Deux options s'offrent à toi :
- En html, tu peux proposer un lien ou un formulaire avec un bouton, qui vont diriger l'utilisateur vers une page de ton site sur laquelle se trouve ton script php afin qu'il soit exécuté. Tu peux ensuite réafficher la même page ou rediriger l'utilisateur vers un écran de confirmation ou autre.
- En javascript, avec la techno AJAX, tu peux faire appel à la page où se trouve ton script php afin qu'il soit exécuté, sans changer de page affichée à l'écran. Tu pourras également gérer le succès ou l'échec en retour de l'appel ajax avec du javascript.

Re: Besoin d'aide : Envoyer des requêtes MQTT via un script PHP

Posté : 03 mars 2021, 22:34
par Saian
Salut, je vois plusieurs problèmes avec ton script. Déjà un input tout seul comme ça je suis pas sur que ça fonctionne. Ça se place normalement dans une balise form ou tu définis entre autre la method (get ou post) et le script à appeler. Ensuite la variable $bdd dans la fonction test n'est à priori pas définie. Il faudrait soit la passer en paramètre soit utiliser le mot clés global.