Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Array In Datenbank Speichern

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Array In Datenbank Speichern

    Leute ich Brauch Eure Hilfe!!!
    Ich sitze jetzt seid 2 Wochen an dem Code doch jetzt wo ich ein Array in die Datenbank Speichern will funkt es nicht mehr er Schreibt zwar Alles in die Datenbank Allerdings bei $Model Schreibt er nur "ARRAY" in die Datenbank
    hier mein Code
    PHP-Code:
    <html>
    <?php
    session_start
    ();

    ?>
    <head>

    <title>Bestätigung</title>

    </head>

    <body>


    <?php
    $email
    =$_POST["Email"];
    // Funktion erzeugen
      
    function check_email($email)
      {
        if (!
    preg_match'/^([a-z0-9]+([-_\.]?[a-z0-9])+)@[a-z0-9äöü]+([-_\.]?[a-z0-9äöü])+\.[a-z]{2,4}$/i'$email)) return false;
        if (!
    function_exists('checkdnsrr'))
        {
          function 
    checkdnsrr($host$type)
          {
            @
    exec('nslookup -type=' $type ' ' $host$output);
            foreach (
    $output as $line)
            if (
    preg_match('/^' $host '/i'$line)) return true;
            return 
    false;
          }
        }
        
    $host substr(strrchr($email'@'), 1);
        if (
    checkdnsrr($host'MX') or checkdnsrr($host'A'))
        {
          return 
    true;
        }
        else
        {
          return 
    false;
        }
      }
    // Wenn EMail exestiert

      
    $email1 $email;

      if (
    check_email($email1)) { 
    ?>
    <meta http-equiv="refresh" content="3; URL=Bestaetigung.php"><br>
    <?php
    $ArrayDruckerID 
    $_SESSION['$ArrayDruckerID'];
    $ArrayDruckerAnzahl $_SESSION['$ArrayDruckerAnzahl'];
    $Model = array("Bestellung: ");
    $ID 0
    $anzahl count(10000);
    for(
    $i=0;$i<$Anzahl;$i++){
    $DruckerrID $ArrayDruckerID['$ID'];
    // Verbindung zum Datenbankserver
        
    mysql_connect("Server""Benutzer""PW") or die (mysql_error ());

        
    // Datenbank auswählen
        
    mysql_select_db("Datenbank") or die(mysql_error());

        
    // SQL-Query
        
    $strSQL "SELECT * FROM Drucker where ID = $DruckerrID";

        
    $abfrage "Select * FROM Drucker where ID = $DruckerrID";
        
    // Schließt die Datenbankverbindung
        
        
    $abfrage "SELECT * FROM Drucker where ID = $DruckerrID";
        
    $ergebnis mysql_query($abfrage);
        while(
    $row mysql_fetch_object($ergebnis))
        {
        
    $DraufD $row->Model;
        
    $ID $ID 1;
        
    array_push($Model,$DraufD);
    }
    }
    //#############################################
    //Abrufen der Formular Daten
    $Vorname =$_POST["Vorname"];
    $_Session['Vorname']=$Vorname;
    $Nachname =$_POST["Nachname"];
    $Anschrift =$_POST["Anschrift"];
    $Ort=$_POST["Ort"];
    $tel=$_POST["Tel"];

    $Sonstiges=$_POST["Sonstiges"];
    $timestamp time();
    $Datum date("Y.m.d - H:i"$timestamp);
    ?>
    <?php
        
    // Verbindung zum Datenbankserver
        
    mysql_connect("Server""Benutzer""PW") or die (mysql_error ());

        
    // Datenbank auswählen
        
    mysql_select_db("Datenbank") or die(mysql_error());

    $eintrag "INSERT INTO auftrag
    (Name, Anschrift, Ort, tel, email, model, Sonstiges, Datum)
    VALUES
    ('
    $Vorname $Nachname', '$Anschrift', '$Ort', '$tel', '$email', '$Model', '$Sonstiges', '$Datum')";

    $eintragen mysql_query($eintrag);


    if(
    $eintragen == true)
       {
       echo 
    "Eintrag war erfolgreich";
       }
    else
       {
       echo 
    "Fehler beim Speichern";
       }
       
    mysql_close();
       
    session_unset();
    session_destroy();
    ?>

    <br>


    Wenn die automatische Weiterleitung nicht funktioniert, <a href="Bestaetigung.php"> klicken Sie bitte hier </a>
    <?php
     
    } else 
     
    //Wenn Emai nicht exestiert
     
    { echo "Die E-Mail Adresse ".$email1." existiert NICHT!";
    ?>
    <meta http-equiv="refresh" content="3; URL=Bestellen.php?email=0"><br>
    Wenn die automatische Weiterleitung nicht funktioniert, <a href="Bestellen.php?email=0"> klicken Sie bitte hier </a>
    <?php }
    ?>
    </body>


    </html>
    PS: Ich bin ein Totaler noob in dem Gebiet
    Und Vielen Dank für eure Hilfe

  • #2
    Hinweis:

    Die älteste der drei mysql-Erweiterungen ist veraltet (mysql_*-Funktionen, nicht die MySQL-Datenbank) 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.

    Kommentar


    • #3
      Hallo,

      PHP-Code:
      $Model = array("Bestellung: "); 
      Warum machst du das so? Bzw was hast du mit $model vor?

      Deine Datenbankstruktur ist wahrscheinlich schlecht aufgebaut. Du solltest dir unbedingt das Thema Normalisierung ansehen.
      [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
      [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

      Kommentar


      • #4
        Zitat von VPh Beitrag anzeigen
        Hallo,

        PHP-Code:
        $Model = array("Bestellung: "); 
        Warum machst du das so? Bzw was hast du mit $model vor?
        Ich habe das gemacht damit ich WEIß das da wenigstens ein Eintrag drin ist, denn ich habe mittlerweile Rausgefunden das durch meine Schleife garkeine Werte einspeichert werden...

        Kommentar


        • #5
          PHP-Code:
           ich habe mittlerweile Rausgefunden das durch meine Schleife garkeine Werte einspeichert werden 
          Bedeutet? Dein Insert-Statement ist in keiner Schleife, von daher stimmt das natürlich.

          Du kannst ja mal kurz und präzise aufschreiben wie der Ablauf von deinem Programm aussehen soll, dann kann man ein bisschen besser helfen.
          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

          Kommentar


          • #6
            $Model ist ein Array, also ein Container. Wenn du dir den Wert mit echo ausgeben lässt bzw. so in die Datenbank schreibst, steht eben nur der Name des Containers, also "array" da.
            Du hast also zwei Möglichkeiten:
            1. Du sprichst die Elemente einzeln an, z.B. $Model[0]
            2. Du fügst die Elemente zusammen so wie du es gerne haben möchtest, z.B. mit [MAN]implode[/MAN]

            Dazu sei nochmal der Hinweis auf die Normalisierung gegeben. Ein ganzes Array in einer Zelle zu speichern ist (bei MySQL) keine gute Idee.

            Kommentar


            • #7
              Du kannst ein komplettes Array in deiner Datenbank speichern, indem du json_encode benutzt und das Resultat als String in der Datenbank ablegst.
              Das macht jedoch nur Sinn, wenn du dein Array später wieder komplett aus deiner Datenbank holen möchtest und nicht mit den Datenbankfunktionen auf einzelne Elemente des Arrays zugreifen möchtest.
              Ich hab dafür mal ein lauffähiges Beispiel rausgesucht, welches das unabhängig von deiner Problematik zeigt und auch demonstriert wie du PDO benutzt:
              PHP-Code:
              header("Content-Type: text/html; charset=utf-8");
              error_reporting(-1);

              //unser Testarray
              $a = array("abc äöü test",2,"und noch ein text für 1€",true);
              var_dump($a); echo "<br>";

              $js json_encode($a);
              var_dump($js); echo "<br>";

              //SQlite im Speicher erstellen
              $db = new PDO("sqlite::memory:");
              $sql "CREATE TABLE jtab (id INTEGER PRIMARY KEY  NOT NULL , json TEXT NOT NULL  DEFAULT '')";
              $db ->exec($sql);

              //json einfügen
              $sql "INSERT INTO jtab (id, json) VALUES (?,?)";
              $stmt $db->prepare($sql); //SQL_statment vorbereiten
              $stmt -> execute(array(0,$js));
              $count $stmt->rowCount();  //Anzahl der Zeilen welche eingefügt wurden

              //json auslesen
              $stmt $db -> query("SELECT json FROM jtab WHERE id = 0");
              $row $stmt->fetch(PDO::FETCH_ASSOC);

              //json-string abholen und decodieren
              $jsonString $row['json'];
              $adb json_decode($jsonString,true);
              //
              var_dump($adb); echo "<br>"
              Obigen Code unbedingt im Editor als UTF-8 ohne BOM speichern.

              LG jspit

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                Du kannst ein komplettes Array in deiner Datenbank speichern, indem du json_encode benutzt und das Resultat als String in der Datenbank ablegst.
                Das macht jedoch nur Sinn, wenn du dein Array später wieder komplett aus deiner Datenbank holen möchtest und nicht mit den Datenbankfunktionen auf einzelne Elemente des Arrays zugreifen möchtest.

                Es gibt Datenbanken, die speichern solche JSON-Daten auch binär und haben Funktionen, um auf einzelne Elemente darauf zuzugreifen. Indexbasiert, also auch sehr schnell. Das sind zum einen NoSQL-Datenbanken (MongoDB) und zum anderen kann das auch PostgreSQL (JSONB, also binäre Speicherung innerhalb der DB, ab 9.4, derzeit Beta, JSON selbst mit den passenden Funktionen ab 9.2 und verbessert in 9.3)
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar

                Lädt...
                X