PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem beim speichern und abrufen von checkboxen


Stifler
29.09.2004, 12:04:15
hi

habe ein kleines problem und zwar möchte ich eine checkbox in mein formular einbauen allerdings funktionieren zwei dinge nicht.

1. wenn ich ein häckchen setze und auf speichern klicke steht in der db nix
2. schreibe ich es direkt in der db rein und lese es aus setzt er auch da kein häckchen

kann mir da jemand nen tip geben?
danke
hier der code von der box

<INPUT ID="Kontrollkästchen1" TYPE=CHECKBOX <? if($disk=="floppy"){echo "CHECKED";}?> NAME="n_disk" VALUE="floppy">

c4
29.09.2004, 12:07:24
Was nun? $n_disk oder $disk?

Außerdem solltest Du eher auf isset() (http://php.net/isset) prüfen. Ist besser.

Stifler
29.09.2004, 12:29:13
Original geschrieben von _c_4_
Was nun? $n_disk oder $disk?


nun $n_disk ist meine variable zum speichern die ja mit dem post übergeben wird und $disk ist meine variable die beim auslesen gefüllt wird. damit ich die auseinanderhalten kann. die dürften ja kein problem darstellen. bei denn eingabefeldern funzt das ja auch

hm also mit dem isset macht er zwar jetzt das häckchen rein aber das problem jetzt ist er macht es immer rein.
und beim speichern schreibt er immer noch nix in die db oder löscht es wenn das häckchen raus gemacht wurde :(

so sieht es jetzt aus
<INPUT ID="Kontrollkästchen1" TYPE=CHECKBOX <?if (isset($disk)) {echo "CHECKED";}?> NAME="n_disk" VALUE="floppy">

c4
29.09.2004, 12:43:38
Dann gib mal mehr Code. Vielleicht sogar einfach alles.

Stifler
29.09.2004, 13:33:34
alle kann ich net posten sonst kickt mich der admin :)

also ich fange damit an die db aus zu lesen wenn ein datensatz aufgerufen werden soll. die übergebene variable zum auslesen ist $b_id

//abfrage tabelle pc_daten
$result4 = @mysql_query("SELECT board, speicher, prozessor, grafik, platte, laufwerk1, laufwerk2, disk,
card_r from pc_daten where inv_nr = '$b_id'");
//daten werden aus der datenbank geholt deren inventarnr mit dem link übereinstimmt

//datenbank daten(felder der tabelle) werden aus dem array ausgelesen und variablen zugeordnet
while ($show4 = @mysql_fetch_array($result4)){
$board = $show4["board"];
$mem = $show4["speicher"];
$proz = $show4["prozessor"];
$grafik_k = $show4["grafik"];
$h_disk = $show4["platte"];
$lw1 = $show4["laufwerk1"];
$lw2 = $show4["laufwerk2"];
$disk = $show4["disk"];
$c_reader = $show4["card_r"];
}


dann möchte ich wissen ob (als der datensatz angelegt wurde) eine floppy vorhanden ist oder nicht und dieses in der box anzeigen

hiermit
<INPUT ID="Kontrollkästchen1" TYPE=CHECKBOX <? if($disk=="floppy"){echo "CHECKED";}?> NAME="n_disk" VALUE="floppy">

wenn sich nun etwas verändert soll das ja auch in der db gespeichert werden (z.b. floppy wurde ausgebaut also kein häckchen beim nächsten anzeigen)

also update und das sieht so aus

if (isset($_POST['save_x'])){

//vorhandener Datensatz wird geändert
if('$b_id' == true){

$query3 = "UPDATE pc_daten set gehause = '".$gehart."',
board = '".$n_board."', speicher = '".$speicher."', prozessor = '".$n_proz."',
grafik = '".$g_card."', platte = '".$hd_disk."', laufwerk1 = '".$n_lw1."',
laufwerk2 = '".$n_lw2."', disk = '".$floppy."', card_r = '".$c_r."'
where inv_nr = '".$b_id."'";

mysql_query($query3) or die(mysql_error());
}
}


gesendet wird das mit einem speicher button

xabbuh
29.09.2004, 13:39:08
Was du überprüfen könntest, wäre mal, ob vielleicht irgendwo in $disk überflüssig Leerzeichen sind. Wenn $disk = 'floppy '; wäre if($disk == "floppy") immer false. Das Problem kannst du aber mit trim() (http://www.php.net/trim) sehr gut beheben.

Stifler
29.09.2004, 13:57:55
hab das trim eingebaut aber daran liegt es leider nicht. er macht immer noch von anfang an ein häckchen rein. obwohl in der db nix steht

denke mal ich hab es richtig gemacht?

$disk_t = trim ($disk);


danach natürlich noch die if anweisung geändert und da viel mir auf das wenn ich sie in "" setze macht er das häckchen nicht mehr rein mach ich die "" weg kommt das häckchen wieder. allerdings speichert er immer noch nix in der db bzw macht ein häckchen wenn etwas drin steht.

so sieht die box jetzt aus

<INPUT ID="Kontrollkästchen1" TYPE=CHECKBOX "<?if (isset($disk_t)) {echo "CHECKED";}?>" NAME="n_disk" VALUE="floppy">

ist irgendwie zum verzweifeln das teil

xabbuh
29.09.2004, 14:15:11
$disk_t ist immer gesetzt. Wenn du aber if($disk_t == 'floppy') schreibst, sollte es gehen.

Stifler
29.09.2004, 14:48:12
ich habe das ganze jetzt mal etwas umgestrickt.

also es sieht jetzt folgendermasen aus

auslesen wie gehabt

//abfrage tabelle pc_daten
$result4 = @mysql_query("SELECT board, speicher, prozessor, grafik, platte, laufwerk1, laufwerk2, disk,
card_r from pc_daten where inv_nr = '$b_id'");
//daten werden aus der datenbank geholt deren inventarnr mit dem link übereinstimmt

//datenbank daten(felder der tabelle) werden aus dem array ausgelesen und variablen zugeordnet
while ($show4 = @mysql_fetch_array($result4)){
$board = $show4["board"];
$mem = $show4["speicher"];
$proz = $show4["prozessor"];
$grafik_k = $show4["grafik"];
$h_disk = $show4["platte"];
$lw1 = $show4["laufwerk1"];
$lw2 = $show4["laufwerk2"];
$disk = $show4["disk"];
$c_reader = $show4["card_r"];
}


dann anklicken oder nicht bzw abfragen ob geklickt oder net
value kann ich mir in dem fall sparen da ja ein wert gesendet wird wenn ein hacken gesetzt wurde


<INPUT TYPE=CHECKBOX "<? if($disk== 'on'){echo "CHECKED";} ?>" NAME="floppy">

wenn das teil angeklickt ist und ich lasse die variable $floppy ausgeben bringt er on
also hab ich folgendes gemacht


if (isset($_POST['save_x'])){

//on oder nicht?
echo $floppy;

//wenn sie on ist soll $disk denn wert on erhalten
if($floppy == 'on'){
echo "kontrolle ob es funzt";
$disk = on;
}
//wenn $floppy net on ist, ist sie leer also soll $disk auch leer sein
else if($floppy == ''){
echo "leer ok";
$disk = '';
}

//nochmal zur kontrolle
echo $n_disk; //der wert stimmt
$query3 = "UPDATE pc_daten set gehause = '".$gehart."',
board = '".$n_board."', speicher = '".$speicher."', prozessor = '".$n_proz."',
grafik = '".$g_card."', platte = '".$hd_disk."', laufwerk1 = '".$n_lw1."',
laufwerk2 = '".$n_lw2."', disk = '".$disk."', card_r = '".$c_r."'
where inv_nr = '".$b_id."'";

mysql_query($query3) or die(mysql_error());



also soweit hab ich ihn nur das problem besteht jetzt erst mal darin das er den wert on net speichert aber wieso net?

wenn ich was anderes verändere speichert er es aber diesen wert nicht.
als feldtyp für disk hab ich in der db übrigens varchar angegeben aber denke mal das ist ok

Stifler
29.09.2004, 14:59:11
ok habe ihn nun soweit das er den wert on speichert also wieder zurück zu problem 1. häckchen setzten wenn on drin steht keins setzen wenn on net drin steht. bei der nächsten frage ist der code dabei wie er im mom ist von der box

noch ne andere frage normalerweise schreibe ich ja <? php ?> im html code soll ich es nun so


<INPUT TYPE=CHECKBOX "<? if($disk!=''){}else{echo "CHECKED";} ?>" NAME="floppy">

//oder so machen? er meckert bei beidem nix an aber was stimmt jetzt?
//laut meines wissen das unter oder??
<INPUT TYPE=CHECKBOX <? if($disk!=''){}else{echo "CHECKED";} ?> NAME="floppy">

Stifler
29.09.2004, 15:15:06
fehler von mir hatte falschen datensatz ausgewählt :(

jupie geschaft es funktioniert :))