Ankündigung

Einklappen
Keine Ankündigung bisher.

mySQL Datenschreiben mit GET

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

  • mySQL Datenschreiben mit GET

    so erst mal hallo,
    hier mal eine übersicht meines Projektes:
    Daten wie Temperatur aber auch auftretende Fehlermeldungen werden von einem Arduino Mega gesammelt,
    über ein SIM900 GSM Modul (mit der URL übergeben) zu einer PHP Datei gesendet und von dort in eine mySQL Datenbank gespeichert.
    Eine Android App ruft eine andere PHP Datei auf die, die Daten der Datenbank als String über ein echo der App übergiebt.

    mein Server ist : 000webhost.com
    Die Datenbak und die PHP Datei zum auslesen der Daten sind auf dem Server.

    leider sind die PHP Dateien nur mit einer https URL zu erreichen.
    Mein Arduino kann leider nur mit http Seiten umgehen.

    nur das echo auslesen klappt mit der App.

    ich hab jetzt nach anderen Servern gesucht die, die zweite PHP Datei als http beinhalten kann. Sollte leider kostenlos sein.

    Bis jetzt hab ich nichts passendes gefunden.

    jetzt meine Frage an euch geht das so einfach, wenn ja kennt ihr passende Server?
    wenn ich über eine PHP Datei eine Verbindung zu einer DAtenbank aufbaue die nicht auf dem Gleichen Server liegt was trage ich als Host ein (bissher habe ich "localhost")


  • #2
    Wieso kann Dein Androino nur http?
    Was liesst du wie mit echo aus ?

    ich hab das alles nicht verstanden, aber da weiss ich antwort:
    wenn ich über eine PHP Datei eine Verbindung zu einer DAtenbank aufbaue die nicht auf dem Gleichen Server liegt was trage ich als Host ein (bissher habe ich "localhost")
    den Hostname/die IP des entfernten Servers

    Kommentar


    • #3
      Wieso kann Dein Androino nur http?
      Ich benutze eine Bibliothek von tiny-gsm die besitzt für mein GSM Modul eben bis jetzt nur eine Funktion für http.
      Ich habs auch schon selber versucht bin aber gescheitert.

      Was liesst du wie mit echo aus ?
      moment so (die Anmeldedaten habe ich mal zensiert das giebt also ein echo aus das meine Android App dann weiterverarbeitet und anzeigt:
      (die App steht schon und macht auch schon was sie soll.)
      PHP-Code:
      <?php
      //Datenbankverbindung aufbauen
      $connection getDBConnection();

      function 
      getDBConnection(){
        
      $db_name "dbname";
        
      $mysql_username "dbusername";
        
      $mysql_password " ******* ";
        
      $server_name "localhost";
        
      $fehler1 "Fehler 1: Fehler beim aufbauen der Datenbankverbindung!";
        
      $link mysqli_connect($server_name$mysql_username$mysql_password$db_name );
        if(
      $link)                       
        {
         
      //echo "connection success";
        
      }
        else{
         
      //echo "connection not succsess";
        
      }
            if (!
      $link) {
              die(
      'Verbindung schlug fehl: ' mysqli_error());
          }

        
      /* check connection */
        
      if (mysqli_connect_errno()) {
             die(
      $fehler1);
        }
        return 
      $link;
      }
       
      //$method="";
      $method "allEntrys";
      //$method =  $_POST['method'];
      //echo $method;

      if ($method == 'allEntrys'){
         
      getAllEntrys($connection);
      }
      //Lesen der Daten aus der MySQL Datenbank mit PHP
      function getAllEntrys($connection){
        
      $sqlStmt "SELECT * FROM teat1;";
        
      $result =  mysqli_query($connection,$sqlStmt);
        
      $data = array();
        if (
      $result $connection->query($sqlStmt)) {
            while (
      $row $result->fetch_assoc()) {
              
      $temp $row["temp"];
              
      $testwert $row["testwert"];
              
      $luftfeuchtigkeit $row["luftfeuchtigkeit"];
              
      $fehler $row["fehler"];
              
      array_push($data,array("testwert"=> $testwert,"temp"=>$temp,"luftfeuchtigkeit"=>$luftfeuchtigkeit,"fehler"=>$fehler));
              
      // array_push($data,array("testwert"=> $testwert));    
            
      }
          
      $result->free();
        }
        
      closeConnection($connection);

        foreach (
      $data as $d){
          echo 
      $d["testwert"];
          echo 
      ";";
          echo 
      $d["temp"];
          echo 
      ";";
          echo 
      $d["luftfeuchtigkeit"];
          echo 
      ";";
          echo 
      $d["fehler"];
        }

      }



      function 
      closeConnection($connection){
        
      mysqli_close($connection);
      }
      ?>

      Kommentar


      • #4
        PHP-Code:
        function getDBConnection(){
          
        $db_name "dbname";
          
        $mysql_username "dbusername";
          
        $mysql_password " ******* ";
          
        $server_name "localhost"
        Zugangsdaten sollten nicht einer Funktion stehen, sondern in einer Konfigurationsdatei.

        Mysqli ist ja schon eine Klasse, warum wendest du diese nicht so an, wie es im Handbuch vorgemacht wird?
        Was passiert in der Funktion wenn es zu Fehlern kommt?
        //echo "connection not succsess";
        ist innerhalb der Funktion jedenfalls eine schlechte Variante und zudem falsches englisch(das wollte ich mir eigentlich verkneifen, aber tut so weh, dass ich es doch erwähne.).

        PHP-Code:
        function getAllEntrys($connection){
        ...
         foreach (
        $data as $d){
            echo 
        $d["testwert"];
        ... 
        Funktionen sollten immer etwas zurückgeben und nicht mit echo Ausgaben tätigen, es sei denn sie sind für die HTML Ausgabe extra geschrieben worden.

        Wenn die Datenbank nicht auf dem gleichen Host liegt, wirst du dich in in den meisten Fällen nicht verbinden können, da die Hoster das nicht zulassen, dass auf Datenbanken von aussen zugegriffen wird. Ist halt eine Sicherheitslücke, um die man sich dann auch noch kümmern müsste.
        Aber dein Hoster kann da Auskunft geben.

        Kommentar


        • #5
          Zugangsdaten sollten nicht einer Funktion stehen, sondern in einer Konfigurationsdatei.
          okay danke werde ich machen. Ich beschäftige mich erst seit kurzem mit PHP und mySQL
          Was passiert in der Funktion wenn es zu Fehlern kommt?
          //echo "connection not succsess";
          die Zeile habe ich auskommentiert, die habe ich am Anfang verwendet um überhaupt mal zu sehen ob sie geht oder nicht.
          mit Fehler gehe ich mit dieser Zeile um:
          PHP-Code:
              if (!$link) {
                  die(
          'Verbindung schlug fehl: ' mysqli_error());
              } 
          ja mein Englisch ist nicht das beste aber solange es mein Script und ich verstehe. Daran kann man noch arbeiten

          Funktionen sollten immer etwas zurückgeben und nicht mit echo Ausgaben tätigen, es sei denn sie sind für die HTML Ausgabe extra geschrieben worden.
          Ich habe mir mein Wissen darüber über mehrere YouTube Videos angeeignet und da wurde das so gemacht. Ich denke das ist eigentlich so die einfachste Möglichkeit die Daten in meine App zu bekommen.

          Wenn die Datenbank nicht auf dem gleichen Host liegt, wirst du dich in den meisten Fällen nicht verbinden können, da die Hoster das nicht zulassen, dass auf Datenbanken von außen zugegriffen wird. Ist halt eine Sicherheitslücke, um die man sich dann auch noch kümmern müsste.
          Aber dein Hoster kann da Auskunft geben.
          okay danke ich hab meinem Hoster gerade geschrieben. Hab mir jetzt auch mal (als Plan B) ein GSM Modul gekauft das hoffentlich mit https klar kommt.

          Kommentar


          • #6
            Zitat von querzu Beitrag anzeigen
            Ich habe mir mein Wissen darüber über mehrere YouTube Videos angeeignet und da wurde das so gemacht.
            Theorie und Praxis sind oft nicht das Selbe. Zur Veranschaulichung wird das manchmal gemacht um die Funktion zu erklären, das heisst aber nicht dass man das dann so übernehmen sollte. Auch im PHP Handbuch wird innerhalb von Funktionen mit echo gearbeitet um die Arbeitsweise der Funktion darzustellen, dennoch sollte man davon in einem Projekt absehen, da es zu unerwünschten Nebeneffekten führt, mal davon abgesehen, dass fast immer der Kontextwechsel ausser Acht gelassen wird.



            Kommentar


            • #7
              okay aber als Testrückmeldung (für mich) ob die Funktion soweit geht kann ich es verwenden(denke mal dafür ist es auch gesehen)?

              Ich hab mein Problem jetzt gelöst mein Hoster meinete die kann man auch als http ansprechen und geht.
              Jetzt setz ich mich ans script schön schreiben

              okay ich schau mal wie ich es mit der App auch ohne echo schaffen kann.
              Für Vorschläge bin ich gern offen.

              Kommentar


              • #8
                Zitat von querzu Beitrag anzeigen
                okay ich schau mal wie ich es mit der App auch ohne echo schaffen kann.
                Für Vorschläge bin ich gern offen.
                Am elegantesten sicher mit einer Template Engine,

                https://www.php.de/forum/webentwickl...-html-ersetzen

                und in der Wissenssammlung:
                https://php-de.github.io/

                findet sich auch immer wieder was interessantes.

                Kommentar

                Lädt...
                X