Dynamisch Array aus MySQL mit PHP auslesen.

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

  • Dynamisch Array aus MySQL mit PHP auslesen.

    Guten Tag zusammen.

    Ich möchte eine dynamische Array mit PHP auslesen. Die Array ist in MySQL gespeichert. Welche Befehl kann ich nutzen?

    $variable1 ist eine Normal String.
    [COLOR=orangered]$variable2[/COLOR] ist eine Dynamisch Array.

    Eine oder mehrere "Option" über $variable1 werden in $variable2 gespeichert.

    EINGABE Formular:

    Code:
    <?php 
    if (isset($_POST['submit']) &&  isset($_POST['variable1']) || isset($_POST['variable2'])) 
    { 
      try  
         { 
          $db = new MySQLi('localhost', 'root', ' '); 
          echo 'Verbindung offen.<br>'; 
          $sql = 'INSERT INTO tabelle (variable1, variable2) VALUES (?, ?)'; 
          $kommando = $db->prepare($sql) ; 
          $kommando->bind_param('ss',  $_POST['variable1'], $_POST['variable2']); 
          $kommando->execute(); 
          echo 'SQL geschickt.<br>'; 
          $db->close(); 
          echo 'Verbindung zu.<br>'; 
         } catch (Exception $e) { 
      echo 'Fehler: ' . htmlspecialchars($e->getMessage()); 
      } 
    } 
    ?> 
    
    <form action="mysqli_prepared.php" method="post"> 
    
    Variable1:<input type="text" name="variable1" size="33" />
      
    Variable2:<select name="variable2[]" size="5" multiple> 
    <option value=""></option> 
    <option value="">Option1</option> 
    <option value="">Option2</option> 
    <option value="">Option3</option> 
    <option value="">Option4</option> 
    <option value="">Option5</option> 
    </select> 
      
    
    <input type="submit" name="submit" value="Daten speichern">
    </form>
    Mehrere Option von eine Select List werden durch eine Eingabe Formular in MySQL gespeichert.
    Danach wird diesem Info von einer Abfrage Formular abgerufen (in Kombination mit anderer Tabelle).


    ABFRAGE Formular:

    Code:
    $db = new MySQLi('localhost', 'root', '', 'datenbank');   
    $sql = 'SELECT tabelle.variable1, tabelle.variable2 FROM tabelle';   
    $kommando = $db->prepare($sql);   
    $kommando->execute();   
    $kommando->bind_result($variable1, $variable2);   
    
    While ($kommando->fetch())   
    {   
    printf('<tr><td>%s</td><td>%s</td></tr>',  
    $variable1, $variable2);   
    }   
    $db->close();
    Welchem Befehle Kann ich nutzen?
    Es gibt vielleicht einem besseren Design um dass zu verarbeiten.

    Vorschläge?

  • #2
    $kommando->bind_param liefert ein boolean wert zurück im fall, dass keine parameter gebunden wurden.
    schau bitte wie dein bind_param eine false liefert.
    es kann nicht bei 2 parameter bei denen eins Array ist 'ss' als Type declariert werden.
    Obwohl in Normalisierungs-theory die Werte von einem Array als die Zeilen in einer extratabelle mit dem fremdschlüssel zur bezogenen datensatz abgespeichert sein müssen,
    kannst du im fall, dass deine 'variable2' nie im 'where' auftaucht bzw als kompleter vergleich zu einem schon vorhandenen Aray, in einem serializiertem zustand abspeichern.
    $kommando->bind_param('ss', $_POST['variable1'], serialize($_POST['variable2']));
    in diesem fall könnte bei einem Select der vergleich von einem Array etwa so aussehen
    .... where variable2='".serialize($einanderes_array)."'
    ein Versuch die einzelne werte von dem abgespeichertem und serialisiertem Array oder Object mit Regex und Strings-Funktionen von datenbank anzusprechen, wurden aus der Performance-Sicht eine Katastrofe bedeuten.
    Slava
    bituniverse.com

    Kommentar


    • #3
      $kommando->bind_param liefert ein boolean wert zurück im fall, dass keine parameter gebunden wurden.
      Daran hatte ich nicht gedacht, aber ich bekam keine Fehler Meldung sonder nur das Wort „Array“ als Ergebnis und $variable1 war richtig eingezeigt.

      es kann nicht bei 2 parameter bei denen eins Array ist 'ss' als Type declariert werden.
      Daran hatte ich doch gedacht aber wann nicht 'ss', dann 's?'.

      Obwohl in Normalisierungs-theory die Werte von einem Array als die Zeilen in einer extratabelle mit dem fremdschlüssel zur bezogenen datensatz abgespeichert sein müssen,
      Dass könnte die Lösung sein, ich muss innerhalb die MySQL db statt auf meine PHP Code arbeiten. Die Frage dann ist: Wie kann ich meine Array (innerhalb MySQL) in ein andere Tabelle umwenden?



      kannst du im fall, dass deine 'variable2' nie im 'where' auftaucht bzw als kompleter vergleich zu einem schon vorhandenen Aray, in einem serializiertem zustand abspeichern.
      $kommando->bind_param('ss', $_POST['variable1'], serialize($_POST['variable2']));
      in diesem fall könnte bei einem Select der vergleich von einem Array etwa so aussehen
      .... where variable2='".serialize($einanderes_array)."'
      Ich hatte schon mit erfolg die Daten in die Array mit serialize( ) gespeichert, aber könnte es aus der Ausgabe Formular trotzdem nicht lesen, immer nur das Wort „Array“ würde eingezeigt. Vielleicht hatte ich den Falschen Script für den Ausgabe, ich versuche es mit:
      „where variable2='".serialize($einanderes_array)“. Für dem Ausgabe hatte ich mit UNserialize( ) versucht, ohne Erfolg.



      ein Versuch die einzelne werte von dem abgespeichertem und serialisiertem Array oder Object mit Regex und Strings-Funktionen von datenbank anzusprechen, wurden aus der Performance-Sicht eine Katastrofe bedeuten.
      Hmmm dann muss ich schon ein ganz anderes Script aussuchen!!?? Oder den Array in eine Extra Tabelle speichern?

      Mit "Regex" muss ich mir erste mal schlau machen.

      Danke für deine Gute Beitrag!

      Claude

      Kommentar


      • #4
        1)Zeig mir bitte was bei unserialisieren falsch gelaufen ist und wie du unserialisierter Array weiter verwendest.

        2)
        Tabelle1
        id |variable1
        Tabelle array
        id| id_Tabele1 |variable2
        dabei dient fremdschlüssel id_Table1 als bezug zur dem passendem Datensatz in Tabelle1
        Slava
        bituniverse.com

        Kommentar


        • #5
          OffTopic:
          ihr versteht euch gut, oder?

          Kommentar


          • #6
            OffTopic:
            eigentlich ganz gut!


            Zuletzt geändert von Muuip; 27.08.2007, 07:33.

            Kommentar


            • #7
              serialize

              Hallo Nochmal


              EINGABE MIT SERIALIZE:

              PHP-Code:
              $db = new MySQLi('localhost''root''''testarray');
                    
                    
              $sql 'INSERT INTO tabelle1 (variable1, variable2) VALUES (?, ?)';
                    
              $kommando $db->prepare($sql) ;
                    
              $kommando->bind_param('ss',  $_POST['variable1'], serialize($_POST['variable2']));
                    
              $kommando->execute();
                    echo 
              'SQL geschickt.<br>';
                    
              $db->close();

                   } catch (
              Exception $e) {
                echo 
              'Fehler: ' htmlspecialchars($e->getMessage());
                }
              }
              ?>


              <form action="mysqli_prepared2.php" method="post">

              <input type="text" name="variable1"></td></tr>

              <select name="variable2[]" size="5" multiple>
              <option value=""></option>
              <option value="option1">Option1</option>
              <option value="option2">Option2</option>
              <option value="option3">Option3</option>
              <option value="option4">Option4</option>
              <option value="option5">Option5</option>

              </select> 
              AUSGABE OHNE UNSERIALIZE: (Option 1 2 und 3 eingegeben)

              a:3: {i:0;s:7:"option1";i:1;s:7

              AUSGABE MIT UNSERIALIZE: (Option 1 2 und 3 eingegeben)

              Variable2 wird überhaupt nicht angezeigt aber keine Fehler Meldung. Hier folgt den Ausgabe Script:

              PHP-Code:
               $db = new MySQLi('localhost''root''''testarray');
                    
              $sql 'SELECT tabelle1.variable1, tabelle1.variable2 FROM tabelle1';
                    
              $kommando $db->prepare($sql);
                    
              $kommando->execute();
                    
              $kommando->bind_result($variable1$variable2);
                    

              While (
              $kommando->fetch())
                    {
                    
                    
                    
              printf ('<tr><td bgcolor="#cceedd">%s</td><td bgcolor="#cceedd">%s</td></tr>'htmlspecialchars($variable1), unserialize($variable2));

                    }
                    
                    
                    
                    
              $db->close(); 
              Ich versuche mit eine Zweite Tabelle wie empfohlen und gebe ich bald den Ergebnis zurück.

              Claude

              Kommentar


              • #8
                AUSGABE OHNE UNSERIALIZE: (Option 1 2 und 3 eingegeben)

                a:3: {i:0;s:7:"option1";i:1;s:7
                Das sieht ein blinder mitm Krückstock, dass der wert unvollständig ist. Überprüfe, wo der Rest verloren geht.

                Kommentar


                • #9
                  unserialize($variable2)
                  Da kommt ein Array raus, wie du das als String darstellen willst weiß ich nicht.
                  Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                  Kommentar


                  • #10
                    Wohl kaum, auch wenn ich mich wiederhole:
                    Falls der übergebene Sting nicht deserialisierbar ist, wird FALSE zurück

                    Kommentar


                    • #11
                      Falls der übergebene Sting nicht deserialisierbar ist, wird FALSE zurück
                      Hab ich ja nichts gegen gesagt, sollte es aber deserialisiert werden wird es trotzdem nicht funktionieren.
                      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                      Kommentar


                      • #12
                        Hm ... ich frage mal vorsichtig, welcher Typ für die Spalte in der Datenbank hinterlegt ist? Man könnte aufgrund des abgeschnittenen, serialisierten Strings fast meinen, dass hier ein zu kurzer VARCHAR Typ gewählt wurde.
                        MM Newmedia | MeinBlog

                        Kommentar


                        • #13
                          Ich versuche noch mit Normalisierung, bzw. relational Tabelle.
                          Ich habe variable2 als Array gespeichert weil ich dachte es gibt die Möglichkeit bei MySQL die Zelle in die db als SET oder ENUM zu speichern statt der normal VARCHAR.
                          Was ich hatte falsche verstanden ist dass unter ENUM und SET Mann kann so viel verschiedenen Element zum AUSWAHL haben aber im end Effekt nur EIN ist die Zelle gespeichert wird. zB.: in ein Zahlung Formular für Kredit Karte auswählen, nur eins wird gespeichert.

                          Es wäre das ich kann irgendwie dieses Script hier nutzen:
                          PHP-Code:
                          <?
                          // Liefert die Elemente eines SET- oder ENUM-Feldes
                          // als Array oder als getrennte Liste
                          function bls_enumSetDefs($tbl, $fld, $returnType = "Array") {
                              
                              global $con;
                                  
                              $it  = "SHOW COLUMNS FROM $tbl LIKE '$fld'";
                              $rst = mysql_query($it, $con) or die("FEHLER in dbBasics/bls_enumSetDefs:\n$it");
                              $it  = mysql_fetch_array($rst, MYSQL_ASSOC) or die("FEHLER in dbBasics/bls_enumSetDefs:\n$it");
                              $it = $it["Type"];
                              mysql_free_result($rst);
                              
                              $rst = explode(",", $it);
                              while ($elem = each($rst)) {
                                  $rst[$elem[0]] = str_replace("set('", "", $rst[$elem[0]]);
                                  $rst[$elem[0]] = str_replace("enum('", "", $rst[$elem[0]]);
                                  $rst[$elem[0]] = str_replace("')", "", $rst[$elem[0]]);
                                  $rst[$elem[0]] = str_replace("'", "", $rst[$elem[0]]);
                              }
                              
                              if ($returnType == "Array") {
                                  return $rst;
                              } else {
                                  return implode($returnType, $rst);
                              }
                          }
                          ?>
                          Wann ich kann mit den ober Script nichts angfangen und Dass ich möchte mehrere Element in eine Zelle speichern (geht nicht) dann muss ich doch mit relational Tabelle arbeiten.

                          Die Geschichte mit serialize ( ) ist wann Mann hat innerhalb eine Array mehrere Daten Typ, und das funktioniert wahrscheinlich wann ein Array ist direkt von ein Formular gelesen ohne das die Daten sind in ein db gespeichert. Mit eine Normal Array mit nur String war ich schon erfolgreich mit eine foreach Schleife die Array auszulesen, wäre die Array mit verschiedenen Daten Typ gewesen, müsste ich dann serialize ( ) nutzen.

                          Das ist alles schön aber meine Daten müssen in eine db gespeichert werden, also muss ich umdenken und mich auf relational Tabelle fokussieren.

                          Mein Ziel ist von eine list (<select>) in eine Formular, Daten in eine db speichern und später die wieder rufen von ein Ausgabe Formular. Meine Herausforderung momentan ist:
                          wie kann ich INSERT INTO nutzen so ich kann variable1 in Tabelle1 speichern und gleichzeitig varable2 in Tabelle2 speichern?

                          Wie kann ich das machen mit den folgenden Script?

                          PHP-Code:
                          <?php
                          if (isset($_POST['submit']) &&  isset($_POST['variable1']) || isset($_POST['variable2']))
                          {
                            try 
                               {
                                
                          $db = new MySQLi('localhost''root''''testarray');
                                echo 
                          'Verbindung offen.<br>';
                                
                          $sql 'INSERT INTO tabelle1 (variable1, variable2) VALUES (?, ?)';
                                
                          $kommando $db->prepare($sql) ;
                                
                          $kommando->bind_param('ss',  $_POST['variable1'], serialize($_POST['variable2']));
                                
                          $kommando->execute();
                                echo 
                          'SQL geschickt.<br>';
                                
                          $db->close();
                                echo 
                          'Verbindung zu.<br>';
                               } catch (
                          Exception $e) {
                            echo 
                          'Fehler: ' htmlspecialchars($e->getMessage());
                            }
                          }
                          ?>

                          <table bgcolor="#eeeeee" width="54" border="5" cellspacing="30" cellpadding="4">
                          <form action="mysqli_prepared2.php" method="post">

                          <tr><td bgcolor="#008B8B">variable1:</td><td bgcolor="#cceedd"><input type="text" name="variable1" size="33" /></td></tr>


                          <tr><td bgcolor="#008B8B">Variable2:</td><td bgcolor="#cceedd"><select name="variable2[]" size="5" multiple>
                          <option value=""></option>
                          <option value="option1">Option1</option>
                          <option value="option2">Option2</option>
                          <option value="option3">Option3</option>
                          <option value="option4">Option4</option>
                          <option value="option5">Option5</option>

                          </select></td></tr>




                           

                          <tr><td><input type="submit" name="submit" value="Daten speichern"</td><td>Muuip.com</td></tr>
                          </form>
                          </table>

                          Kommentar


                          • #14
                            Also so wie ich das sehe, handelt es sich lediglich bei $variable2 um ein Array. Du fragst Dich jetzt also, wie Du es speichern kannst.

                            Bitte den Typen des Feldes feld_2 als großes VARCHAR oder direkt als TEXT deklarieren.

                            Lösung für das Speichern:
                            PHP-Code:
                            $sql "
                                INSERT 
                                INTO " 
                            DEINE_TABELLE 
                                SET field_1 = '" 
                            $variable_1 "', 
                                    field_2 = '" 
                            serialize($variable_2) . "'"
                            Lösung für das Auslesen:
                            PHP-Code:
                            $sql "
                                SELECT field_1, field_2 
                                FROM " 
                            DEINE_TABELLE 
                                WHERE " 
                            $bla "";
                            ...
                            $row['field_2'] = unserialize($row['field_2']);

                            echo 
                            "<pre>";
                            print_r($row['field_2']);
                            echo 
                            "</pre>"
                            Das sollte Dir hoffentlich helfen. Es ist ziemlich schwer zu verstehen, was Du eigentlich möchtest. Ich gehe jetzt einfach mal davon aus, dass Du ein Array speichern und wieder auslesen möchtest ...
                            Zuletzt geändert von ezkimo; 28.08.2007, 22:30.
                            MM Newmedia | MeinBlog

                            Kommentar


                            • #15
                              Danke!

                              Genau das habe ich gesucht, nun muss ich es richtig schreiben, ich bekomme immer diesen Fehler:

                              Warning: mysqli_stmt::bind_param() [function.mysqli-stmt-bind-param]: Number of variables doesn't match number of parameters in prepared statement in C:\xampp\htdocs\mysqli_prepared3.php on line 16


                              Was mache ich falsche?

                              PHP-Code:
                              <?php
                                    $db 
                              = new MySQLi('localhost''root''''testarray');
                                    
                                   
                                    
                                    
                              $sql "INSERT INTO " tabelle1 
                                  SET field_1 = '" 
                              $variable1 "', 
                                      field_2 = '" 
                              serialize($variable2) . "'";

                                    
                                    
                              $kommando $db->prepare($sql) ;
                                    
                              $kommando->bind_param('ss',  $_POST['variable1'], $_POST['variable2']);
                                    
                                    
                              $kommando->execute();
                                    
                                    
                              $db->close();
                                  
                                   } catch (
                              Exception $e) {
                                echo 
                              'Fehler: ' htmlspecialchars($e->getMessage());
                                }
                              }
                              ?>
                               


                              <form action="mysqli_prepared3.php" method="post">

                              Variable1<input type="text" name="variable1">
                              Variable2:<select name="variable2[]" size="5" multiple>
                              <option value=""></option>
                              <option value="option1">Option1</option>
                              <option value="option2">Option2</option>
                              <option value="option3">Option3</option>
                              <option value="option4">Option4</option>
                              <option value="option5">Option5</option>

                              </select>

                              <input type="submit" name="submit" value="Daten speichern"
                              </form>
                              Muss ich Field_1 und Field_2 mit meine eigene Field Name ersetzen?
                              Oder muss ich irgenwie VALUES (?, ?) einschreiben?

                              Kommentar

                              Lädt...
                              X