Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
variabel viele Checkboxen in DB eintragen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
variabel viele Checkboxen in DB eintragen


 
Andi_K
03-02-2006, 10:07 
 
Hallo zusammen,

ich arbeite gerade an einem Script, bei dem Einträge aus einer Datenbank mit einem Benutzer verknüpft werden sollen.
Im Prinzip stellt das soweit kein Problem dar.
Haarig wird es nun, weil die Einträge in der Datenbank ab und an mehr oder weniger werden können. Dadurch ergibt sich für mich das Problem, dass cih nicht von vorne herein weiß wie viele checkboxen vorhanden sein können und wie die Felder dazu heißen.

Um das ganze zu verdeutlichen:

Es gibt eine tabelle mit den Benutzerdaten, eine Tabelle welche den Namen und die beschriebung einer Kategorie enthällt und eine Tabelle welche beides miteinander verknüpft.

Wichtig ist für mich aus der Benutzertabelle das Feld u_id und aus der Tabelle der Kategorien das feld k_name. beides soll in der dritten tabelle so zusammen kommen:

feld 1 | feld 2
u_id | k_name

Nun kann es sein das es in der tabelle für die kategorien 1 einrag gibt oder 100. Und in dem Script, an dem ich arbeite soll nun die Möglichkeit bestehen per Checkbox sagen zu können das eintrag 10 und eintrag 23 mit dem benutzer mit der u_id 73 verknüpft werden soll damit er diese kategorien sehen kann.

Und jetzt ist die große Preisfrage wie gehe ich da rann?

Meine Überlegung war folgende:


$sql = "SELECT k_name FROM kategorie";

$result= mysql_query($sql) or die(mysql_error());

while($zeile=mysql_fetch_array($result,MYSQL_ASSOC))

{

echo'<tr>

<td colspan="4" rowspan="1" align="undefined" valign="undefined">
<input name="'".$zeile["k_name"]."'" value="1" type="checkbox">
'".$zeile["k_name"]."'</td>

</tr>';

}


Dabei ist mir aber klar geworden das ich das nciht wirklich so machen kann, da ich bei dem script, welches die Daten dann ja verarbeitet gar nicht weiß wieviele Checkboxen dort ankommen.

Weiß jemand Rat? Bzw. versteht überhaupt jemand was ich meine? :D

 
Benny-one
03-02-2006, 11:15 
 
Grundlagen: <input type="checkbox" name="meine_checkboxen[]" value="mein_wert" />
Und den Array kannst du mit PHP wunderbar auslesen.

 
Andi_K
03-02-2006, 11:22 
 
Danke, habs mittlerweile auch herausgefunden. Kurz nach meinem Post sind mir die Schuppen von den AUgen gefallen

 
Benny-one
03-02-2006, 11:25 
 
Original geschrieben von Andi_K
Kurz nach meinem Post sind mir die Schuppen von den AUgen gefallen wasch dich mal :D

 
Trashar
03-02-2006, 11:29 
 
hm.. erstmal wärs schön den code umzubrechen, seitlich scrollen is unfein..
und der code gibt dir so wie er da steht keinen parse error aus?????

 
Andi_K
03-02-2006, 11:31 
 
Sorry, hab das jetzt zum ersten mal gemacht mit dem code posten und wusste nicht das der dann so lang wird.
Ob der Code allerdings so funktioniert kann ich dir nicht sagen, der hat sich in der letzten halben Stunde derbe verändert. :D

 
Andi_K
03-02-2006, 11:37 
 
So jetzt hab ich nochwas zum steinigen. Der will das nicht machen, was läuft da schief?


for($i = 0; $i < count($_POST['kname']); $i++)
{
$sql="INSERT INTO `FG_zugewiesen`
(`u_id`,`k_name`)
VALUES ('".$u_id['u_id']."','".$_POST['kname'][$i]."')";
mysql_query($sql) or die(mysql_error());
}

$u_id['u_id'] hat den korrekten wert, daranliegt es nicht. Es liegt an dem $_POST['kname'] soweit bin ich schon

 
Benny-one
03-02-2006, 11:40 
 
hast du dir mal dein Array angesehen, den du per Post bekommst? Sicher nicht...

echo '<pre>';
print_r($_POST);
echo '</pre>';

 
Andi_K
03-02-2006, 11:49 
 
Doch, da kam die ganze zeit nix wie ich festgestellt habe. Nun kommts. Am Formular war ein Fehler.
Allerdings habe ich jetzt ein anderes Problem.
Und zwar macht das Arry genau das, was ein Array macht.
Hinter den Checkboxen sind Namen hinterlegt. Und die sollen in die DB. Jetzt geht der aber hin und schreibt mir jeweils einen Buchstaben dvon in die DB.
Was wohl daran liegt, das er bei nem Array ja eben Buchstaben für Buchstaben durchgeht.
Gibt es da eine einfache Möglichkeit die ganzen Wörter zu erhalten?

 
Benny-one
03-02-2006, 11:52 
 
gib mal den aktuellen Code, hast sicher n Fehler gemacht.

 
Andi_K
03-02-2006, 11:57 
 
for($i = 0; $i <= count($_POST['kname']); $i++)
{
$sql="INSERT INTO `FG_zugewiesen` (`u_id`,`k_name`)
VALUES ('".$u_id['u_id']."','".$_POST['kname'][$i]."')";

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


Das Wort ist zum Beispiel Weihnachten. Und wenn ich nur das anklicke wird in die DB "W" eingetragen.

 
Benny-one
03-02-2006, 11:59 
 
das ist doch exakt der gleiche code wie oben oder?
$_POST['kname'][$i] -> so und jetzt mach mein <pre> ding rein und poste mal, was dir da ausgegeben wird!

 
Andi_K
03-02-2006, 12:04 
 
Array
(
[kname] => Weihnachten
)
Wenn ich zwei felder anklicke nimmt der trotzdem nur eines der Wörter.
Und die Checkboxen werden so erstellt:


while($zeile=mysql_fetch_array($result,MYSQL_ASSOC))
{
echo'<tr>
<td colspan="4">
<input name="kname" value="'.$zeile["k_name"].'
" type="checkbox"> '.$zeile["k_name"].'
</td>

</tr>';
}

 
Benny-one
03-02-2006, 12:27 
 
du solltest eher ne foreach als ne for schleife verwenden ;)

 
Andi_K
03-02-2006, 12:55 
 
Mache ich jetzt, aber er schmeißt mir den Fehler raus:
Warning: Invalid argument supplied for foreach() on line 30

und wenn ich

echo '<pre>';
print_r($_POST);
echo '</pre>';

verwende wird trotz mehrfachauswahl nur ein wort angezeigt. Kann es sein das das arry mit den chackboxen nicht so ganz funktioniert?

so sieht mein foreach aus: foreach($kaname as $katname)

 
Benny-one
03-02-2006, 13:04 
 
:rolleyes:
foreach($_POST['kname'] as $key => $value)

 
Trashar
03-02-2006, 13:06 
 
Original geschrieben von Andi_K
Array
(
[kname] => Weihnachten
)
Wenn ich zwei felder anklicke nimmt der trotzdem nur eines der Wörter.
Und die Checkboxen werden so erstellt:


while($zeile=mysql_fetch_array($result,MYSQL_ASSOC))
{
echo'<tr>
<td colspan="4">
<input name="kname" value="'.$zeile["k_name"].'
" type="checkbox"> '.$zeile["k_name"].'
</td>

</tr>';
}


du musst der checkbox aber auch sagen, dass es ein array ist..
daher
... name="kname[]"..
mfg

 
Andi_K
03-02-2006, 13:16 
 
Super es funktioniert!

Heute habe ich wieder eine Menge gelernt. Und das dank Eurer strapazierfähigen Nerven.

Vielen Dank Euch allen! :D

 
Benny-one
03-02-2006, 13:25 
 
*grml* dabei hatte ich ihm das extra gesagt, das er ads [] dran machen muss *grml*

 
Andi_K
03-02-2006, 13:31 
 
Oha, das ist mir peinlicherweise entfleucht.
Entschuldigung. :(

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:28 Uhr.