Skocz do zawartości

Wysyłanie informacji do shostowanej bazy danych


Bonkers

Pomocna odpowiedź

Witam,

Mam problem z przesyłaniem informacji do shostowanej bazy danych. Bazę danych uruchomiłem na hostingu cba.pl, wcześniej przesyłałem dane do lokalnego serwera postawionego na xamppie i nie było z tym problemu. Całą procedurę wykonałem na podstawie tego co jest napisane w tym poradniku: https://electronicshobbyists.com/logging-data-to-database-using-arduino-ethernet-shield/ .

Czy w podobny sposób można wykonać zapisywanie informacji do bazy na stronie, bo nie umiem jakoś do tego dojść czy to może wogóle działać. Wszystkie pliki .php, które wrzuciłem na stronę działają prawidłowo gdy się po przez nie wpisuje dane ręcznie. Jeżeli jednak chce je wpisać za pomocą arduino, to wtedy nie działa, chociaż pokazuje że jest połączenie.

Próbowałem to też wykonać za pomocą tego poradnika: https://www.instructables.com/id/PART-1-Send-Arduino-data-to-the-Web-PHP-MySQL-D3js/ , ale też z marnym skutkiem. 

Miał ktoś kiedyś podobny problem?

Poniżej wklejam fragmenty kodów dla obu przypadków.

int SendToDatabase()
{
  unsigned long cur_time = millis();
  static unsigned long last_check;
  if(fabs(cur_time - last_check) >= 2*MIN)
  {
    if (cliente.connect("www.********.cba.pl", 80)) 
    { //Connecting at the IP address and port we saved before
      if(resume_disp == 1 || resume_disp == 2)
      {
        Serial.println("connected");
        cliente.print("GET /wr_data.php?"); //Connecting and Sending values to database
        cliente.print("temperature=");
        cliente.print(tempG, 1);
        cliente.print("&humidity=");
        cliente.print(humG);
        cliente.print("&pressure=");
        cliente.print(pressG);
      
        cliente.print("&temperature_out=");
        cliente.print(data.temperature, 1);
        cliente.print("&humidity_out=");
        cliente.print(data.humidity);
        cliente.print("&insolation=");
        cliente.print(data.insolation);
        cliente.print("&weather=");
        cliente.println(readWeatherEN(data));
      }
      else
      {
        Serial.println("connected");
        cliente.print("GET /wr_data.php?"); //Connecting and Sending values to database
        cliente.print("temperature=");
        cliente.print(tempG, 1);
        cliente.print("&humidity=");
        cliente.print(humG);
        cliente.print("&pressure=");
        cliente.println(pressG);
      }
  
      last_check = cur_time;
      cliente.stop(); //Closing the connection
      resume_connection = 1;
      return 1;
    }
    else {
      // if you didn't get a connection to the server:
      Serial.println("disconnected");
      last_check += 5*SEK;
      resume_connection = 0;
      return ERR;
    }
  }
  return 0;
}
int SendToDatabase()
{
  unsigned long cur_time = millis();
  static unsigned long last_check;
  if(fabs(cur_time - last_check) >= 1*MIN)
  {
    if (cliente.connect("http://*********.cba.pl", 80)) 
    { //Connecting at the IP address and port we saved before
      if(resume_disp == 1 || resume_disp == 2)
      {
        pdata = "temperature="+(int)tempG;
        pdata += "&humidity="+humG;
        pdata += "&pressure="+pressG;
        pdata += "&temperature_out=" + (int)data.temperature;
        pdata += "&humidity_out=" + data.humidity;
        pdata += "&insolation=" + data.insolation;
        pdata += "&weather=" + readWeatherEN(data);
        
        Serial.println("connected");
      cliente.println("POST /add.php HTTP/1.1"); 
      cliente.println("Host: http://*********.cba.pl"); // SERVER ADDRESS HERE TOO
      cliente.println("Content-Type: application/x-www-form-urlencoded"); 
      cliente.print("Content-Length: "); 
      cliente.println(pdata.length()); 
      cliente.print(pdata);
      
      }
      
      last_check = cur_time;
      cliente.stop(); //Closing the connection
      resume_connection = 1;
      return 1;
    }
        else {
      // if you didn't get a connection to the server:
      Serial.println("disconnected");
      last_check += 5*SEK;
      resume_connection = 0;
      return ERR;
    }
  }
  return 0;
}

 

Link do komentarza
Share on other sites

@krzychbowszem, masz rację, wydaje Ci się 🙂 To dotyczy metody POST a nie GET (w tym przypadku dane są przesyłane w URL-u, wysyłanie danych po nagłówkach jest niedopuszczalne czyli content-length byłby zawsze równy 0.

@Bonkers: prawidłowe minimalne informacje wysłane do serwera wyglądają tak:

GET /costam.php?param1=costam&param2=costam&param3=costam HTTP/1.1\r\n
Host: www.jakastamstrona.tld\r\n
Connection: close\r\n
\r\n

Porównaj to z danymi które wysyłasz do cba.pl. Skąd np. serwer będzie wiedział że trzeba te wyniki przesłać do Twojej strony, a nie sąsiada? Pamiętaj, że na jednym adresie IP stoi kilka (a jak znam życie i cba to kilkaset) różnych stron...

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Póki co, zrobiłem to w ten sposób i dalej nie działa

 if (cliente.connect("www.********.cba.pl", 80)) 
    { //Connecting at the IP address and port we saved before
      if(resume_disp == 1 || resume_disp == 2)
      {
  
        Serial.println("connected");
        cliente.print("GET /wr_data.php?"); //Connecting and Sending values to database
        cliente.print("temperature=");
        cliente.print(tempG, 1);
        cliente.print("&humidity=");
        cliente.print(humG);
        cliente.print("&pressure=");
        cliente.print(pressG);
      
        cliente.print("&temperature_out=");
        cliente.print(data.temperature, 1);
        cliente.print("&humidity_out=");
        cliente.print(data.humidity);
        cliente.print("&insolation=");
        cliente.print(data.insolation);
        cliente.print("&weather=");
        cliente.print(readWeatherEN(data));
        cliente.println( " HTTP/1.1\r\n");
        cliente.println( "Host: www.********.cba.pl\r\n" );
        cliente.println( "Connection: close\r\n" );
        cliente.println("\r\n");
    
      }

 

Link do komentarza
Share on other sites

(edytowany)

@ethanak Poprawiłem i dalej nic

   if (cliente.connect("www.*******.cba.pl", 80)) 
    { //Connecting at the IP address and port we saved before
      if(resume_disp == 1 || resume_disp == 2)
      {
  
        Serial.println("connected");
        cliente.print("GET /wr_data.php?"); //Connecting and Sending values to database
        cliente.print("temperature=");
        cliente.print(tempG, 1);
        cliente.print("&humidity=");
        cliente.print(humG);
        cliente.print("&pressure=");
        cliente.print(pressG);
      
        cliente.print("&temperature_out=");
        cliente.print(data.temperature, 1);
        cliente.print("&humidity_out=");
        cliente.print(data.humidity);
        cliente.print("&insolation=");
        cliente.print(data.insolation);
        cliente.print("&weather=");
        cliente.print(readWeatherEN(data));
        cliente.println( " HTTP/1.1");
        cliente.println( "Host: www.*******.cba.pl" );
        cliente.println( "Connection: close" );
        cliente.println();
    
      }
   }

 

Próbowałem też zrobić tak jak @krzychb radził, ale też ni widać efektu

if (cliente.connect("www.*********.cba.pl", 80)) 
    { //Connecting at the IP address and port we saved before
      if(resume_disp == 1 || resume_disp == 2)
      {
        pdata = "temperature="+(int)tempG;
        pdata += "&humidity="+humG;
        pdata += "&pressure="+pressG;
        pdata += "&temperature_out=" + (int)data.temperature;
        pdata += "&humidity_out=" + data.humidity;
        pdata += "&insolation=" + data.insolation;
        pdata += "&weather=" + readWeatherEN(data);
        
        Serial.println("connected");
        
        cliente.print("POST /add.php HTTP/1.1\r\n"); 
      cliente.print("Host: www.*********.cba.pl\r\n"); // SERVER ADDRESS HERE TOO
      cliente.print("Content-Type: application/x-www-form-urlencoded\r\n"); 
      cliente.print("Content-Length: "); 
      cliente.print(pdata.length() + (String)"\r\n" + (String)"Connection: close\r\n\r\n"); 
      cliente.print(pdata);

 

Edytowano przez Bonkers
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.