Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbank aus variable erzeugen

Einklappen

Neue Werbung 2019

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

  • Datenbank aus variable erzeugen

    Hallo, vorweg muss ich sagen das ich mit php und datenbanken nur in berührung gekommen bin da ich eine anständige visualisierung sowie sicherung meiner sensor daten benötige. So nun zu meiner eigentlichen Frage. Ich sende mittels GET eine anfrage an meinen Server die Zeile sieht in etwa so aus:

    PHP-Code:
    http://xxx.xxx.xxx.xxx/Domain/SaveDataToDatabase.php?id=1086018586&date=2014/9/8&time=20:2:47&latitude=0000&n_s=N&longitude=0000&e_w=E&altitude=0&course=161&speed=0&type=tmp&pos=A1&trailer=10000&humidity=39&temperature=26 
    Nun möchte ich daraus eine datenbank erstellen mit dem namen welcher in id mit übergeben wird. Meine Kläglichen versuche sehen bislang so aus:

    PHP-Code:
    <?php

    include("/inc/db.inc.php");

    if(isset(
    $_GET['id'])){    

        
    $id mysql_real_escape_string($_GET['id']);
        
    $date mysql_real_escape_string($_GET['date']);
        
    $time mysql_real_escape_string($_GET['time']);
        
    $latitude mysql_real_escape_string($_GET['latitude']);
        
    $n_s mysql_real_escape_string($_GET['n_s']);
        
    $longitude mysql_real_escape_string($_GET['longitude']);
        
    $e_w mysql_real_escape_string($_GET['e_w']);
        
    $altitude mysql_real_escape_string($_GET['altitude']);
        
    $course mysql_real_escape_string($_GET['course']);
        
    $speed mysql_real_escape_string($_GET['speed']);
        
    $type mysql_real_escape_string($_GET['type']);
        
    $pos mysql_real_escape_string($_GET['pos']);
        
    $trailer mysql_real_escape_string($_GET['trailer']);
        
    $humidity mysql_real_escape_string($_GET['humidity']);
        
    $temperature mysql_real_escape_string($_GET['temperature']);
        
        
    print_r($id);
        
        
    $SQL="CREATE TABLE IF NOT EXISTS '$id' (
            'myindex' INT(255) NOT NULL auto_increment,
            'id' INT NOT NULL,
            'date' VARCHAR(100) NOT NULL,
            'time' VARCHAR(100) NOT NULL,
            'latitude' INT NOT NULL,
                'n_s' VARCHAR(30) NOT NULL,
            'longitude' INT NOT NULL,
                'e_w' VARCHAR(30) NOT NULL,
            'altitude' INT NOT NULL,
            'course' INT NOT NULL,
            'speed' INT NOT NULL,
            'type' VARCHAR(100) NOT NULL,
                'pos VARCHAR(100) NOT NULL,
            'trailer' INT NOT NULL,
                'humidity' INT NOT NULL,
            'temperature' INT NOT NULL,
            PRIMARY KEY (myindex) )"
        
    ;
        
        
    mysql_query($SQL);

        
    $eintrag "INSERT INTO '$id' (id,date,time,latitude,n_s,longitude,e_w,altitude,course,speed,type,pos,trailer,humidity,temperature) VALUES('$id', '$date', '$time', '$latitude', '$n_s', '$longitude', '$e_w','$altitude', '$course', '$speed', '$type', '$pos', '$trailer, '$humidity','$temperature')" or die(mysql_error());
        
    $result mysql_query($eintrag);
     
        if(
    mysql_affected_rows() == 1){
            
    $result "Daten gespeichert";
        } else 
    $result "Fehler beim speichern der Daten in der MySQL-Datenbank";
         
    } else 
    $result "Keine Daten Übergeben";
     
    print_r($result);
    ?>
    Leider erhalte ich immer wieder die Meldung "Fehler beim speichern der Daten in der MySQL-Datenbank". Hat jemand einen Tipp woran es liegen könnte ?
    Thanks in advance


  • #2
    Fehlerausgabe aktivieren, in PHP, setze das an den Scriptbeginn:

    PHP-Code:
    error_reporting(-1);
    ini_set('display_errors'1); 
    Und mysql_: http://php-de.github.io/jumpto/sql/
    (hier gibt es sonst auch das "übliche" or die("..."); -> google bzw. Doku

    Ich glaube übrigens, dass dein DB-Design falsch ist. Machst du für jedes Monat eine eigene Tabelle in deiner DB? Schau dir mal Normalisierung an. Wenn man für neue Benutzer, Zeiträume, Geräte etc.. neue Tabellen anlegen muss ist das meist ein falsches DB Design: http://www.peterkropff.de/site/mysql/normalisierung.htm

    mysql_ Erweiterung wird es übrigens nicht mehr lange geben: http://php.net/manual/en/migration55.deprecated.php

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Danke für die schneller Antwort...

      Habe die das ganze dann mal auf mysqli umgestellt.. das ergebniss ist leider noch immer das selbe.

      Ich habe mir das mit der redundanz mal zur gemüte geführt.. das konzept ist mir schon klar nur weis ich nicht ob das für mein projekt so einfach zu differenzieren ist...

      Zum besseren verständnis... Ich habe ein System mit einer zentrale und x sensoren... diese sensoren haben eine einzigartige id... die zentrale sammelt alle daten und übermittelt diese zu einem gewissen zeitpunkt und standort an den server uns speichert diese daten in der datenbank... jeder dieser Sensoren repräsentiert eine tabelle (so meine annahme) über die position sowie zeit und datum können die werte dann gesammelt weiterverarbeitet werden...

      PHP-Code:
      <?php
      error_reporting
      (-1); 
      ini_set('display_errors'1);  

      $mysqli = new mysqli();

      /* check connection */
      if ($mysqli->connect_errno) {
          
      printf("Connect failed: %s\n"$mysqli->connect_error);
          exit();
      }

      //include("/inc/db.inc.php");

      if(isset($_GET['id'])){    

          
      $id mysqli->real_escape_string($_GET['id']);
          
      $date mysqli->real_escape_string($_GET['date']);
          
      $time mysqli->real_escape_string($_GET['time']);
          
      $latitude mysqli->real_escape_string($_GET['latitude']);
          
      $n_s mysqli->real_escape_string($_GET['n_s']);
          
      $longitude mysqli->real_escape_string($_GET['longitude']);
          
      $e_w mysqli->real_escape_string($_GET['e_w']);
          
      $altitude mysqli->real_escape_string($_GET['altitude']);
          
      $course mysqli->real_escape_string($_GET['course']);
          
      $speed mysqli->real_escape_string($_GET['speed']);
          
      $type mysqli->real_escape_string($_GET['type']);
          
      $pos mysqli->real_escape_string($_GET['pos']);
          
      $trailer mysqli->real_escape_string($_GET['trailer']);
          
      $humidity mysqli->real_escape_string($_GET['humidity']);
          
      $temperature mysqli->real_escape_string($_GET['temperature']);
          
          
      print_r($id);
          
          
      $SQL="CREATE TABLE IF NOT EXISTS '$id' (
              'myindex' INT(255) NOT NULL auto_increment,
              'id' INT NOT NULL,
              'date' VARCHAR(100) NOT NULL,
              'time' VARCHAR(100) NOT NULL,
              'latitude' INT NOT NULL,
                  'n_s' VARCHAR(30) NOT NULL,
              'longitude' INT NOT NULL,
                  'e_w' VARCHAR(30) NOT NULL,
              'altitude' INT NOT NULL,
              'course' INT NOT NULL,
              'speed' INT NOT NULL,
              'type' VARCHAR(100) NOT NULL,
                  'pos VARCHAR(100) NOT NULL,
              'trailer' INT NOT NULL,
                  'humidity' INT NOT NULL,
              'temperature' INT NOT NULL,
              PRIMARY KEY (myindex) )"
          
      ;
          
          
      $dblink "No error took place";
          
          
      mysqli->query($SQL) or die($mysqli->connect_error();
          
          
      print_r($dblink);
          
      $eintrag "INSERT INTO '$id' (id,date,time,latitude,n_s,longitude,e_w,altitude,course,speed,type,pos,trailer,humidity,temperature) VALUES('$id', '$date', '$time', '$latitude', '$n_s', '$longitude', '$e_w','$altitude', '$course', '$speed', '$type', '$pos', '$trailer, '$humidity','$temperature')" or die($mysqli->connect_error());
          
      $result mysqli->query($eintrag);
       
          if(
      mysqli_affected_rows() == 1){
              
      $result "Daten gespeichert";
          } else 
      $result "Fehler beim speichern der Daten in der MySQL-Datenbank";
           
      } else 
      $result "Keine Daten Übergeben";
       
      print_r($result);
      ?>
      Code:
      Error in query...You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1086018586' ( 'myindex' INT(255) NOT NULL auto_increment, 'id' INT NOT' at line 1

      Kommentar


      • #4
        Nach $trailer fehlt jedenfalls ein Hochkomma in deiner query.

        Wenn du echo $eintrag machst, dann fällt dir das auf, wenn du die query aufmerksam anschaust. Und dann kannst du diese fertige query zB auch direkt via copy / paste in phpMyAdmin laufen lassen etc..

        jeder dieser Sensoren repräsentiert eine tabelle (so meine annahme)
        Und eben genau so nicht. Ganz grob ist es eher so ideal, du hast eine Tabelle Sensoren und eine mit Messwerten, und über die SensorID kannst du die in ein Verhältnis bringen.

        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          1. Ein Tabellen- oder Feldname darf nicht rein nummerisch sein
          2. Tabellen- und Feldnamen sind Identifier und gehören nicht in Hochkommata, sondern in Backticks
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Zitat von lstegelitz Beitrag anzeigen
            1. Ein Tabellen- oder Feldname darf nicht rein nummerisch sein
            2. Tabellen- und Feldnamen sind Identifier und gehören nicht in Hochkommata, sondern in Backticks

            Gerade getestet, über den numerischen Tabellennamen beschwert sich MySQL nicht.
            Aber wie du sagst, die Backticks machen's.

            PHP-Code:
            'pos VARCHAR(100) NOT NULL, 
            Da würde sonst auch noch was fehlen.




            Identifiers may begin with a digit but unless quoted may not consist solely of digits.
            http://dev.mysql.com/doc/refman/5.1/en/identifiers.html
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              Zitat von gerrik Beitrag anzeigen
              Hallo, vorweg muss ich sagen das ich mit php und datenbanken nur in berührung gekommen bin da ich eine anständige visualisierung sowie sicherung meiner sensor daten benötige.


              'date' VARCHAR(100) NOT NULL,
              'time' VARCHAR(100) NOT NULL,
              'latitude' INT NOT NULL,
              'n_s' VARCHAR(30) NOT NULL,
              'longitude' INT NOT NULL,
              'e_w' VARCHAR(30) NOT NULL,
              'altitude' INT NOT NULL,
              FAIL. Datum und Zeit zerdröselt als varchar(100) geht mal gar nicht. Lat, Lon und Alt: richtigen Datenbanken haben dafür sogar *richtige* Datentypen: PostGIS kann 2,3 und 4-dimensionale Daten verarbeiten. So viel zu Deinem Vorhaben, es 'anständig' zu machen.
              Den restlichen Pfusch haben Dir ja schon andere erklärt.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Zitat von VPh Beitrag anzeigen
                Gerade getestet, über den numerischen Tabellennamen beschwert sich MySQL nicht.
                Aber wie du sagst, die Backticks machen's.
                Stimmt, grad nochmal getestet... nichtsdestotrotz sollte man sowas vermeiden, schon aus Gründen der Lesbarkeit und des Verständnisses (ein Name sollte Aussagekraft besitzen, was bei reinen Ziffernangaben nicht der Fall ist)
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  latitude, longitude und altitude solltest du definitiv nicht als INT speichern. Am einfachsten nutzt du VARCHAR dafür.
                  Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

                  Kommentar

                  Lädt...
                  X