checkbox-problem

therealcharlie

Erfahrenes Mitglied
also gut, ich erzeige mittels folgendem script eine seit mit einem eingabefeld für das zu erzeugende jahr und checkboxen, die dynamisch erstellt werden.
PHP:
<?
include ('check_admin.php');
echo "<form name=form method=post action=index.php?do=jahr&action=add_check>
  Geben Sie hier die Jahreszahl ein: <br>
  <input type=text name=jahr>
  <br>";
   $result = mysql_query("SELECT * FROM passion_groups ORDER BY Gruppe ASC")
    or die(mysql_error());
while($row = mysql_fetch_array($result)) {
echo "<input type=checkbox name=group[] value=$row[0]> $row[1]<br>";}
echo "
  <input type=submit name=Submit value=Erstellen>
</form>";
?>
soweit funktioniert auch alles, das nachfolgende script soll dann das jahr in die Spalte 'Jahr' eintragen, und die gewählten id's der checkboxen in die Spalte 'Rang', getrennt durch ', '. folgich sollte dann eineintrag in der Spalte Rang so aussehen: 1,4,7.
das script sieht bisher so aus:
PHP:
<?
include ('check_admin.php');
$jahr = $_REQUEST['jahr'];
$rang[] = $_REQUEST['group'];


echo "Das Jahr $jahr wurde hinzugefügt!";
echo "<br>";
foreach($rang as $key=>$value){
    echo $key."<br>".$value;}
mysql_query("INSERT INTO passion_jahre (Jahr, Rang) VALUES ('$jahr', '$rang')");

?>
leider funktioniert das ganze nicht.
weis jemand hilfe? danke im vorraus
 
Und was funktioniert nicht? Fehlermeldungen?

PHP:
include ('check_admin.php'); 
$jahr = $_REQUEST['jahr']; 

//lass Dir mal das Array ausgeben und schaue nach, ob da die gewünschten Werte drin stehen,
bzw. stimmt das unten?
$rang[] = $_REQUEST['group']; 


echo "Das Jahr $jahr wurde hinzugefügt!"; 
echo "<br>"; 
foreach($rang as $key=>$value){ 
    echo $key."<br>".$value;} 

//Hier ist wahrscheinlich der Wert für Rang = Array
mysql_query("INSERT INTO passion_jahre (Jahr, Rang) VALUES ('$jahr', '$rang')"); 

?>

Du musst Dir natürlich noch ne Variable zulegen, in der dann die Werte mit Komma getrennt drin stehen. Und diese musst Du dann in dem insert-statement anstelle von $rang verwenden. Schau Dir hierzu mal [phpf]implode[/phpf] an.
 
Zuletzt bearbeitet:
$key ist 0, $value und $rang haben den wert Array.
ich hab das jetzt auf folgendes geändert, und bekomme vom implode den wert 0 zurück.
PHP:
<?
include ('check_admin.php');
$jahr = $_REQUEST['jahr'];
$rang[] = $_REQUEST['group'];

echo "Das Jahr $jahr wurde hinzugefügt!";
echo "<br>";
foreach($rang as $key=>$value){
    echo $key."<br>".$value;}
echo $rang;
echo "<br>";
echo "<br>";
$test = array_keys($rang);
echo "array ausgabe:".implode(" | ",$test);
//mysql_query("INSERT INTO passion_jahre (Jahr, Rang) VALUES ('$jahr', '$rang')");
?>
die mysqlquery ist ausgeklammert, damit nicht jedesmal ein neues jahr erzeugt iwrd.
 
ich würde eher sagen das du falsch umkopiert hast.
Wieso verwendest du im foreach denn dein $_REQUEST['rang'] nicht direkt sonder kopierst es um
Da $_REQUEST['rang'] ein Array ist und du es als Element in das Array $rang kopierst hast du ein 2D Array in $rang., Weshalb $key logischerweise 0 ist (erstes Element) und $value ein Array ist, nämlich das eigentliche was du haben wolltest....

daher

PHP:
foreach($_REQUEST['group'] as $key=>$value){
    echo $value."<br>"; //$key ist sowieso nur eine Zahl, da indiziertes Array!
}

Was mir aber gerade aufgefallen ist, heisst das du willst in einer Tabell pro Jahr durch Kommata separiert alle Gruppen reinschreiben? Dies würde eine n:m Beziehung zwischen der Tabelle Jahr und Gruppe darstellen, ergo bräuchtest du 3 Tabellen. Eine in der du die Jahre speicherst (Jahr + ID), dann eine für die Gruppen (Gruppenname + ID) und eine die die Verknüpfung beider aufbaut also die gruppenID + JahrID enthält.
Dann wäre deine Struktur von dem was man bisher entnehmen kann ordentlich normalisiert und dir später sicherlich einige Workaraounds ersparen.
 
danke ben ben, das problem ist jetzt beseitigt. arrays bereiten mir eben noch ziemliche probleme....
zur erklärung: ich habe eine tabelle mit 3 spalten: ID, Jahr und Rang
 
jo und in die Spalte Rang steckst du mehr als einen Wert... verstösst gegen die erste Normalform (Atomarität der Werte in den Spalten, sprich pro Spalte und Datensatz nur 1 Wert und nicht mehrere durch Komma o.ä. getrennt!) und ist daher mindestens eine 1:N Beziehung... kommt dan nauf den Anwendungsfall an....
 
in der spalte rang stehen verschiedene zahlen.
in einer php-datei wird ein vergleich zwischen dem userrang und den eingetragenen zahlen der spalte gemacht und danach entweder zugriff gewahrt oder verweigert. die beistriche sind nötig(also eigentlich die trennzeichen), damit auch mehrziffrige zahlen eingetragen werden können.
 
ja wie gesgat der Punkt ist eher das überhaupt mehrere Zahlen unabhängig voneinander in einer Spalte stehen. Sollte eigentlich so nicht sein.
Da das ja eine Zugriffssteuerung ist, musst du die Zeile auslesen, wieder in ein Array zerlegen und schauen ob der Rang des Users in dem Array drin ist. Wesentlich umständlicher, als wenn du deine Tabellenstruktur verändert hättest.
Aber egal, hauptsahce dein Problem ist gelöst ;)
 
@ therealcharlie :

Bitte schreib nicht alles Klein, wir haben hier gewisse Regeln die die
Groß/Kleinschreibung betreffen und es wäre toll wenn du dich daran hallten
könntest. Danke
 
Zurück