Base SQL Free- pas de transfert de données

Bonjour,
Je me suis lancé dans un projet ambitieux de station météo, ambitieux pour moi car novice.
Pour ce projet je suis parti du tuto suivant :

Cloud weather station esp32

J'ai après beaucoup de galères et de lectures réussi à construire un prog arduino qui collecte les données de plusieurs capteurs et envoie une requête http :

httpRequestData: api_key=tPthixxxxxx&sensor=BME280&location=Ext&value1=24.83&value2=49.62&value3=1020.60
HTTP Response code: 200

Code 200 : donc j'en déduis que le message a bien été reçu par le php

Voici le code php destinataire :

<!--

-->
<?php
 include_once('esp-database.php');

// Conservez cette valeur de cl� API pour �tre compatible avec le code ESP fourni dans la page du projet. Si vous modifiez cette valeur, l'esquisse ESP doit correspondre
 $api_key_value = "xxxxxx";

 $api_key= $sensor = $location = $value1 = $value2 = $value3 = "";

 if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $api_key = test_input($_POST["api_key"]);
   if($api_key == $api_key_value) {
     $sensor = test_input($_POST["sensor"]);
     $location = test_input($_POST["location"]);
     $value1 = test_input($_POST["value1"]);
     $value2 = test_input($_POST["value2"]);
     $value3 = test_input($_POST["value3"]);

     $result = insertReading($sensor, $location, $value1, $value2, $value3);
     echo $result;
   }
   else {
     echo "Wrong API Key provided.";
   }
 }
 else {
   echo "No data posted with HTTP POST.";
 }

 function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
 }

Et dans esp-database le html en charge de traiter les données (uniquement le début du code pour ne pas alourdir)

<?php
  $servername = "localhost";
// REMPLACER par le nom de votre base de donn�es
  $dbname = "esp_data";
// REMPLACER par l'utilisateur de la base de donn�es
  $username = "nom";
// REMPLACER par le mot de passe de l'utilisateur de la base de donn�es
  $password = "password";

Je passe par free pour ma page perso avec une base sql associée mais malgré les envoies aucune data ne s'enregistre

Je pense que le pb vient de la config

Pour info le html complet pour le transfert des données :

Voici une vue de Mysql :
Barré en noir correspond "nom" que j'ai indiqué plus haut

J'ai conscience que mes information sont certainement incomplètes mais n'hésitez pas à me demander.

Merci.

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

Difficile de te répondre, on ne voit pas ce que tu fais des données et si l'insertion en base c'est bien passé.
Il faudrait au moins donné le code de la fonction "insertReading"

Merci Terwal
Voici le code demandé :

<!--
  
-->
<?php
  $servername = "localhost";
// REMPLACER par le nom de votre base de donn�es
  $dbname = "esp_data";
// REMPLACER par l'utilisateur de la base de donn�es
  $username = "nom";
// REMPLACER par le mot de passe de l'utilisateur de la base de donn�es
  $password = "password";

  function insertReading($sensor, $location, $value1, $value2, $value3) {
    global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3)
    VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";

    if ($conn->query($sql) === TRUE) {
      return "New record created successfully";
    }
    else {
      return "Error: " . $sql . "<br>" . $conn->error;
    }
    $conn->close();
  }
  
  function getAllReadings($limit) {
    global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM SensorData order by reading_time desc limit " . $limit;
    if ($result = $conn->query($sql)) {
      return $result;
    }
    else {
      return false;
    }
    $conn->close();
  }
  function getLastReadings() {
    global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM SensorData order by reading_time desc limit 1" ;
    if ($result = $conn->query($sql)) {
      return $result->fetch_assoc();
    }
    else {
      return false;
    }
    $conn->close();
  }

  function minReading($limit, $value) {
     global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT MIN(" . $value . ") AS min_amount FROM (SELECT " . $value . " FROM SensorData order by reading_time desc limit " . $limit . ") AS min";
    if ($result = $conn->query($sql)) {
      return $result->fetch_assoc();
    }
    else {
      return false;
    }
    $conn->close();
  }

  function maxReading($limit, $value) {
     global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT MAX(" . $value . ") AS max_amount FROM (SELECT " . $value . " FROM SensorData order by reading_time desc limit " . $limit . ") AS max";
    if ($result = $conn->query($sql)) {
      return $result->fetch_assoc();
    }
    else {
      return false;
    }
    $conn->close();
  }

  function avgReading($limit, $value) {
     global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT AVG(" . $value . ") AS avg_amount FROM (SELECT " . $value . " FROM SensorData order by reading_time desc limit " . $limit . ") AS avg";
    if ($result = $conn->query($sql)) {
      return $result->fetch_assoc();
    }
    else {
      return false;
    }
    $conn->close();
  }
?>

En espérant que cela réponde à ta question.

ok, du coup qu'obtient tu dans le retour de la requête HTTP, "New record created successfully" ?

Je suis étonné que la base de donnée soit sur la même machine que tu serveur PHP.
J'aurais plus vu le même nom de domaine qu'avec ton accès PhpMyAdmin

Comment puis je avoir cette information pour le moment je sais envoyer une requête par l'ESP et j'ai un retour code 200.
Sur la partie php je suis un super débutant je ne sais pas voir comment ça se passe une fois les infos envoyées par l'ESP donc le message "new record created successfully" je ne sais pas où il doit apparaitre

En fait j'ai crée une page perso chez free j'ai mis les 4 fichiers en ayant modifié les accès comme spécifié sur le tuto
le domaine est http://nom.free.fr


la base SQL est

En fait j'ai essayé de reproduire avec le phpMyadmin de free ce que le tuto faisait avec Cpanel et bluehost
Peut être je m'y suis mal pris??

ca dépend de la librairie que tu as utilisée, tu peux donner ton code ?

Je ne me rappel plus exactement mais il y a des objets de "log" que tu peux utiliser, un peu comme error_log.
Je ne sais pas si tu as facilement accés au serveur PHP avec free.

tu as suivi quel tuto ?

Bonjour

pour ouvrir un sql avec free

  1. créer un e-mail
    2 demander en même temps de créer le site web
    3 demander en même temps la création de l’accès sql

4 aller sur sql.free.fr/phpMyAdmin/
5 se logger avec l'identifiant mail et le mot de passe associé
6 créer la base de données en entrant tous les champs avec le bon format
7 se logger en FTP (filezilla) sur le site internet avec l'email et le mot de passe
8 y déposer a la racine un fichier php qui écrira 1 enregistrement complet.
9 lancer un appel a ce fichier
10 vérifier que l'entrée a bien été créée dans la base en retournant dans phpmyadmin

si c'est fait ok tout marche ... ensuite reste a régler les appels par arduino

si une étape a été oubliée on peu pas etre sur que tout fonctionne

j'ai créé une 10zaine de site sur free avec sql associée...

exemple d'un fichier php permettant l'insertion sur une base sql

<?php 
$IP = $_SERVER["REMOTE_ADDR"];
if (isset($_GET['PassWord']) )
{
	if(isset($_GET['TmesExt'])) $TmesExt=$_GET['TmesExt']; else $TmesExt="0";
	if(isset($_GET['TmesInt'])) $TmesInt=$_GET['TmesInt']; else $TmesInt="0";
	if(isset($_GET['TmesEau'])) $TmesEau=$_GET['TmesEau']; else $TmesEau="0";
	
	if(isset($_GET['TConsJour'])) $TConsJour=$_GET['TConsJour']; else $TConsJour="1950";
    if(isset($_GET['TConsNuit'])) $TConsNuit=$_GET['TConsNuit']; else $TConsNuit="1500";
	if(isset($_GET['TConsEau'])) $TConsEau=$_GET['TConsEau']; else $TConsEau="5500";
	
	if(isset($_GET['ModeChauffage'])) $Mode=$_GET['ModeChauffage']; else $Mode="Auto";
	if(isset($_GET['Chaudiere'])) $Chaudiere=$_GET['Chaudiere']; else $Chaudiere= 0;
	if( $Chaudiere == 0) $VChaudiere="Off"; else $VChaudiere= "On";

    if ($_GET['PassWord']=="xxxxxx") // ok insertion
	{
		 mysql_connect("siteinternet.free.fr", "siteinternet", "passsite"); // Connesion à la base de données
 mysql_select_db("siteinternet"); // Sélection de la base de données
 
 // Insertion d'un enregistrement dans la table
 
 mysql_query ("INSERT INTO valxxxBDD VALUES ( Null , Now(),'$IP','$TConsNuit','$TConsJour','$TConsEau','$TmesExt','$TmesInt','$TmesEau','$Mode','$VChaudiere')");
  
 
 $reponse = mysql_query ("SELECT * FROM xxxxxBDD ORDER BY ID DESC LIMIT 1"); // Requête SQL
    
 while ($donnees = mysql_fetch_array($reponse)) // On boucle pour afficher toutes les données
 {
 echo "**|".$donnees['TconsNuit']."|".$donnees['TconsJour']."|".$donnees['TconsEau']."|".$donnees['ModeChaudiere']."|**";
 }
 mysql_close();
	}
	
	
 if ($_GET['PassWord']=="xxxxx") // ok insertion
	{
 mysql_connect("siteinternet.free.fr", "siteinternet", "passsite"); // Connesion à la base de données
 mysql_select_db("siteinternet"); // Sélection de la base de données
 

 $reponse = mysql_query ("SELECT * FROM xxxBDD ORDER BY ID DESC LIMIT 1"); // Requête SQL
    
 while ($donnees = mysql_fetch_array($reponse)) // On boucle pour afficher toutes les données
 {
 echo "**|".$donnees['TconsNuit']."|".$donnees['TconsJour']."|".$donnees['TconsEau']."|".$donnees['ModeChaudiere']."|**";
 }
 
 mysql_close();
	}
	
}else  echo 'Erreur !';


 
?>

insertion par un esp on devine les valeurs (température interne et externe sortie eau etc ..)
l'accés protégé par un champ mot de passe.
bien sur faut commencer par un truc plus simple.

ensuite on peux récupérer les données et

http://home.control.free.fr/Demos/index.php

vous pouvez jouer le control est désactivé sur cette page.


  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  ValeursBDD = "&TmesExt=" + String(TemperatureMes.Ext);
  ValeursBDD += "&TmesInt=" + String(TemperatureMes.Int);
  ValeursBDD += "&TmesEau=" + String(TemperatureMes.Eau);

  ValeursBDD += "&TConsJour=" + String(TemperatureCons.Jour);
  ValeursBDD += "&TConsNuit=" + String(TemperatureCons.Nuit);
  ValeursBDD += "&TConsEau=" + String(TemperatureCons.Eau);
  ValeursBDD += "&ModeChauffage=" + String(ModeChauffage);
  ValeursBDD += "&Chaudiere=" + String(Chaudiere); 
  String ValeursBDDLength = String(ValeursBDD.length(), DEC);

  // We now create a URI for the request

  Serial.print("Requesting POST: ");
  // We now create a URI for the request
  String url = "/xxxx/Writexxx.php";
  url += "?PassWord="+xxxxpass+"&";
  url += ValeursBDD;

  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  delay(100);


exemple d'un envoie par esp

Bonjour,
Merci à vous pour vos infos voici mes réponses

Voici le code :
StationMeteoV3DHTAirwebForum.ino (8,3 Ko)

Voici le tuto :
cloud-weather-station-esp32

J'ai suivi exactement la procédure jusqu'au point 9
J'ai les 2 php suivants qui pour moi répondent au point 9 ??
esp-databaseF.txt (4,1 Ko)
esp-post-dataFFF.txt (1,1 Ko)

Même si je dois admettre que je ne comprends bien l'utilité d'avoir 2 fichiers ( esp-database.php et esp-database) car pour moi l'objectif et de recevoir de l'ESP les données et les enregistrer dans la databas pourquoi pas un seul fichier, mais bon c'est un détail.

Par contre j'ai un gros doute le nom que je dois utiliser dans le php pour inscrire dans la database :


Nom de la base ok c'est esp_data
Pour le nom et le password j'ai mis celui qui me permet d'accéder à phpMyadmin est ce le bon??

  $servername = "localhost";
// REMPLACER par le nom de votre base de donn�es
  $dbname = "esp_data";
// REMPLACER par l'utilisateur de la base de donn�es
  $username = "nom";
// REMPLACER par le mot de passe de l'utilisateur de la base de donn�es
  $password = "password";

Oui, par contre comme tu as suivi un tuto qui n'utilise pas Free comme hébergeur, il faut aussi que tu donne le bon servername
Dans le tutoriel de Free, il spécifie quoi?

Peut tu mettre ton fichier ino, directement en tant que texte dans des balises < code>
Il n'est pas très sécuriser de télécharger des fichiers inconnus et ceux sur smartphone, ne pourront pas regarder le contenu de ton fichier.

J'ai l'impression que cela fonctionne du côté com ESP vers la page http puisque j'ai un retour code 200, sauf erreur de ma part

HTTP Response code: 200

Voici le code ino :

//ESP VROOM DA Module Baud 9600
//V2 Version OK DHT BME et air et moy le 05/10
// base de travail https://www.tingene.com/blog/index.php?article51/cloud-weather-station-esp32-esp8266
// Pour acceder à la base sql passer par free adree email et acces base sql


// Inclusion des librairies
#include <DHT.h>
#include "SdsDustSensor.h"
#include <Adafruit_BME280.h>    
#include <WiFi.h>
#include <HTTPClient.h>

//#include <Wire.h> /: Vérifier si nécessaire car librairie pour commander des com I2C


// Constantes du programme
#define brocheDeBranchementDHT            23 
#define typeDeDHT                         DHT22
#define adresseI2CduBME280                0x76            // Adresse I2C du BME280 (0x76, dans mon cas, ce qui est souvent la valeur par défaut)
#define pressionAuNiveauDeLaMerEnHpa      1024.90         // https://fr.wikipedia.org/wiki/Pression_atmospherique (1013.25 hPa en moyenne, valeur "par défaut")
#define delaiRafraichissementAffichage    1500            // Délai de rafraîchissement de l'affichage (en millisecondes)
#define delaiRafraichissementAffichage    10000  

int led = 13; 
const int rxPin = 19;
const int txPin = 18;
String sensorName = "BME280";
String sensorLocation = "Ext";



// Network credentials

const char* ssid     = "XXX";
const char* password = "XXX";


// Variable to store the HTTP request
String header;




//Votre nom de domaine avec chemin URL ou adresse IP avec chemin
const char* serverName = "http://nom.free.fr/esp-post-data.php";

// Conservez cette valeur de clé API pour être compatible avec le code PHP fourni dans la page du projet.
// Si vous modifiez la valeur apiKeyValue, le fichier PHP /esp-post-data.php doit également avoir la même clé
String apiKeyValue = "XXXXX";

// les variables suivantes sont des longueurs non signées car le temps, mesuré en
// millisecondes, deviendra rapidement un nombre plus grand que celui qui peut être stocké dans un int.
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
unsigned long httptimerDelay = 60000; // modif le 9/10 à 60 000 au lieu de 600 000 1mn ald 10mn
// Set timer to 30 seconds (30000)
//unsigned long timerDelay30s = 30000;


// Instanciation des librairies

SdsDustSensor sds(Serial1);
DHT dht(brocheDeBranchementDHT, typeDeDHT);

// Instanciation de la librairie BME280
Adafruit_BME280 bme;

// ========================
// Initialisation programme
// ========================

void setup() {

// Initialisation diode;
pinMode(led, OUTPUT); 

// Initialisation du DHT22;
dht.begin(); 

// Initialisation du moniteur;
Serial.begin(9600);

// Initialisation du controleur air;
 Serial1.begin(9600, SERIAL_8N1, rxPin, txPin);
 sds.begin();
 Serial.println(sds.queryFirmwareVersion().toString());
 Serial.println(sds.setActiveReportingMode().toString());
 Serial.println(sds.setContinuousWorkingPeriod().toString());

 
 // Initialisation du BME280
  Serial.print("Initialisation du BME280, à l'adresse [0x");
  Serial.print(adresseI2CduBME280, HEX);
  Serial.println("]");
  
  if(!bme.begin(adresseI2CduBME280)) {
    Serial.println("--> ÉCHEC…");
    while(1);                              // Arrêt du programme, en cas d'échec de l'initialisation
  } else {
    Serial.println("--> RÉUSSIE !");
  }
  Serial.println();
// Connection au reseau wifi et attribution IP
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
Serial.print("Connecté au réseau WiFi avec l'adresse IP : ");
  Serial.println(WiFi.localIP());
    //} temporaire

  

// détails : https://www.upesy.fr/blogs/tutorials/how-to-connect-wifi-acces-point-with-esp32
    Serial.println("\nConnected to the WiFi network");
    Serial.print("[+] Gateway IP : ");
    Serial.println(WiFi.gatewayIP());
    Serial.println((String)"[+] RSSI : " + WiFi.RSSI() + " dB");;


}


// ======================================
// Boucle principale (boucle perpétuelle)
// ======================================

void loop() {


digitalWrite(led, HIGH); 


// **********BMP180********************
  // Affichage de la TEMPÉRATURE
  


  
  // ****Mesure BMP****

float TEMPBMP = bme.readTemperature();
  float HUMBMP = bme.readHumidity();
  float PREBMP = bme.readPressure();

Serial.print("**BMP280** ");
Serial.print("{\"Hum\": ");
Serial.print(HUMBMP);
Serial.print(", % \"Temp\": ");
Serial.print(TEMPBMP);
Serial.print(", °C \ Pression\": ");
Serial.print(PREBMP/100);
Serial.print(" Mpa}\n");

// ****Mesure DHT****  
float HUMDHT = dht.readHumidity();
float TEMPDHT = dht.readTemperature();

Serial.print("**DHT22** ");
//Serial.print("{\"humidity\": ");
Serial.print("{\"Hum\": ");
Serial.print(HUMDHT);
Serial.print(", % \"Temp\": ");
Serial.print(TEMPDHT);
Serial.print("°C}\n");


// Affichage de la TEMPÉRATURE MOY
  Serial.print(F("Temp Moy = "));
  
  float TEMPMOY = (TEMPBMP + TEMPDHT)/2;
  Serial.print(TEMPMOY);
  Serial.print(F(" °C  "));
  float ECARTTEMP= TEMPBMP - TEMPDHT;
  Serial.print(F("Ecart "));
  Serial.print(ECARTTEMP);
  Serial.println(F(" °C"));


// Affichage du Tx Humidité moyen


  float HUMMOY = (HUMBMP + HUMDHT)/2;
  Serial.print(F("Hum Moy = "));
  Serial.print(HUMMOY);
  Serial.print(F(" %  "));
  Serial.print(F("Ecart "));
  float ECARTHUM = HUMBMP - HUMDHT;
  Serial.print(ECARTHUM);
  Serial.println(F(" %"));
  

// Calcul de la température ressentie
  float temperatureRessentieEnCelsius = dht.computeHeatIndex(TEMPDHT, HUMDHT, false); // Le "false" est là pour dire qu'on travaille en °C, et non en °F
 

Serial.print("Température ressentie DHT= "); Serial.print(temperatureRessentieEnCelsius); Serial.println(" °C");


//***Mesure de particules
PmResult pm = sds.readPm();
  if (pm.isOk()) {
    Serial.print("PM2.5 = ");
    Serial.print(pm.pm25);
    Serial.print(", PM10 = ");
    Serial.println(pm.pm10);
    //Serial.println(pm.toString());
  } 
  else {
    Serial.print("Could not read values from sensor, reason: ");
    Serial.println(pm.statusToString());
  }
delay(delaiRafraichissementAffichage/2);


//***************************************************************
// *****Partie WEB***********************************************
//***************************************************************

//Envoie une requête HTTP POST toutes les xx minutes
  if ((millis() - lastTime) > httptimerDelay) {
// Vérifier l'état de la connexion Wi-Fi
    if(WiFi.status()== WL_CONNECTED){
      WiFiClient client;
      HTTPClient http;

// Votre nom de domaine avec chemin URL ou adresse IP avec chemin
      http.begin(client, serverName);

     // Spécifiez l'en-tête du type de contenu
      http.addHeader("Content-Type", "application/x-www-form-urlencoded");

     // Préparez vos données de requête HTTP POST
      String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName
                            + "&location=" + sensorLocation + "&value1=" + String(bme.readTemperature())
                            + "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + ""; // A compléter avec les autres capteurs
      Serial.print("httpRequestData: ");
      Serial.println(httpRequestData);

// Vous pouvez commenter la variable httpRequestData ci-dessus
       // ensuite, utilisez la variable httpRequestData ci-dessous (à des fins de test sans le capteur BME280)
      //String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";

      // Send HTTP POST request
      int httpResponseCode = http.POST(httpRequestData);

      // Si vous avez besoin d'une requête HTTP avec un type de contenu : text/plain
      //http.addHeader("Content-Type", "text/plain");
      //int httpResponseCode = http.POST("Hello, World!");

// Si vous avez besoin d'une requête HTTP avec un type de contenu : application/json, utilisez ce qui suit :
      //http.addHeader("Content-Type", "application/json");
      //int httpResponseCode = http.POST("{"value1":"19","value2":"67","value3":"78"}");

      if (httpResponseCode>0) {
        Serial.print("HTTP Response code: ");
        Serial.println(httpResponseCode);
      }
      else {
        Serial.print("Error code: ");
        Serial.println(httpResponseCode);
      }
      // Free resources
      http.end();
    }
    else {
      Serial.println("WiFi Disconnected");
    }
    lastTime = millis();
  }




digitalWrite(led, LOW); 
delay(delaiRafraichissementAffichage/2);

}

Voici le code http qui repond esp-post-data.php :

<!--

-->
<?php
  include_once('esp-database.php');

 // Conservez cette valeur de cl� API pour �tre compatible avec le code ESP fourni dans la page du projet. Si vous modifiez cette valeur, l'esquisse ESP doit correspondre
  $api_key_value = "XXXX";

  $api_key= $sensor = $location = $value1 = $value2 = $value3 = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $api_key = test_input($_POST["api_key"]);
    if($api_key == $api_key_value) {
      $sensor = test_input($_POST["sensor"]);
      $location = test_input($_POST["location"]);
      $value1 = test_input($_POST["value1"]);
      $value2 = test_input($_POST["value2"]);
      $value3 = test_input($_POST["value3"]);

      $result = insertReading($sensor, $location, $value1, $value2, $value3);
      echo $result;
    }
    else {
      echo "Wrong API Key provided.";
    }
  }
  else {
    echo "No data posted with HTTP POST.";
  }

  function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }

et ensuite le insertreading dans esp-database.php en charge d'inscrire

<!--
  
-->
<?php
  $servername = "localhost";

// REMPLACER par le nom de votre base de donn es
  $dbname = "esp_data";
// REMPLACER par l'utilisateur de la base de donn es
  $username = "nom";
// REMPLACER par le mot de passe de l'utilisateur de la base de donn es
  $password = "motdepassedelabasemysql";

  function insertReading($sensor, $location, $value1, $value2, $value3) {
    global $servername, $username, $password, $dbname;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3)
    VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";

    if ($conn->query($sql) === TRUE) {
      return "New record created successfully";
    }
    else {
      return "Error: " . $sql . "<br>" . $conn->error;
    }
    $conn->close();
  }

verifier ce point

soit un email toto.tata@free.fr avec un pass : fxrxpass

mysql_connect("toto.tata.free.fr", "toto.tata", "fxrxpass"); // Connesion à la base de données
mysql_select_db("toto.tata"); // Sélection de la base de données

ensuite on insere

mysql_query ("INSERT INTO valxxxBDD VALUES ......

valxxxBDD étant le nom créé dans la base principale toto.tata

avec moins de 5 lignes de php tu vérifies l'insertion !
tant que ca ca marche pas pas la peine d'aller plus loin

au pire tu insères un ensemble de champs préfixé en dur dans le code.

Bonjour jfs,

Je te demande d'être trés indulgent je débute

J'ai crée une base Test avec 3 colonnes Id, Nom et Prenom

Voici le code que j'ai compris

<?php
 
$host="frevale.free.fr";
 
$base="frevale";
 
$passe="Motdepasse";
 
mysql_connect($host,$base,$passe);  
 
mysql_selectdb("Test");

mysql_query ("INSERT INTO Nom, Prenom VALUES MACHIN, PAUL");

?>

Déjà à ce stade est ce correct?

Maintenant question bête, pour le tester comme dois je faire je le lance à partir de l'arduino et surtout avec quelles lignes?
Merci.

Tu peux, mais le plus simple est d'utiliser le navigateur WEB de ton PC.
Lorsque tu es dans ton navigateur, tu peux appuyer sur la touche F12(mode débogage) pour afficher la fenêtre de "debug", il faut vérifier que tu es bien sur l'onglet "Network", tu saisie alors l'URL de ton script PHP dans le navigateur.
Tu verra alors le code HTTP de retour renvoyer par le serveur HTTP de free.

Voici un truc que je viens de tester et qui marche

http:// frevale.free.fr/testarduino.php?Nom=Toto&Prenom=Tata

<?php 
 
$host="sql.free.fr";
 
$base="frevale";
 
$passe="pass";
 
  //on se connecte à MySQL
  
mysql_connect($host,$base,$passe);  

 // on seléctionne la base 
 
mysql_selectdb("Test");

if(isset($_GET['Nom'])) $Nom=$_GET['Nom']; else $Nom="Vide";
if(isset($_GET['Prenom'])) $Prenom=$_GET['Prenom']; else $Prenom="Vide";
	
echo 'passage1 ok'; // a virer

// insertion

mysql_query ("INSERT INTO Test VALUES  (Now(),'$Nom','$Prenom')");

// relecture derniere entrée

$reponse = mysql_query ("SELECT * FROM Test ORDER BY ID DESC LIMIT 1"); // Requête SQL
    
 while ($donnees = mysql_fetch_array($reponse)) // On boucle pour afficher toutes les données
 {
 echo "**|".$donnees['Nom']."|".$donnees['Prenom']."|**";
 }


// on ferme la connexion à mysql
mysql_close();
 ?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
</body>
</html>

zavais oublié que le serveur sql était sql.free.fr

avec mes excuses j'ai remonté un tres vieux script sans le tester.

attention chaque " ' ( ) ou , a son importance et passe vite a la trappe donc source d'erreurs.

donc ca écrit dans la base les valeurs par la méthode get ... on peux avec post mais faut mettre les champs dans la page html .... ce qui pour un simple test est inutile.

http://frevale.free.fr/testarduino.php

écris vide dans la base ...

je conseille un ID avec auto incrementation suivi du champs date

mysql_query ("INSERT INTO Test VALUES (Null,Now(),'$Nom','$Prenom')");

Merci terwal,
Je ne connaissais pas je vais m'y intéresser en cherchant un tuto si tu en connais un je suis preneur.

Bonjour jfs59,
En regardant nos échanges je me rends compte que j'ai trop de lacunes en html..., donc je vais commencer par repartir du début et ensuite revenir vers vous avec des questions plus pertinentes.
Donc je n'abandonne pas mon projet mais je bosse de mon côté pour le moment.