php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Checkbox mit array prüfen


 
Meisterpz
09-09-2005, 11:02 
 
Moin

Wo ist könnte hier mein denkfehler liegen?


$rechte = array("0" => array("NewsSchreiben", "NS"), "1" => array("NewsAntworten", "NA"),
"2" => array("FavoritenListe", "FL"),
"3" => array("Search", "SH"),
"4" => array("SPPunkte", "SPP"), "5" => array("MyKoordDelete", "ML"),
"6" => array("KompletteListe", "KL"), "7" => array("KeySend", "KS"),
"8" => array("AktivKey", "AK"),
"9" => array("OnUser", "OU"),
"10" => array("Ssystem", "SS"), "11" => array("SPBericht", "SB"),
"12" => array("NewsAutoDel", "NAD"));

for ( $i = 0; $i < count($rechte); $i++)
{

$key1 = '$_POST[\''.$rechte["$i"][0].'\']';
$key2 = '$'.$rechte["$i"][1];
if ( $key1 == "on" ){ $key2 = 1; }else{ $key2 = 2; }
}


Das ganze soll auf diese art feststellen ob eine Checkbox on o. off ist aber das klappt nicht ganz

 
Quetschi
09-09-2005, 11:16 
 
So ganz kann ich es auf die schnelle nicht nachvollziehen, wie deine Prüfung da funktionieren soll - aber auf den ersten Blick scheint das etwas zu kompliziert aufgezogen zu sein.

Zeig mal den Ausschnitt deines Forms, wo sich die Checkboxen befinden - wenn du für die Checkbox-Namen schon Arrays verwendest dann sollte das ganze evtl. einfacher gehen.

 
Meisterpz
09-09-2005, 11:29 
 
so das sind nur zwei denke mal dass das reichen sollte, denn die anderen sehen nicht anders aus.
Ja und wenn das mit dem array funzt dann schreibe ich das auch so in einen array denn das spart mir viel quelltext


$text .= '<tr>';
if ($_POST['newsSchreiben'] == "1"){$checked = 'checked';}else{$checked = '';}
$text .= '<td align="right">
<input class="input" type="checkbox" name="NewsSchreiben" '.$checked.'></td>
<td class="input-w"><pre>Nachrichten Schreiben</pre></td>';

if ($_POST['MyKoordDelete'] == "1"){$checked = 'checked';}else{$checked = '';}
$text .= '<td align="right">
<input class="input" type="checkbox" name="MyKoordDelete" '.$checked.'></td>
<td class="input-w"><pre>Eigene Koord\'s Löschen</pre></td>';
$text .= '</tr>';

 
Quetschi
09-09-2005, 11:37 
 
ich mach Checkboxen lieber so in der Art:

<input type="checkbox" name="box[]" value="NewsSchreiben">
<input type="checkbox" name="box[]" value="MyKoordDelete">

Bau dir mal ein Form mit diesen Checkboxen und lass dir im aufgerufenen PHP das Array $box mal mit var_dump($_POST["box"]) anzeigen - dann solltest eigentlich ganz leicht selber draufkommen wie du eine entsprechende Prüfung aufbauen kannst ;)

 
hhcm
09-09-2005, 11:41 
 
Wenn du schon Quelltext sparen willst..


if ($_POST['newsSchreiben'] == "1"){$checked = 'checked';}else{$checked = '';}


wird zu


$checked = ($_POST['newsSchreiben'] == "1") ? "CHECKED" : "";


Weiter wäre die Frage nach dem WAS klappt nicht so ganz?
Dein 2ter Post sieht ganz ordendlich aus. Mit dem ersten komm ich ohne das mal auszutesten auch nicht wirklich weiter..

Was Quetschi geschrieben hat hört sich wesentlich besser an also den Namen der Checkbox direkt als Array zu nehmen.
Spart nochmehr Quelltext :P

 
Meisterpz
09-09-2005, 12:43 
 
@Quetschi:
also gut der vorschlag ist echt nicht schlecht, aber wenn ich nur einzelne boxen auswähle dann kommen unterschiedliche werte und da weiss ich gerade nicht wie ich die variablen zuweisen soll damit zum schluss dann auch das häckchen drinne bleibt, kann ja sein das ich da was übersehe, aber vieleicht noch eine kleine hilfestellung eurer seitz wäre sehr nett

z.B.: Newsschreiben bei einzel auswahl ist das array 0
o. Newsantworten bei einzel auswahl ist dann auch das array 0

wie muss ich das machen, denn das wird ja in ein DB abgespeichert, und bei jeden neu aufruf sollen die häckchen da sein wo ich diese auch gesetzt habe.

 
Quetschi
09-09-2005, 12:50 
 
if(in_array("NewsSchreiben",$_POST["box"]){
//Checkbox aktiv setzen
}

 
hhcm
09-09-2005, 13:06 
 
So würde ich das auch sehen.
Teste den Code hier einfach mal.


<?
$box = (is_array($_POST["box"])) ? $_POST["box"] : array();
?>
<form method="POST">
<INPUT type="checkbox" name="box[]" value="box1" <? if(in_array("box1",$box)) echo "checked"; ?>>Box1
<INPUT type="checkbox" name="box[]" value="box2" <? if(in_array("box2",$box)) echo "checked"; ?>>Box2
<INPUT type="checkbox" name="box[]" value="box3" <? if(in_array("box3",$box)) echo "checked"; ?>>Box3
<INPUT type="checkbox" name="box[]" value="box4" <? if(in_array("box4",$box)) echo "checked"; ?>>Box4
<INPUT type="checkbox" name="box[]" value="box5" <? if(in_array("box5",$box)) echo "checked"; ?>>Box5
<br \>
<INPUT type="submit">
</form>
<pre>
<?
print_r($_POST);
?>


Für das Eintragen in die DB könntest du serialize() bzw unserialize() benutzen.. Guckst du PHP.NET

 
Meisterpz
09-09-2005, 14:52 
 
ok diese möglichkeiten sind nicht schlecht nur hatte ich das ja so in dieser art, wenn auch nicht mit dem in_array siehe oben, darum wollte ich das etwas kompakter versuchen zugestalten ich werd mal sehen was ich da machen kann und euch dieses dann mitteilen ob ich da noch fortschritte mache aber diese in_array function ist nicht schlecht muss mal sehen wie ich das angehe

aber erstmal danke für eure mühen

 
Quetschi
09-09-2005, 15:01 
 
Ein Ansatz für dich wäre, die Checkboxen anhand deines Arrays (das evtl. aber einfacher aufgebaut sein sollte) bereits 'dynamisch' zu erstellen und zu prüfen. Mit ein paar Codezeilen solltest so beliebig viele Checkboxen bereitstellen können und auch gleichzeitig ne Prüfung dafür bekommen. Die gewünschten Checkboxen müssen dann nur noch im Array definiert werden :)

 
Quetschi
09-09-2005, 15:17 
 
Weils Wetter heut so schön ist bin ich mal so frei:
<?php

$boxes[] = "Wert1";
$boxes[] = "Wert2";
$boxes[] = "Wert3";

foreach($boxes as $box)
{
?>
<input type="checkbox" name="box[]" value="<?php echo $box; ?>" <?php

if(is_array($_POST["box"]) && in_array($box,$_POST["box"]))
{
echo "checked=\"checked\"";
}
?> />
<?php

echo $box."<br />";

}

?>

 
hhcm
09-09-2005, 15:25 
 
Das Wetter scheint etwas zu schön :p


echo "checked=\"checked\"";


:confused: Sicher?

 
Quetschi
09-09-2005, 15:40 
 
Für XHTML zumindest ja ;)

http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:19 Uhr.