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

  • VodKen
    hat ein Thema erstellt Auswahlfeld in MYSQL abspeichern ( Array Problem ).

    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

  • VodKen
    antwortet
    hier die Antwort


    PHP-Code:
    // hier wird der array in ein String umgewandelt und in einem hidden Feld abgespeichert zertifiziert_nach
    foreach ( $zertifiziert_nach as $key => $val){
    $string_komplett .= $val." ";

    print (
    "<input name='zertifiziert_nach_komplett' type='hidden' size='14' value='$string_komplett' "); 

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    geeinigt

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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?

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    @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.

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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

    Einen Kommentar schreiben:


  • Chriz
    antwortet
    Crossposting.

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    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

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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.

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    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?

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Ja klar, aber ich hab mich auch auf die Überschrift bezogen

    Auswahlfeld in MYSQL abspeichern ( Array Problem )

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    @cycap warum?

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X