Sending data to database

Hello all,
I'm stuck on my project wondering if any of you could help
I am trying to set up my arduino/wifi101 to connect and send sensor values to mysql database with php. Arduino code will connect but when it gets to the php it returns "Error" in the serial monitor and will not enter new data to into the database.

any help is appreciated

This is my arduino code

#include <SPI.h>
#include <WiFi101.h>

char ssid[] = "MYSSID";                     // your network SSID (name)
char pass[] = "MYPASS";       // your network key
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

// Initialize the WiFi client library
WiFiClient client;

// server address:
char server[] = "www.MYDOMAIN.com/";


unsigned long lastConnectionTime = 0;            // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 20L * 1000L; // delay between updates, in milliseconds

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  // attempt to connect to WiFi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, keyIndex, pass);

    // wait 10 seconds for connection:
    delay(5000);
  }
  // you're connected now, so print out the status:
  printWiFiStatus();
}

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if ten seconds have passed since your last connection,
  // then connect again and send data:
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
  }

}

// this method makes a HTTP connection to the server:

void httpRequest() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  delay(1000);
  if (client.connect(server, 80)) {
    Serial.println("connecting...");

    // send the HTTP PUT request:
   
   
    client.println("GET /write.php?fermset=");
    client.print(Temp01SetPoint);
    client.print("&fermcur=");
    client.print(sensors.getTempFByIndex(0));
    client.print("&glyset=");
    client.print(GLYSetPoint);
    client.print("&glycur=");
    client.print(sensors.getTempFByIndex(1));
    client.print("&gravity=");
    
    client.println("HTTP/1.1");
    client.println("Host: http://www.MYDOMAIN.com"); // SERVER ADDRESS
    client.println( "Content-Type: text/php" );    
    client.println("Connection: close");
    client.println();
    client.println();
   
    
    // note the time that the connection was made:
    lastConnectionTime = millis();
  }
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
 delay(10000);
}


void printWiFiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

when i visit www.mydomain.com/write?fermset=&fermcur=&glyset=&glycur= in my browser it will enter the values into the database.

this is my php

 <?php
$servername = "localhost";
$username = "MYUSERNAME";
$password = "MYPASSWORD";
$dbname = "MYDATABASE";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO MYDATABASE (id, Time, fermset, fermcur, glyset, glycur, gravity)
VALUES (NULL, CURRENT_TIMESTAMP,'".$_GET["fermset"]."', '".$_GET["fermcur"]."', '".$_GET["glyset"]."', '".$_GET["glycur"]."','".$_GET["gravity"]."')";

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




?>

I did not read it all but this red part seems fishy

    client.print[color=red]ln[/color]("GET /write.php?fermset=");

and you are missing the gravity value and HTTP/1.1 is directly stuck after the gravity=

    client.print("&gravity=");
    client.println("HTTP/1.1");

i would suggest you print in the console exactly what you are sending to the client to see if it's a well formed GET request

also your comments do not match the code

    // wait 10 seconds for connection:
    delay(5000);

and in const unsigned long postingInterval = 20[color=red]L[/color] * 1000[color=red]L[/color]; You should use UL instead of L to denote unsigned long

J-M-L:
Would client.print be better?

    client.print[color=red]ln[/color]("GET /write.php?fermset=");

This returns a blank gravity value which is what I was going for. Should I add a few blank client.print prints in between that and the http/1.1

    client.print("&gravity=");

client.println("HTTP/1.1");

    client.print("&gravity=");
    
    client.println("HTTP/1.1");

In my sketch I have a space between the end of the POST command and the 'HTTP/1.1'. If I remove that space, I get

HTTP Error 400. The request verb is invalid.

Is that the issue you have? i.e. should it be

client.println(" HTTP/1.1");

If not that, can you find out more about the error? Is it an HTTP error or an SQL error? Your SQL query has some pretty complex stuff in it, have you tested it direct in your database outside of Arduino?

The arduino sketch is connecting the error I am getting is from the php returning "error" instead of "new record created"

Yes, I hoped the error from php (or MySQL) would say something other than just 'error'...
Anyway this looks wrong

$sql = "INSERT INTO MYDATABASE (id, Time, fermset, fermcur, glyset, glycur, gravity)...

you should be inserting a row into a database table not directly into the database name 'mydatabase'

quilkin:
Yes, I hoped the error from php (or MySQL) would say something other than just 'error'...
Anyway this looks wrong

$sql = "INSERT INTO MYDATABASE (id, Time, fermset, fermcur, glyset, glycur, gravity)...

you should be inserting a row into a database table not directly into the database name 'mydatabase'

That's a typo it is being inserted into the table not the database

first test your PHP form a web browser; make sure the URL the way you intend to reach out to your server is working and properly inserting the info in the Database. that will ensure your PHP and web server settings are correct and what the properly formatter URL needs to look like.

URL will probably need to look something like this

[color=purple]www.domain.com[/color][color=blue]/write.php?fermset=[color=green]10[/color]&fermcur=[color=green]20[/color]&glyset=[color=green]50[/color]&glycur=[color=green]33[/color]&gravity=[color=green]12[/color]

then open a telnet session to your web server
find out exactly what needs to be sent to your server (i.e. with the right header etc) for the GET request to work

it will probably need to look something like this

[color=teal]--------------------------------[/color]
[color=blue]GET /write.php?fermset=[color=green]10[/color]&fermcur=[color=green]20[/color]&glyset=[color=green]50[/color]&glycur=[color=green]33[/color]&gravity=[color=green]12[/color] HTTP/1.1
Host: [color=purple]www.domain.com[/color]
User-Agent: Arduino
Connection: close[/color]
[color=red]<empty line needed here>[/color]
[color=teal]--------------------------------[/color]

--> This is what your arduino code will need to send, with proper line returns etc