Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Probleme beim übergeben der Werte

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Probleme beim übergeben der Werte

    Hallo Leute,
    ich habe ein Problem bei meinem Arduino Projekt.
    Bei meinem Projekt werden Schneehöhe und UV-Index Werte auf meine Datenbank übergeben.

    Zuvor hatte ich nur die Schneehöhenwerte übergeben und das hat auch alles gut geklappt.
    Nun kommen die UV werte hinzu und mein Script meldet
    "Keine Werte übergeben"

    Irgendwo muss sich ein Fehler eingeschlichen haben aber ich suche schon seit Stunden vergebens nach einer Antwort

    Hier mein Script:
    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Arduino Ultra PHP</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <?php
    include("ultradb.inc.php");
    $conn mysql_connect(DB_SERVERDB_USERDB_PASSWORD);
    if(
    is_resource($conn))
    {
      
    mysql_select_db(DB_NAME$conn);
      
    mysql_query("SET NAMES 'utf8'"$conn);
      
    mysql_query("SET CHARACTER SET 'utf8'"$conn);
    }
    define("KEY","*********");
    if(isset(
    $_GET['key']))
    {
      if(
    $_GET['key'] == KEY)
      {
        if(isset(
    $_GET['schnee']) && isset($_GET['uv']))
        {
            
    $SCHNEE mysql_real_escape_string($_GET['schnee']);
          
    $UV mysql_real_escape_string($_GET['uv']);
          
    $DATUM date("Y-m-d H:i:s");
            
            
    $result mysql_query("INSERT INTO arduino_schnee (datumzeit, schnee, uv)
                  VALUES('"
    .$DATUM."', '".$SCHNEE."', '".$UV."') ") or die(mysql_error());
          
          if(
    mysql_affected_rows() == 1)
          {
            
    $result "Schneehöhe und UV Werte gespeichert";
          } else 
    $result "Fehler beim speichern der Daten in der MySQL-Datenbank";
        } else 
    $result "Keine Werte übergeben";
      } else 
    $result "Falscher Key";

     
    print_r($result);
    ?>
    </body>
    </html>

    <?php
    include("ultradb.inc.php");
     
    $q_data  mysql_query("SELECT DATE_FORMAT(datumzeit,'%d.%m.%Y') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i') AS ZEIT, schnee, uv
                            FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 1"
    ) or die(mysql_error());
    if(
    mysql_num_rows($q_data) > 0)
    {
      
    $r_data mysql_fetch_array($q_data);
      
    $DATUM  $r_data['DATUM'];
      
    $SCHNEE  number_format($r_data['schnee']);
      
    $UV  number_format($r_data['uv']);
      
    $ZEIT   $r_data['ZEIT'];
    }
    else
    {
      
    $E 1;
      
    $M "Es wurde keine Schneeh&ouml;he und UV Werte in der Datenbank gefunden!";
    }
    ?>
     
    <!DOCTYPE HTML>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="viewport" content="user-scalable=yes, width=device-width">
      <title>ARDUINO - Aktuelle Schneeh&ouml;he und UV Werte</title>
    </head>
    <body>
     
    <?php
    //Wenn Daten in der Datenbank gefunden wurden, diese ausgeben
    if(!isset($E))
    {
    ?>
      <h2>Letzte gespeicherte Schneeh&ouml;he und UV Wert</h2>
      <h3><?php echo $DATUM.", ".$ZEIT." Uhr";?></h3>
      Schneehöhe: <?php echo $schnee;?>cm
      UV Index: <?php echo $uv;?>
    <?php           
    }
    else
    {
    // Meldung ausgeben wenn noch keine Daten in der Datenbank stehen
      
    echo $M;
    }
    ?>  
     
      </body>
    </html>
    Vielen Dank schon mal fürs drübergucken


  • #2
    Ich sehe kein Formular?!
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Welches Formular? ich stehe auf dem Schlauch

      Kommentar


      • #4
        Na irgendwo müssen die GET-Parameter doch herkommen, oder nicht?
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Die Werte werde per GET-Parameter übergeben.

          PHP-Code:
              if(isset($_GET['schnee']) && isset($_GET['uv'])) 
              { 
                  
          $SCHNEE mysql_real_escape_string($_GET['schnee']); 
                
          $UV mysql_real_escape_string($_GET['uv']); 
                
          $DATUM date("Y-m-d H:i:s"); 
                   
                  
          $result mysql_query("INSERT INTO arduino_schnee (datumzeit, schnee, uv) 
                        VALUES('"
          .$DATUM."', '".$SCHNEE."', '".$UV."') ") or die(mysql_error()); 
                 
                if(
          mysql_affected_rows() == 1
                { 
                  
          $result "Schneehöhe und UV Werte gespeichert"
                } else 
          $result "Fehler beim speichern der Daten in der MySQL-Datenbank"
              } else 
          $result "Keine Werte übergeben"
          Glaub mal, dass er bei dem if abspringt, ist so blöd formatiert, dass ich nicht genau hinsehen und Klammern zählen will.

          Debugging:
          PHP-Code:
          var_dump($_GET); 
          bzw. in der URL nachsehen.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Die Parameter kommen von meinem Arduino Sketch.

            Code:
            //Schneehöhensensor mit Upload auf FTP Server
            //By B. Scheffler & F. Bamberg
            
            #include <SPI.h>
            #include <Ethernet.h>         	// library für Ethernet Funktionen
            
            
            //ETHERNET-SETTINGS
            byte mac[] 	= { 0x90, 0x00, 0x4E, 0x58, 0xA1, 0x** };	// MAC-Adresse des Arduino
            byte ip[]  	= { 192, 168, 178, 33 };                 	// IP-Adresse des Arduino
            byte gateway[] = { 192, 168, 178, 1 };                	        // Gateway
            byte subnet[]  = { 255, 255, 255, 0 };                	        // SubNet
            //byte server[]  = {81, 169, 145, 157 };                 	// IP-Adresse ursprungwetter.de bei Strato
            
            EthernetClient client;
            char host[]	= "ederseewetter.de";                  	// Domain
            char url[] 	= "/ultraarduinodb.php";     	        // Pfad zur PHP-Datei
            char key[] 	= "*******";                 	        // Kennwort aus PHP-Datei
            char serverName[] = "www.ederseewetter.de";
            char c;                                                 // Variable für Rückgabe des Servers
            long Interval  = 1;                                    	// Upload-Interval in Minuten
            
            int trigger=5;  // Der Digitale Pin5 dieser ist für das Senden des Signals zuständig
            int echo=6;     // Der Digitale Pin6 dieser ist für das Empfangen des Signals zuständig
            long dauer=0;
            long schnee=0;
            
            void setup() 
            {
             delay(1000);  
             Serial.begin (9600);
             pinMode(trigger, OUTPUT);
             pinMode(echo, INPUT);
             Serial.println("Ethernet initialisieren...");
             Ethernet.begin(mac, ip);
             Interval = Interval * 1000 * 60;                        	// Das in Minuten angegebene Interval in Millisekunden umrechnen
             delay(1000);                                            	// warten, bis Ethernet gestartet
            }
            
            void loop() 
            {
             pinMode(trigger, OUTPUT);
             digitalWrite(trigger, LOW);
             delay(2);
             digitalWrite(trigger, HIGH);
             delay(10);
             digitalWrite(trigger, LOW);
             pinMode(echo, INPUT);
             dauer = pulseIn(echo, HIGH);
             schnee = 50 - (dauer / 58);            // eschnee = 50 ist die Installationshöhe vom Sensor zu Boden. Hier 50cm. Dieser kann je nach Bedarf angepasst werden
             if (schnee >= 500 || schnee < 0)   
            {
             Serial.println("Kein Messwert");
            }
             else
            {
             Serial.print(schnee);
             Serial.println(" cm");
            }
            
            int uv_raw = analogRead(0);  // Einmal pro loop ausfuehren
            int uv = 0;                  // 0 - 11
              
              if(uv_raw < 10) uv = 0;
              else if(uv_raw < 46) uv = 1;
              else if(uv_raw < 65) uv = 2;
              else if(uv_raw < 83) uv = 3;
              else if(uv_raw < 103) uv = 4;
              else if(uv_raw < 124) uv = 5;
              else if(uv_raw < 142) uv = 6;
              else if(uv_raw < 162) uv = 7;
              else if(uv_raw < 180) uv = 8;
              else if(uv_raw < 200) uv = 9;
              else if(uv_raw < 221) uv = 10;
              else uv = 11;
              
              static unsigned long last_millis;
              if(millis() - last_millis >= 1000)
              {
                last_millis = millis();
                Serial.println(uv);
               }
            
            delay(5000);
            Daten_senden(schnee, uv);                             	// schnee an Server übertragen
            delay(5000);
            
            byte maxReads = 10; //Seconds
              while ((maxReads-- > 0) && client.connected())          	// Antwort des Servers lesen
              {
            	delay(1000);
            	while (client.available())
            	{
              	char response = client.read();
              	Serial.print(response);
            	}
              }
              client.stop();
              Serial.println("Done.");
              client.flush();
            
              delay(Interval);
            }
            /******************************
                                      	*
              Daten an Server schicken   *
                                      	*
            *******************************/
            void Daten_senden(long schnee, long uv)
            {
              if (client.connect(serverName, 80)) // Verbindung zum Server aufbauen
              {
            	Serial.println("Verbunden, Sende Daten...");
            	client.print("GET " + String(url));
            	Serial.println("GET " + String(url));
            	client.print("?schnee=");
            	Serial.print("?schnee=");
            	client.print(schnee);
            	Serial.println(schnee);
            
                    client.print("?uv=");
            	Serial.print("?uv=");
            	client.print(uv);
            	Serial.println(uv);
            
            	client.print("&key=" + String(key));
            	Serial.print("&key=" + String(key));
            	client.println(" HTTP/1.1");
            	Serial.println(" HTTP/1.1");
            	client.print("Host: " + String(host));
            	Serial.print("Host: " + String(host));
            	client.println();
            	Serial.println();
            	client.println("User-Agent: Arduino");
            	Serial.println("User-Agent: Arduino");
            	client.println("Connection: close");
            	Serial.println("Connection: close");
            	client.println();
            	Serial.println();
              }
              else
              {
            	Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
              }
            }

            Kommentar


            • #7
              Oder liegt es an der Datenbank selber? Das ist nämlich absolutes Neuland für mich.

              Diese habe ich so gefütter:

              Code:
              CREATE
              TABLE IF NOT EXISTS `arduino_schnee` (
              
              `id` bigint(11) NOT NULL AUTO_INCREMENT,
              
              `datumzeit` datetime NOT NULL,
              
              `schnee` int NOT NULL,
              
              `uv` int NOT NULL,
              
              PRIMARY KEY (`id`)
              
              ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

              Kommentar


              • #8
                Du übergibst deine Parameter falsch
                Code:
                	client.print("?schnee=");
                	Serial.print("?schnee=");
                	client.print(schnee);
                	Serial.println(schnee);
                
                        client.print("?uv=");
                	Serial.print("?uv=");
                	client.print(uv);
                	Serial.println(uv);
                
                	client.print("&key=" + String(key));
                	Serial.print("&key=" + String(key));
                Da gehört ein & vor den zweiten Parameter, kein Fragezeichen.
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  Oh man Fettes DANKE

                  Schon irgendwie peinlich

                  Naja...manchmal Tippt man stundenlang und dann sieht man den Wald vor lauter Bäumen nicht mehr

                  Kommentar


                  • #10
                    Hinweis:

                    Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
                    Choosing an API
                    Warum man mysql* generell nicht (mehr) nutzen sollte.
                    Wie man von mysql* auf PDO umsteigt
                    Wissenswertes zum Thema SQL-Injection

                    Es ist nicht mehr zeitgemäß, Anwendungslogik und Ausgabelogik zu kombinieren. Dadurch leidet die Wartbarkeit beider Komponenten. In der Regel folgen in PHP geschriebene Applikationen daher dem EVA-Muster, welches einen leicht nachvollziehbaren Datenfluss ermöglicht, besser wartbare Applikationen erzeugt und leichter von anderen Entwicklern verstanden wird. In der PHP-Welt hat sich hierauf aufbauend das (häufig falsch interpretierte) MVC-Muster [1] etabliert (siehe auch DCI oder ADR). Ganz einfach gesagt handelt es sich bei dem EVA-Muster um eine Aufteilung der Aktionen "Auswertung der Eingabeparameter", "Verarbeitung der damit verknüpften Anwendungslogik" und "Erzeugung und Übermittlung der Ausgabe". Oder vereinfacht: Erst Daten sammeln, dann daraus die Darstellung erzeugen und ausgeben. Die Verwendung einer Templateengine (mit Layout-Support) ist dafür Empfehlenswert - jedoch aber keine Voraussetzung.
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar

                    Lädt...
                    X