Page 1 sur 1

effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 11:25
par dje8269
Bonjour à tous,

Voila ce qui m’amène à vous. Après avoir parcouru plusieurs fois les cours du PHP certaines notions m'échappent.

Je suis électronicien à la base. je souhaite créer un peu de domotique à la maison. Pour ce faire je dispose d'un sous-domaine pour héberger un serveur.

Donc je souhaiterais faire une interface web qui pourra "piloter" mon serveur en écrivant des choses par exemples dans un fichier, et ma domotique à la maison ira lira ce fichier pour savoir si il y ad es choses à faire.

Dans un tout premier temps afin de familiariser je souhaite créer une page nommée "index.php" sur mon serveur.

dans cette page il me faudrait un bouton qui s’appelle "ON" après je feras ile "OFF" .

Quand on clic sur ce bouton , il faudrait que cela écrive par exemple "ON' dans un fichier nommé "LED.txt" et bien sur après il faudra écrire "OFF" quand on cliquera sur l'autre bouton.

Ainsi mon client ( un ESP32) interrogera le serveur de temps en temps ( économie d’énergie) pour savoir quelle est l'état à appliquer sur la LED.

Après de très nombreux essais voilà ou j'en suis, mais ça ne fonctionne toujours pas? Qu'en penses vous ?

<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Commande LED</title>
</head>

<body>

<h1 id="titre" >Mon serveur Web</h1>

<?php
if(!empty($_POST['envoyer'])) {
echo "Bonjour !";
ON();
}
?>

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<input type="submit" id="envoyer" name="envoyer" value="envoyer">
<form>

<form>
<button onclick="ON()">On</button>
<button onclick="OFF()">Off</button>
</form>

<script>
function ON()
{
<?php
$monfichier = fopen('LED.txt', 'r+');
fseek($monfichier, 0); // On remet le curseur au début du fichier
fputs($monfichier, 'on' ); // On écrit le nouveau nombre de pages vues
fclose($monfichier);
?>

}
function OFF()
{
<?php
$monfichier = fopen('LED.txt', 'r+');
fseek($monfichier, 0); // On remet le curseur au début du fichier
fputs($monfichier, 'off' ); // On écrit le nouveau nombre de pages vues
fclose($monfichier);
?>
}
</script>



</body>
</html>


Merci de m'avoir lu !

Re: effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 11:32
par or 1
<?php
if(!empty($_POST['envoyer'])) {
echo "Bonjour !";
ON();
}
?>
ce code s'exécute sur le serveur, il va fonctionner s'il existe une fonction php qui s'apelle ON. or dans le code donné, aucune trace d'une telle fonction.


function ON()
{
<?php
$monfichier = fopen('LED.txt', 'r+');
fseek($monfichier, 0); // On remet le curseur au début du fichier
fputs($monfichier, 'on' ); // On écrit le nouveau nombre de pages vues
fclose($monfichier);
?>
}
ce code s'exécute dans le navigateur (ctrl + u pour voir la source de la page html, le code de la fonction javascript). le php n'écrit rien donc la fonction javascript est vide.

pour commencer, il vaut mieux partir sur :
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<input type="submit" id="envoyer" name="envoyer" value="ON">
<form>

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<input type="submit" id="envoyer" name="envoyer" value="OFF">
<form>
et ne pas inclure de javascript.

Re: effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 12:04
par dje8269
Merci poru cette réponse rapide !
Ca fait plaisir d'avoir une petite attention.

Vos explications sont claires. Cependant , je crois comprendre, mais je n'en suis pas sur, que votre code, ne vas pas écrire sur mon fichier.

Je crois avoir compris que quand le serveur va recevoir l'ordre de m'envoyer la page html demandée .
Il va exécuter le code php en premier .
Donc il va transformer cette ligne :
<?php echo $_SERVER['PHP_SELF'];?>
en quelques chose je ne sais pas trop quoi ! La logique voudrait en "OFF" ou en "ON"
ce qui donnerai :
<form action="ON" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="ON">
		<form>
Donc il exécuterai la fonction ON(); toujours en php car je suis encore dans le serveur ?

J'ai donc rajouter la fonction php qui permet de modifier le fichier en question.

EN modifiant mon code ainsi, ça ne fonctionne toujours pas. Quelques chose doit m’échapper.
<!doctype html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
		<title>Commande LED</title>
    </head>
	
    <body>
		
		<h1 id="titre" >Mon serveur Web</h1>


		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="ON">
		<form>

		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="OFF">
		<form>		

		<?php
			function ON()
			{
				$monfichier = fopen('LED.txt', 'r+');
				fseek($monfichier, 0); // On remet le curseur au début du fichier
				fputs($monfichier, 'on' ); // On écrit le nouveau nombre de pages vues
				fclose($monfichier);
			}
		?>

		<?php
			function OFF()
			{
				$monfichier = fopen('LED.txt', 'r+');
				fseek($monfichier, 0); // On remet le curseur au début du fichier
				fputs($monfichier, 'off' ); // On écrit le nouveau nombre de pages vues
				fclose($monfichier);
			}
		?>		
		
    </body>
</html>
Désolé si je dis des âneries !

Merci de m'avoir lu

Re: effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 12:10
par or 1
un code du genre :
<?php
if(!empty($_POST['envoyer'])) {
echo "Bonjour !";
ON();
}
?>
est indispensable, sinon, il y a des fonctions php mais elles ne sont jamais appelées.

https://www.php.net/manual/fr/function. ... ntents.php est fait pour écrire dans un fichier.

Re: effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 12:45
par Invité
A force de test, j'ai finis par obtenir qui fonctionne à peu près.

j'arrive donc a écrire dans mon fichier LED.txt la valeur on et off en fonction si j’appuie sur le bouton "ON" ou sur le bouton "OFF".
Je vais essayer de me débrouiller avec ca pour la suite.

Si je peux abuser un peu de votre temps, pouvez vous m'expliquer ce qui se passe avec cette ligne
		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="ON">
		<form>
En fait ce qui n'est pas clair poiur moi c'est le dialogue . comme cette ligne
!empty($_POST['envoyer'])
Je crois que si "$_POST['envoyer']" n'est pas vide je fais quelques chose. Mais d'où viens sa valeur ? et comment l'obtenir ?

Voila mon code qui fonctionne en entier :
!doctype html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
		<title>Commande LED</title>
    </head>
	
    <body>
		
		<h1 id="titre" >Mon serveur Web</h1>


		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="ON">
		<form>

		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="OFF">
		<form>
			
		<?php
			if(!empty($_POST['envoyer']))
			{
				if(($_POST['envoyer'])=="ON")
				{
					ON();
				}
				if(($_POST['envoyer'])=="OFF")
				{
					OFF();
				}
			}
		?>

		<?php
			function ON()
			{
				$monfichier = fopen('LED.txt', 'r+');
				fseek($monfichier, 0); // On remet le curseur au début du fichier
				fputs($monfichier, 'on' ); // On écrit le nouveau nombre de pages vues
				fclose($monfichier);
			}
		?>

		<?php
			function OFF()
			{
				$monfichier = fopen('LED.txt', 'r+');
				fseek($monfichier, 0); // On remet le curseur au début du fichier
				fputs($monfichier, 'off' ); // On écrit le nouveau nombre de pages vues
				fclose($monfichier);
			}
		?>		
		
    </body>
</html>
Encore merci !

Re: effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 13:09
par or 1
les valeurs des différents champs d'un formulaire sont envoyées au script php et on y accède grâce à $_POST

mettre ce code :
    <form action="<?php echo $_SERVER['PHP_SELF'];?>?param=value&lo=pl" method="post">
      <input type="submit" id="envoyer" name="envoyer" value="ON">
<input type="text" name="test" value="ON 4">
<input type="text" name="autre" value="ON 9">
    </form>
    <pre>
<?php
var_dump($_POST);
var_dump($_GET);
?>
</pre>
dans un fichier php et tester des modifications.

Re: effectuer une fonction php avec un bouton html

Posté : 17 juin 2021, 16:38
par dje8269
Un grand merci "or 1"

Je pense avoir compris un petit peu le cheminement.

J'ai donc pus "optimiser" un peu le code . Ainsi je n'ai plus besoin de fonction. je traite directement la valeur du bouton recue .
Qu'en penses tu ?
<!doctype html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
		<title>Commande LED</title>
    </head>
	
    <body>
		
		<h1 id="titre" >Mon serveur Web</h1>



		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="ON ">
		<form>

		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<input type="submit" id="envoyer" name="envoyer" value="OFF">
		<form>



		<?php
			// si la valeur de envoyer n'est pas null alors je regarde quelle est cette valeur
			if(($_POST['envoyer'] == "ON ") || ($_POST['envoyer'] == "OFF") )
			{
				// Si la valeur de "envoyer" est "ON" alors j'ecris ON dans mon fichier
 
					$monfichier = fopen('LED.txt', 'r+');
					fseek($monfichier, 0); // On remet le curseur au début du fichier
					fputs($monfichier, $_POST['envoyer'] ); // On écrit le nouvel état
					fclose($monfichier);
			}
		?>		
		
    </body>
</html>
Prochaine étape :
Voir pour écrire sur mon fichier LED.txt sur une deuxième ligne puis une troisième ...
Essayer de faire 1 seul bouton qui change d'état quand on appui dessus plutôt que d'avoir deux boutons.