| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

11-02-2009, 23:57
|
|
heisti
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 15
|
|
checkboxen auf checked setzen (Edit-Formular)
Hallo,
eine Anfängerfrage. Es geht schon damit los, das ich gar nicht genau weiß, in welchem Themenbereich ich schreiben soll.
Ich habe mit Hilfe von mehreren Checkboxen in einem Formular Werte in einen DB geschrieben. Die Checkboxen haben alle den gleichen Namen - z. B. tiere[]. Das gebildete Array habe ich mit implode zerlegt und jeweils mit <br /> versehen, damit ich die Werte anschließend an anderer Stelle untereinander darstellen kann.
Jetzt möchte ich ein Formular haben, in dem die bereits schon mal ausgewählten Checkboxen beim Aufrufen auf checked stehen. Vielleicht sollte ich noch dazusagen, dass es sich um recht viele Werte handelt.
Ich habe keinen blassen Schimmer ob das überhaupt geht und auch keinen Ansatz. Hat jemand eine Idee und kann mir evtl. helfen?
Vielen Dank
Heisti
Geändert von heisti (12-02-2009 um 00:28 Uhr)
|

12-02-2009, 00:18
|
|
php_fussel
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 120
|
|
checked="checked"
Guckst Du hier!
... ein bischen Arbeit sollte man sich schon machen!
edit: Jetzt versteh ich erst mal was Du meinst. In dem Fall müßten die ausgewählten und in der DB gespeicherten Werte wieder ausgelesen werden und die betreffenden checkboxen dann wie oben erläutert auf checked gesetzt werden! Aber ich bin jetzt müde und muss ins Bett  ...
edit: Da ist doch noch einer wach  ...
Geändert von php_fussel (12-02-2009 um 00:27 Uhr)
|

12-02-2009, 00:20
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Die Werte aus der DB auslesen und wenn der da als markiert drin steht, halt
<input type="checkbox" checked="checked" />
ausgeben - also das checked-Attribut hinzufügen.
|

12-02-2009, 00:40
|
|
heisti
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 15
|
|
@php_fussel
genau das ist mein Problem. In der DB steht jetzt z. B. Hund<br />Katze<br /> (in einer Zelle).
In meinem Formular habe ich dann z. B. die Checkboxen mit Hund, Katze, Maus, Regenwurm
Kann man jetzt mit irgendeiner Funktion aus dem DB-Eintrag wieder ein Array machen (explode??) und irgendwas in die Checkbox-Zeile schreiben, damit automatisch Hund und Katze als checked markiert werden?
Der Anwender soll ja in dem Edit-Formular die Möglichkeit haben sein bisherigen Eingaben zu ergänzen bzw. schon ausgewählte Sachen auch wieder abwählen zu können.
Ich weiß nicht, wie ich es anders erklären soll.
Danke für Eure Überlegungen
Heisti
|

12-02-2009, 02:04
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Original geschrieben von heisti
genau das ist mein Problem. In der DB steht jetzt z. B. Hund<br />Katze<br /> (in einer Zelle).
|
Dieses Problem solltest du zuerst beheben - das ist naemlich eine ganz bescheidene Datenstruktur!
Beschaeftige dich mit dem Stichwort Normalisierung;
und schau dir ggf. auch die Spaltentypen ENUM und SET an, die MySQL anbietet.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

12-02-2009, 09:17
|
|
php_fussel
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 120
|
|
Zitat:
|
Das gebildete Array habe ich mit implode zerlegt und jeweils mit <br /> versehen, damit ich die Werte anschließend an anderer Stelle untereinander darstellen kann.
|
Guten Morgen, wie unser Herr wahsaga schon sagt, ist die Datenstruktur innerhalb Deiner Datenbank mehr als Bescheiden.
Zitat:
|
Kann man jetzt mit irgendeiner Funktion aus dem DB-Eintrag wieder ein Array machen
|
Wenn Du Daten aus eine Datenbank holst, dann liegen diese automatisch als array vor (1 Zeile mit mehreren Datensätzen). Das array ist dann wie Deine Datenbank aufgebaut (wenn Du alles holst --> select * from ...), d.h. erstes Feld in der Datenbank ist z.B. die ID, dann hat das Daten-array am index 0 (datenarray[0]) halt die ID usw., wodrauf man dann zugreifen kann (for-Schleife, foeach-Schleife, direkt per wert10=datenarray[9]!
Versuch: Alle Werte der Checkboxen bekommen innerhalb der Datenbank schon mal eine eigene Spalte ... also eine für Hund, eine für Katze usw. ( ID etc. ... ich weiss nicht genau, was der Zweck ist) oder Tier1, Tier2, ...! Wenn nun Dein (teil-) ausgefülltes Formular abgeschickt wird, dann nimmst Du die einzelnen 'values' der checkboxen entgegen und schreibst diese in die Datenbank in das dafür vorgesehene Feld. Nun kannst Du das Feld einfach mit true füllen (boolean --> Hund, Katze, ...), wenn die betreffende Checkbox ausgefüllt wurde, ansonsten false oder Du schreibst den value in das jeweilige Feld (Tier1 bekommt Hund, Tier2 bekommt - , Tier 3 bekommt Maus, ...).
Vielleicht kannst Du damit schon mal was anfangen ... ich muss jetzt erst mal frühstücken und noch Bewerbungen schreiben.
Gruß php-fussel
|

12-02-2009, 09:42
|
|
heisti
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 15
|
|
Guten Morgen, guten Appetit beim Frühstück und viel Erfolg bei der Bewerbung.
Das Problem ist, dass ja breits alles so ist wie es ist. Ich müsste also erst mal grundsätzlich alles wieder umbauen und eine neue Tabelle mit mehr als 300 Spalten anlegen. Keine so prickelnde Vorstellung.
Gibt es keine Möglichkeit den Inhalt eines Array auf einen bestimmten Wert zu überprüfen? Also so was wie if §tiere[] == "maus"
Danke für Eure Bemühungen!
Gruß
Heisti
|

12-02-2009, 10:03
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
in_array(), array_search(), selber mal ins Manual schauen
|

12-02-2009, 10:27
|
|
php_fussel
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 120
|
|
PHP-Code:
$such_array = array("Ente", "Maus", ...);
$gefunden=0;
for($i =0; $i < count($daten_array_aus_DB;$i++){
for($a=0;$a < count($such_array);$a++){
if($daten_array_aus_DB[$i] == $such_array[$a]{
$checked_array[$gefunden]=$daten_array_aus_DB[$i] ;
$gefunden++;
}
}
}
... nur eben schnell runtergetippt und NICHT getestet (bevor ich hier zerissen werde  ). Es mit den php-Funktionen zu machen, um ein array auszulesen ist eleganter ... aber zum Üben solltest Du Dir diese Vorgehensweise (erst) mal ansehen.
Das $checked_array würde/müßte dann die ausgewählten Daten enthalten, die Du dann ausgeben kannst ...
PHP-Code:
for($x =0; $x < count($checked_array);$x++){
echo checked_array[$x]."<br>";
}
Gruß php_fussel
Geändert von php_fussel (12-02-2009 um 10:30 Uhr)
|

12-02-2009, 14:21
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Original geschrieben von heisti
Das Problem ist, dass ja breits alles so ist wie es ist.
|
Dann ist jetzt der Zeitpunkt, es zu aendern.
Ein gutes Datenmodell ist die Basis jedes vernuenftigen Scripts oder Programms.
Zitat:
|
Ich müsste also erst mal grundsätzlich alles wieder umbauen und eine neue Tabelle mit mehr als 300 Spalten anlegen.
|
Das klingt auch wieder bloedsinnig - und ganz und gar nicht so, als ob du dich mit dem Stichwort Normalisierung auseinandergesetzt haettest.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

12-02-2009, 15:14
|
|
dani_o
PHP Senior
|
|
Registriert seit: Jun 2003
Ort: Lichtenstein/Sa.
Beiträge: 1.599
|
|
da muss ich wahsaga zustimmen - was spricht dagegen ein script zu progen was die derzeitige db ausliest und eine neue automatisch erstellt? anhand ner guten programmierung = ne arbeit von 10 min und du musst nich alle inhalte von hand eingeben - überleg dir nur vorher ne vernünftige struktur und überdenke, was du später noch brauchen könntest ...
__________________
Signatur-Text ...
|

12-02-2009, 23:18
|
|
heisti
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 15
|
|
Erst mal vielen Dank für Eure Bemühungen. Ich muss gestehen, dass Ihr mein Wissen bei weitem überschätzt. Wie ich oben schon schrieb, bin ich Anfänger und muss erst noch in die Strukturen reinwachsen. Wenn ich weiß was ich hier überhaupt mache und was man alles machen kann, dann werden auch die Abläufe und der Code geschmeidiger.
Mit einem Freund habe ich nun folgendes geschnitzt:
PHP-Code:
$tierarten=Array('hund', 'katze', 'maus', 'regenwurm', 'ratte');
$ergebnisliste_tierhalter = $data["tiere"];
$ergebnis_array=explode("<br />",$ergebnisliste_tierhalter);
Und für die Checkboxen:
PHP-Code:
<? foreach($tierarten as $tiere)
{
?>
<input type="checkbox" name="tiere[]" value="<?php echo $tiere;?>"
<?php if (in_array($tiere, $ergebnis_array)){ echo " checked"; } ?> />
<?php echo $tiere; ?> <br /> <?php } ?>
Sieht bisher so aus, als wenn es funktioniert.
Viele Grüße
Heisti
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|