array checkboxes ****

hups1803

Erfahrenes Mitglied
hallo ich habe folgendes gemacht :

PHP:
//formular

<form method="get">
    <input type="checkbox" name="options[]" value="pop"/> Politics<br/>
    <input type="checkbox" name="options[]" value="beat"/> Movies<br/>
    <input type="checkbox" name="options[]" value="trance"/> World<br/>
    <input type="submit" value="Go!" />
</form>

// eintrag in die db 

 $interests_str = implode(", ", $_POST['options']);

so weit so gut in der db steht jetzt z.b

beat,pop,trance usw

bei der ausgabe habe ich nun das problem wie mache ich die selectboxen selected****

PHP:
while($row1 = mysql_fetch_array($res1)){

// hier ist das Array drinn 
$aktiv=	$row1['music_aktiv'];

$text .=" 	
           <input type='checkbox' name='music_aktiv[]'  value='".$row1['music_direction']."' ".($aktiv ==$row1['music_direction']?" checked='checked' ":"")."/>";

habe mal versucht

PHP:
$aktiv=	$row1['music_aktiv'];
$aktiv_array = explode(",", $aktiv);
komme aber nun nicht weiter
 
Zuletzt bearbeitet:
wenn explode() dann bitte mit demselben Trennzeichen wie du beim implode() verwendet hast
 
oja da ist was falsch , danke für den Hinweis

PHP:
$aktiv=	$row['music_aktiv'];

$aktiv_array = explode(",", $aktiv);

if(in_array($music_direction, $aktiv_array))$check ="checked='checked'";

$text .="<input type='checkbox' name='music_aktiv[]' value='".$music_direction."'".$check."/>&nbsp;&nbsp;";

kann mann es so machen oder gibt es ein eleganteren weg?
 
nö geht nicht so richtig wenn ich ene checkbox neu aktiviere das schreibt er es richtig in die db aber danach sind alle checkboxen aktiv **** versteh nicht warum
 
Hi,

füg mal nochmal einen else block zu deiner Abfrage hinzu um die Variable $check wieder zurück zu setzen. Sonst hat sie nach dem ersten positiven if immer den wert "checked='checked'".

Eleganter geht das auf jeden fall. Zum Beispiel sollte man Daten nicht in einer Spalte mit Komma getrennt speichern. Das vernichtet jeden Sinn einer relationalen Datenbank. Wenn du mal erzählst, wie deine Datenbank bisher aussieht, können wir da bestimmt nochmal gucken, ob man das nicht noch optimieren kann.
Wenn du dann eine saubere Datenbank hast und auf die Felder einzeln zugreifen kannst, kannst du das über if Kurzschreibweisen und eine Schleife deutlich schöner in die Felder bekommen, bzw rausfinden, ob die Felder aktiv sein sollen oder nicht. Außerdem würde das die Fehleranfälligkeit drastisch reduzieren, von dem Performance Vorteil mal ganz zu schweigen.

VG
Nino
 
so das klappt jetzt soweit ,

wie lösche ich nun den eintrag zb.

in der db e107_radio_music_direction_aktiv unter id 1 steht

Rock,Elektronische Musik,Punk,Volksmusik,Volklore,Schlager

wie finde ich den punk wenn ich den löschen will

habe die einträge von einer anderen tabelle in der dlete php per get angesprochen.

PHP:
if(isset($_GET['id'])){ 

$id=$_GET['id'];
$aktiv=$_GET['aktiv'];

$mysql = new db();
     
$mysql->db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb);
     
$sql = $mysql->db_Delete("radio_music_direction", "  id ='".$id."'");

//hier will ich nun den eintrag aus den array löschen



$sql = $mysql->db_Delete("radio_music_direction_aktiv", "  music_aktiv ='".$aktiv."'");// das kann ja nicht sein da alle in einen eintrag stehen

header("Location: admin_config.php");
}
 
habe es nun so gemacht, ist das nicht zu umständlich****

PHP:
//abfrage vorhandenes array
$sql = new db();
$sql -> db_Select("radio_music_direction_aktiv", "*");
		$row22 = $sql-> db_Fetch();

              $aktiv=	$row22['music_aktiv'];

               $aktiv_array = explode(",", $aktiv);

//wert suchen und löschen

if(in_array("".$aktivsearch."", $aktiv_array)){

$pos=array_search($aktivsearch,$aktiv_array);

unset($aktiv_array[$pos]);// löschen aus array	

Array neu zusammenpacken

$music_data = implode(",", $aktiv_array);	


//neues Array in db speichern

$mysql = new db();
$mysql->db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb);
$rtn = $mysql->db_Update("radio_music_direction_aktiv","music_aktiv='$music_data' WHERE id='1' ");
}
 
du könntest mit LIKE dir von der DB auch wirklich nur die Ausprägungen geben lassen, in denen wirklich auch der entsprechende String vorkommt. Diese aufwendinge löschen des Eintrages liegt an deinem schlechten Datenbankdesign.
 
Zurück