ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
315
315
EMPFEHLEN
-
23.01.12 16:35 #1
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:
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?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($variable, ENT_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 bitte um Hilfe.Nur sprechenden Menschen kann geholfen werden...
-
23.01.12 16:39 #2
- 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.
-
23.01.12 16:48 #3
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...
-
24.01.12 11:06 #4
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...
-
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($fields, 0);
//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.
-> Ich werd das wahrscheinlich demnächst als Tutorial-Codeschnipsel hier eröffnenPHP-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($myInputs, create_function('&$item, $key, $args', '$item = (is_null($item) && is_array($arg=$args[$key])) ? $arg["default"] : $item;'), $whitelist);
return $myInputs;
}
?>---------------------------------------------------------------------------------------------------
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
-
[Perl] Zwei Arrays an Element 1 vergleichen
Von chill0r55555 im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 4Letzter Beitrag: 15.09.09, 15:45 -
zwei arrays vergleichen
Von palio im Forum PHPAntworten: 3Letzter Beitrag: 01.06.08, 19:56 -
Arrays vergleichen
Von makitaman im Forum PHPAntworten: 5Letzter Beitrag: 02.02.06, 20:44 -
zwei Unterschiedliche Arrays vergleichen und zuordnen
Von exitboy im Forum PHPAntworten: 1Letzter Beitrag: 12.08.05, 10:56 -
Arrays vergleichen
Von Arndtinho im Forum PHPAntworten: 2Letzter Beitrag: 30.04.05, 12:57





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren