tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
315
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von atlantyz
    atlantyz atlantyz ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Ort
    Wetzlar (Hessen)
    Beiträge
    147
    Hallo zusammen,

    ich hänge mal wieder an einem Problem fest und weiß grad nicht, wie ich es angehen soll, denke ich hab mal wieder einen Denkfehler:

    Also ich hab zwei Arrays. In dem einen stehen Werte aus einem Formular, die per POST geschickt wurden, in dem anderen stehen die Spaltenüberschriften meine SQL- Tabelle.

    Nun habe ich folgendes Problem: in dem Formular gibt es Checkboxen (ca. 30 Stück). Wenn sie deaktiviert werden, soll eine "0" in die Datenbank geschrieben werden, bei Aktivierung eine "1". Bei Aktivierung ist das kein Problem, da ich ja in mein Array ein "on" geschrieben bekomme. Wenn die Checkbox deaktiviert ist, bekomme ich den Checkbox- Namen ja erst gar nicht übermittelt.

    Da es so viele sind und ich nicht alle prüfen will ob es sie gibt oder nicht, war die Idee die vorhandenen Spaltenüberschriften meiner Tabelle auszulesen (bis auf 3 Felder sind die identisch mit den Formularfeldnamen) und dann zu prüfen, ob es das Feld eig. geben sollte oder nicht.

    Und da hänge ich einfach fest.

    Ich hab mal folgendes gebastelt:

    PHP-Code:
        $spalten = array();
        
        
    db_connect();
        
    $sqlab "Describe mod_stamm_anb";
        
    $ergab mysql_query($sqlab);
        
    mysql_close();
        while (
    $spalte mysql_fetch_assoc($ergab)) {
            
    $spalten[$spalte["Field"]] = "";
        }
        
        
    $werte = array();
        
    $i 0;
        foreach(
    $_POST as $variable) {
            
            
    $name array_keys($_POST);
            if (
    array_key_exists($name[$i], $spalten)) {
            if(
    strpos($name[$i], "check") || strpos($name[$i], "speichern")) {
                
    $i=$i+1;
                continue;
            }        
            if (
    $variable == "on") {
                
    $variable "1";
            } else {
                
    $variable htmlentities($variableENT_QUOTES'UTF-8');
            }
            
    $werte[$name[$i]] = $name[$i]. "= '".$variable."'";
            }
            
    $i=$i+1;
            
        }

        
        
    $timestamp time();
        
    $sql "UPDATE mod_stamm_anb SET ".implode(', ',$werte)." WHERE id = '".$_POST["id_speichern"]."'"
    Ich hab jetzt schonmal alle Werte, die sowohl übermittelt (POST) als auch in der Tabelle vorhanden sind. Aber wie bekomme ich jetzt noch die heraus, die nur in der Tabelle sind und eben nicht übermittelt wurden (also praktisch den ELSE- Zweig der unteren Foreach- Schleife)? Oder gehe ich das ganze schon falsch an?

    Ich bitte um Hilfe.
     
    Nur sprechenden Menschen kann geholfen werden...

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Kannst du nicht bei den Feldern der Tabelle einfach den Wert 0 als Standard hinterlegen? Wenn die Checkbox dann nicht markiert wurde, wird eben dieser Standardwert im Feld gespeichert.
    Geändert von tombe (23.01.12 um 16:40 Uhr) Grund: Schreibfehler
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    Avatar von atlantyz
    atlantyz atlantyz ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Ort
    Wetzlar (Hessen)
    Beiträge
    147
    Nein, es kann ja sein, dass die Felder vorher den Wert 1 hatten, dann deaktiviert werden und dann den Wert 0 bekommen sollen (Kundendaten werden überarbeitet)
     
    Nur sprechenden Menschen kann geholfen werden...

  4. #4
    Avatar von atlantyz
    atlantyz atlantyz ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Ort
    Wetzlar (Hessen)
    Beiträge
    147
    So, neuer Tag, neues Glück: ich habe heute eine Möglichkeit gefunden, wie ichs machen kann:
    ich habe die Felder der Tabelle ausgelesen und als Keys ins Array gespeichert, jeweils mit dem Wert 0. Meine POST- Werte überschreiben dann entweder (wenn vorhanden) diesen Wert 0 oder eben nicht. So habe ich alle fehlenden, die nicht übermittelt wurden auf 0 und alle, die es gibt und die einen Wert haben, nehmen den gesendeten Wert an.
     
    Nur sprechenden Menschen kann geholfen werden...

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Und damit du das ganze ohne Schlaufe machen kannst:
    PHP-Code:
    //Eingabe simulieren
    $_GET = array(
        
    'submit'=> 'submit',
        
    'field2' => 1,
        
    'name' => 'Hallo welt'
    );

    //Felder auflisten
    $fields = array('field1''field2''field3');
    // Array drehen (Feldnamen werden zu Schlüssel) und den Wert 0 zuweisen
    $default array_fill_keys($fields0);
    //Aus dem Get die Parameter ausfiltern, die vorgängig definiert wurden (Bei diesem Beispiel fällt submit und name raus)
    $valuesFromGet array_intersect_key($_GET$default);
    //Mit dem Merge die Werte des Default-Arrays mit denen aus get überschreiben
    $result array_merge($default$valuesFromGet);
    print_r($result); 
    Code :
    1
    2
    3
    4
    5
    6
    
    Array
    (
        [field1] => 0
        [field2] => 1
        [field3] => 0
    )

    Nachtrag:
    Wenn man nicht nur 0 als default ahben will und zur Sicherheit die PHP-Funktion filter_input_array() verwenden will, habe ich vor geraumer Zeit mal eine Funktion filterInputDefaults() erstellt.
    PHP-Code:
    <?php
    /**
     * filterInputDefaults
     * erweitert filter_input_array um 'default'
     * Siehe dazu auch die Doku zu filter_input_array
     * http://ch2.php.net/manual/de/function.filter-input-array.php
     * @param   int $type       Einer von INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION oder INPUT_REQUEST
     * @param   array $args
     * @return  array
     */
    function filterInputDefaults($type$whitelist ){    
        
    $myInputs filter_input_array($type$whitelist);
        
    array_walk($myInputscreate_function('&$item, $key, $args''$item = (is_null($item) && is_array($arg=$args[$key])) ? $arg["default"] : $item;'), $whitelist);
        return 
    $myInputs;
    }    
    ?>
    -> Ich werd das wahrscheinlich demnächst als Tutorial-Codeschnipsel hier eröffnen
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. [Perl] Zwei Arrays an Element 1 vergleichen
    Von chill0r55555 im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 4
    Letzter Beitrag: 15.09.09, 15:45
  2. zwei arrays vergleichen
    Von palio im Forum PHP
    Antworten: 3
    Letzter Beitrag: 01.06.08, 19:56
  3. Arrays vergleichen
    Von makitaman im Forum PHP
    Antworten: 5
    Letzter Beitrag: 02.02.06, 20:44
  4. Antworten: 1
    Letzter Beitrag: 12.08.05, 10:56
  5. Arrays vergleichen
    Von Arndtinho im Forum PHP
    Antworten: 2
    Letzter Beitrag: 30.04.05, 12:57