Ankündigung

Einklappen
Keine Ankündigung bisher.

Auswahlfeld in MYSQL abspeichern ( Array Problem )

Einklappen

Neue Werbung 2019

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

  • Auswahlfeld in MYSQL abspeichern ( Array Problem )

    Hallo zusammen,
    ich bin gerade dabei ein Formular zu basteln, in dem auch ein Auswahlfeld vorhanden ist. Dieses Auswahlfeld soll in einer mysql Datenbank abgespeichert werden.
    Alle Felder funktionieren auch ohne Problem, nur eben dieses Auswahlfenster nicht. Er speichert in der DB immer nur " Array " ab.
    Würde mich freuen, wenn einer eine Idee hat.
    Hier mein Quellcode:
    index.php:
    PHP-Code:
    <form action="speichern.php" method="post"
    <
    TABLE WIDTH="800" BORDER="1" CELLPADDING="4" CELLSPACING="4">
    <
    TR>
    <
    TD COLSPAN ="5">zertifiziert nach<br> (Mehrfachnennung mit strg-Taste möglich)</TD>
    <
    TD COLSPAN ="5" 
    <select name="zertifiziert_nach[]" size="5" multiple
    <
    option selected>ISO 9001</option>
    <
    option>ISO 14001</option>
    </
    select
    </
    TD>
    </
    TABLE
    Und hier meine speichern.php:
    PHP-Code:
    <?php 
    dyn_form
    (); 
    $server"test"
    $datenbank"test"
    $user"test"
    $passwort"test"
     
    // Zugriff auf SQL-Server  
    MYSQL_CONNECT($server$user$passwort) or die ("Datenbankserver nicht erreichbar"); 
    MYSQL_SELECT_DB($datenbank) or die ( "Datenbank nicht vorhanden"); 
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // 
    // Aktionen  fuer diese Datei 
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // 
    if (isset($_GET['action']) && $_GET['action'] != "") {  
    $action $_GET['action'];  
    }  
    elseif (isset(
    $_POST['action']) && $_POST['action'] != "") {  
    $action $_POST['action'];  
    }  
     
    switch (
    $action) { 
    case 
    "savedaten"
        
    savedaten(); 
        break; 
    default: 
        
    savedaten(); 
        break; 

    function 
    savedaten () { 
     
    $zertifiziert_nach datensaver($_POST['zertifiziert_nach']);
    $zertifiziert_nach mysql_real_escape_string($zertifiziert_nach);
     
     
    MYSQL_QUERY("INSERT INTO formular (zertifiziert_nach) 
    VALUES('
    $zertifiziert_nach')"); 
    MYSQL_CLOSE(); 
    echo 
    "Ihre Daten wurden erfolgreich gespeichert"
     

     
    //-----------------------------------------------------------------// 
    // Datensaver Regexe 
    //-----------------------------------------------------------------// 
    function datensaver($formdaten) { 
    $formdaten stripslashes($formdaten); 
    $suchmuster = array( 
    '#^\s+#'
    '#\s+$#'
    '#<#'
    '#>#'
    '#\|#'
    '#\'#'
    '#\"#'
    '#\r#'
    '#\n#' 
    ); 
    $ersatz = array("","","","","","","","",""); 
    $formdaten preg_replace($suchmuster$ersatz$formdaten); 
    return 
    $formdaten

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // 
    ?> 
     
     
    <?php
    function dyn_form()
    {
      global 
    $HTTP_POST_VARS$HTTP_GET_VARS;
      if (isset(
    $HTTP_POST_VARS)) {
    //bei POST
        
    foreach ($HTTP_POST_VARS as $key => $elem) {
        echo 
    "<input type=\"hidden\" name=\"$key\" value=\"$elem\">";
        }
      }
    //end function
     
    ?>
    Ich habe bereits den ganzen Tag gegoogelt und mich mit der Funktion implode rum geschlagen, was meines erachtens evtl. eine Lösung sein könnte ?!?!
    Bin dankbar für jede Hilfe


  • #2
    ist ja auch logisch, ein array wandelt sich nicht von selbst in einen String um. da du eine Mehrfachauswahl hast, solltest du auch nicht beide Werte in ein Feld der Datenbank schreiben. Du solltest dir mal print_r angucken, das hilft oft weiter und foreach wird dein array durchlaufen und du kannst die werte dann einzeln speichern

    Kommentar


    • #3
      serialize() unserialize() können dir helfen oder eben implode()

      Kommentar


      • #4
        Zitat von HPR1974 Beitrag anzeigen
        serialize() unserialize() können dir helfen oder eben implode()
        das halte ich für eine ganz schlechte idee, das führt zu falschem db-design

        Kommentar


        • #5
          @cycap warum?

          Kommentar


          • #6
            weil in einer normalisierten Datenbank genau 1 Wert in einem Feld steht und z.b. mit implode machst du genau das gegenteilige

            Kommentar


            • #7
              mit implode mache ich erstmal garnichts was mit einer Datenbank zu tun hat, ich verbinde lediglich Array-Elemente zu einem String.

              Kommentar


              • #8
                Ja klar, aber ich hab mich auch auf die Überschrift bezogen

                Auswahlfeld in MYSQL abspeichern ( Array Problem )

                Kommentar


                • #9
                  ja und?
                  wer sagt, dass es falsch ist eine kleine Anzahl von Werten in ein Feld zu schreiben, zB mit serialize()? oder implode() und es später wieder auszulesen?

                  Kommentar


                  • #10
                    Weil genau das zu einer nicht normalisierten Datenbank führt und eine normalisierte Datenbank ist keine fortschrittliche Sache, sondern eine Grundlage! Deine methode funktioniert zwar, ist aber mit Sicherheit nicht der richtige Weg.

                    Kommentar


                    • #11
                      Danke für die Belehrung...
                      Im vorliegenden Problem kann das Sinn machen.

                      btw. gibt es unter MySQL auf den Datentyp SET, der genau das macht...
                      und es ist für kleine MEngen von Daten gedacht....

                      mit der Funktion FIND_IN_SET() habe ich dann noch eine Funktion zum auffinden von Werten

                      Kommentar


                      • #12
                        Crossposting.
                        "Mein Name ist Lohse, ich kaufe hier ein."

                        Kommentar


                        • #13
                          Zitat von Chriz Beitrag anzeigen
                          Crossposting.
                          Ist jetzt auch egal, wir weichen eh vom Thema mehr oder weniger ab


                          @HPR1974: Wir können gerne auch noch eine Diskussion über Performance und Usability in diesem Zusammenhang führen, sorry aber bei diesem Thema bin ich empfindlich, gerade wenn ich sowas zum Beispiel in ner bekannten Typo3-Erweiterung (fe_users) finde, das die da die n:m-Beziehungstabelle einfach weggelassen haben und alle Gruppen eines Benutzers mit Komma getrennt in eine Zelle geschrieben haben und ich dann irgendwelche SQL-Stunts machen muss um die Daten zu bekommen die ich haben will

                          Kommentar


                          • #14
                            @cycap wie gesagt immer mal schauen was im gegebenen Fall wirklich sinnvoll ist. auch mal Aufwand und Nutzen betrachten...
                            Im oben beschriebenen Fall gehe ich von der Annahme aus, dass ein praktikabler Weg sein kann, verschiedene Werte in ein Feld zu schreiben und später wieder aufzulösen.

                            Eine Benutzerverwaltung würde ich dann doch anders lösen, wobei ich diese Vorgehensweise schon bei verschiedenen grösseren Projekten gesehen habe.

                            Kommentar


                            • #15
                              Zitat von HPR1974 Beitrag anzeigen
                              @cycap wie gesagt immer mal schauen was im gegebenen Fall wirklich sinnvoll ist. auch mal Aufwand und Nutzen betrachten...
                              Im oben beschriebenen Fall gehe ich von der Annahme aus, dass ein praktikabler Weg sein kann, verschiedene Werte in ein Feld zu schreiben und später wieder aufzulösen.

                              Eine Benutzerverwaltung würde ich dann doch anders lösen, wobei ich diese Vorgehensweise schon bei verschiedenen grösseren Projekten gesehen habe.
                              Ok im Fall unseres Problemkindes hier mag das vielleicht nicht dramatisch sein, trotzdem würde ich gerade einem Anfänger zu sowas nicht raten, da er sonst vielleicht dazu neigt sowas wie meinen beschriebenen Fall in Zukunft zu basteln. Wenn man sich (so wie wir) den Konsequenzen von mehreren Werten in einer Zelle bewusst ist, dann kann man über soetwas nachdenken und in manchen Fällen mag das dann vielleicht auch Sinnvoll sein, wobei ich für meinen Teil versuche sowas zu vermeiden, aber das bleibt einem dann ja selbst überlassen. Aber wie gesagt, ich glaube nicht das sich ein Anfänger den Konsequenzen bewusst ist und deshalb würde ich ihm nicht dazu raten, sonst steht er hier in ein paar Tagen oder Wochen wieder und versucht wohlmöglich einen SQL-Stunt mit unserer Hilfe hinzubekommen

                              Darauf können wir uns einigen oder?

                              Kommentar

                              Lädt...
                              X