Arduino en php

Software die niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 43
Geregistreerd: 09 Jan 2015, 15:09

Arduino en php

Berichtdoor hv0805 » 26 Apr 2021, 16:16

Wie kan mij helpen met volgende probleem.
Ik ben een test aan opbouwen om info komende van een Arduino naar een MySQL te sturen en ook in realtime weer te geven in een webpagina.

Dit is het ino bestand:
Code: Alles selecteren
#include <Ethernet.h>
/*** Ethernet gegevens  *****/
unsigned int localPort = 8888;       // local port to listen for UDP packets
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x43 };
IPAddress dnServer(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress ip(192, 168, 0, 67);
EthernetClient client;
byte server[] = {192, 168, 0, 135}; // Rasberry Mysql
/*** Ethernet gegevens  *****/

int daginhoud;
int test;

void setup()
{
    Serial.begin(115200);
    Ethernet.begin(mac, ip, dnServer, gateway, subnet);
}

void loop()
{
  delay(1000);
  daginhoud=random(250,4500);
  test=random(10,100);
  doorsturen();
}

void doorsturen(){
   //Serial.println("connecting...");
 client.connect(server, 80);

 if (client.connected())
  {
    Serial.println("Connected");
    String data="GET /rw.php?Dagrw="+String(daginhoud)+"&test="+String(test);
    client.print(data);
    client.println(" HTTP/1.1");
    client.println("Host: 192.168.0.135");
    client.println();
    Serial.println(data);
  }
}


Alles werkt hier zoals het hoort (voorlopig gebruik ik 2 random variabelen)
dit is de string die naar de webserver wordt doorgestuurd *** GET /rw.php?Dagrw=1714&test=19 ****


Het PHP bestand ziet er zo uit:

Code: Alles selecteren
<!DOCTYPE HTML>
<html>
 <head>
  <title>rw</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta name="description" content="Description" />
  <link rel="stylesheet" href="Stylesheet Location" type="text/css" />
 </head>

 <body>
   <header>  </header>
     <h1>rw</h1>

<?PHP
   include('conec2.php');

   $DagRW= $_GET["Dagrw"];
   $xx=$_GET["test"];
   echo "DagRW:". gettype($DagRW)."  Waarde: ".$DagRW."<br>";
   echo "xx:". gettype($xx)."waarde: ". $xx. "<br>";
   $sql = "INSERT INTO regenwater (Dagrw,test) VALUES ($DagRW,$xx)";
   echo $sql; // INSERT INTO regenwater (Dagrw) VALUES ()
   //$query=mysqli_query($conn,$sql);

?>
  <footer>  </footer>
 </body>
</html>


Hier zit ergens een probleem.
Als ik de commentaar voor //$query=mysqli_query($conn,$sql); weghaal dan komen de waarden voor $DagRW en $test in de database. Dus heel dit geheel werkt.
Wat er echter niet werkt zijn de lijnen:
**** echo "DagRW:". gettype($DagRW)." Waarde: ".$DagRW."<br>";
**** echo "xx:". gettype($xx)."waarde: ". $xx. "<br>";

Hier is het resultaat:
*** DagRW:NULL Waarde:
*** xx:NULLwaarde:
*** INSERT INTO regenwater (Dagrw,test) VALUES (,)

Vraag en probleem:
Waarom komen de waarden wel in de database maar kan ik ze niet op het scherm laten zien?

Wie kan mij helpen

Dank U

Herman

Advertisement

Gebruikers-avatar
Berichten: 88
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino en php

Berichtdoor FonzieBonzo » 26 Apr 2021, 21:52

Volgens mij komen de waardes juist wel op het scherm maar niet in de database


php code
$sql = "INSERT INTO regenwater (Dagrw,test) VALUES ($DagRW,$xx)";
// moet zijn (volgens mij):
$sql = "INSERT INTO regenwater (Dagrw,test) VALUES ('".$DagRW."','".$xx."')";


Gr,
Fonzie

Gebruikers-avatar
Berichten: 43
Geregistreerd: 09 Jan 2015, 15:09

Re: Arduino en php

Berichtdoor hv0805 » 27 Apr 2021, 07:53

Dank voor de reactie FonzieBonzo, maar de waarden komen wel degelijk in de database. (kan ik controleren via Phpmyadmin) Elke seconde andere waarden omdat Arduino elke seconde een random waarde genereert (doe ik nu in de testfase)

Gebruikers-avatar
Berichten: 88
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino en php

Berichtdoor FonzieBonzo » 27 Apr 2021, 20:06

Hallo Herman,


Ik kan mij niet voorstellen dat de query doet wat je wilt omdat je een string in de database wilt plaatsen en dan dient de waarde tussen enkele ' te staan.
Ook geef je niet de inhoud van de variabelen $DagRW en $xx aan de query mee maar geeft $DagRW $xx als tekst mee.

Wat je kunt doen is :
php code
$result =  mysqli_query($conn,$sql) or die(mysqli_error($connection));


Dan krijg je in ieder geval de foutmelding te zien als de query mislukt, nu krijg je waarschijnlijk een blanco scherm.

Gr,
Fonzie

Gebruikers-avatar
Berichten: 43
Geregistreerd: 09 Jan 2015, 15:09

Re: Arduino en php

Berichtdoor hv0805 » 27 Apr 2021, 22:14

Ik ga die code wel eens proberen, maar toch komt de data in MySQL.
Ik weet intussen wat het probleem is, maar ken de oplossing niet. De Arduino roept een php bestand op, op de server. Het is de server(192.168.0.135) die de info in MySQL zet. Ik roep dezelfde php op via een cliënt,( = ander op adres) maar dat is voor de server wel een andere sessie en daar zitten die variabelen niet in.
Hoe ik dit moet oplossen is mij 'og niet duidelijk maar ik dat het ergens via een Ajax push moet gebeuren die ik vanop de Arduino meestuur.
Dus, nog werk aan de winkel om het uit te zoeken.
Herman

Gebruikers-avatar
Berichten: 88
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino en php

Berichtdoor FonzieBonzo » 28 Apr 2021, 08:54

Hallo Herman,


Als je onderstaande code in je mainloop zet, dan krijg je in je arduino serialmonitor de reactie /eventuele fout van je webserver te zien :

cpp code
if (client.available()) {
char c = client.read();
Serial.print(c);
}



ps. Mocht je je Rasberry services ooit voor het grote boze internet beschikbaar maken dan dien je nog wel je huidje .php code aan te passen omdat deze kwetsbaar is voor
SQL-injection https://portswigger.net/web-security/sql-injection

Gr,
Fonzie

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten