checkbox übermittelt nur den letzten Wert
Bernhard
- datenbank
0 sschumann0 Thomas Luethi0 Joachim0 Tom0 e7
Hallo,
Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden. Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen. Hat jemand eine Idee woran das liegen könnte?
Danke
Bernhard
Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden. Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen. Hat jemand eine Idee woran das liegen könnte?
Kommt im Request noch alles an? Welche Sprache verwendest Du? Wie heißt die Checkbox-Gruppe?
Hallo,
Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden.
In der Annahme, dass Du PHP verwendest:
http://www.dclp-faq.de/q/q-formular-checkbox.html
Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen. Hat jemand eine Idee woran das liegen könnte?
Uebertragen wird normalerweise vom Browser an ein Skript.
Das Skript schreibt dann in die Datenbank.
Lass Dir also vom Skript anzeigen:
Gruesse,
Thomas
Hi,
Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden. Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen.
radioboxen muessen gleiche Namen haben, checkboxen dagegen muessen unterschiedlich benamt sein. Sonst tritt selbiger Fehler auf.
Gruesse Joachim
Hello,
schau Dir dazu mal den Thread [pref:t=62991&m=356599] an. Der behandelt ein sehr ähnliches Thema.
Grüße
Tom
Hi,
folgendes passiert bei dir wahrscheinlich:
<input type="checkbox" name="a" value="a">
<input type="checkbox" name="a" value="b">
<input type="checkbox" name="a" value="c">
Nun sendet der Browser folgende Daten, wenn alle Felder markiert sind:
a=a&a=b&a=c
PHP überschreibt nun mit jeder neuen Variable a die alte.
Eigentlich muss es so heißen:
<input type="checkbox" name="a[]" value="a">
<input type="checkbox" name="a[]" value="b">
<input type="checkbox" name="a[]" value="c">
So kannst du a[0], a[1] und a[2] verwenden...
E7
Hi
Ja das wahr wohl einer der Fehler. Doch jetzt schreibt er mir in die Datenbank nur noch 'array' statt der gewünschten Inhalte!
Sorry aber ich hab samit einfach noch nicht soviel Erfahrung!
Bernhard
Hi,
folgendes passiert bei dir wahrscheinlich:
<input type="checkbox" name="a" value="a">
<input type="checkbox" name="a" value="b">
<input type="checkbox" name="a" value="c">Nun sendet der Browser folgende Daten, wenn alle Felder markiert sind:
a=a&a=b&a=c
PHP überschreibt nun mit jeder neuen Variable a die alte.
Eigentlich muss es so heißen:
<input type="checkbox" name="a[]" value="a">
<input type="checkbox" name="a[]" value="b">
<input type="checkbox" name="a[]" value="c">So kannst du a[0], a[1] und a[2] verwenden...
E7
Hallo,
Ja das wahr wohl einer der Fehler. Doch jetzt schreibt er mir in die Datenbank nur noch 'array' statt der gewünschten Inhalte!
Kein Wunder, es wird jetzt auch ein Array uebermittelt.
Das heisst, es reicht nicht nur _eine_ Schreib-Aktion in die DB,
sondern Du musst den Array in einer Schleife durchlaufen
und fuer jedes Element einmal in die DB schreiben.
Sehr praktisch ist foreach()
Bilde Dich weiter, was Arrays angeht:
http://www.php.net/manual/de/language.types.array.php
http://www.php.net/manual/de/ref.array.php
Gruesse,
Thomas
Danke! Ich weiss dass ich da noch viele Mankos habe. Vielleicht kannst Du mir aber trotzdem noch helfen was in folgenden script nicht stimmt:
foreach($Berufsbilder as $berufe){
INSERT INTO betriebe (Berufsbilder) VALUES ($berufe);
}
da kriege ich nämlich immer einen parse error.
Nochmals Dankeschön
Bernhard
Sehr praktisch ist foreach()
Bilde Dich weiter, was Arrays angeht:
http://www.php.net/manual/de/language.types.array.php
http://www.php.net/manual/de/ref.array.phpGruesse,
Thomas
Hallo,
foreach($Berufsbilder as $berufe){
INSERT INTO betriebe (Berufsbilder) VALUES ($berufe);
}
Falls das wirklich Dein ganzer Code ist: Kein Wunder, dass PHP reklamiert.
Du kannst nicht einfach so in PHP einen MySQL-Befehl schreiben.
Zuerst einmal solltest Du die Query in einen String schreiben:
$query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$berufe')";
Vermutlich fehlen bei Dir die einfachen Anfuehrungszeichen um $berufe.
Dann kannst Du die Query naemlich auch anzeigen lassen:
echo "Meine Query lautet: <br>$query";
Dann solltest Du mal grundsaetzlich lernen, wie man von PHP aus
eine MySQL-Datenbank anspricht, und wie man Querys absetzt.
http://www.php.net/manual/de/ref.mysql.php
http://www.dclp-faq.de/q/q-mysql-zugriff.html
http://www.schattenbaum.net/php/verbindung.php
Wenn Du das dann mal kannst, empfehle ich:
1. Verbindung zu DB-Server und DB herstellen.
2. In der Schleife fuer jedes Element
- INSERT-Query absetzen und
- bei Misserfolg Query und mysql_error() mit echo anzeigen lassen.
Dann siehst Du auch gleich, warum etwas nicht klappt.
Gruesse,
Thomas
Hallo Thomas,
Du hast mir sehr geholfen. Die query hatte ich natürlich schon drin nur hier nicht mehr aufgeführt.
Ich habe das script wie folgt geändert:
foreach($Berufsbilder as $berufe){
$query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$berufe')";
$result = mysql_query($query, $localhost) or die(mysql_error());
und jetzt klappt der Eintrag schon.
Mysql legt jedoch für jedes array-Element eine neue Zeile mit eigener ID an. Ich hätte das alles aber gerne in EINEM Feld eingetragen. Hast Du da vuielleicht noch einen Tipp für mich?
Ansonsten nochmals vielen Dank dass Du einem Anfänger auf die Sprünge geholfen hast.
Bernhard
Hallo,
Mysql legt jedoch für jedes array-Element eine neue Zeile mit eigener ID an. Ich hätte das alles aber gerne in EINEM Feld eingetragen.
Ich weiss nicht, was Du genau vorhast, aber ich befuerchte,
Deine DB-Struktur ist - sagen wir mal - nicht ganz optimal.
Wie sieht sie denn aus?
Was fuer Felder (Name und Typ) hat die Tabelle betriebe?
Du willst also mehrere Werte in einer Zeile speichern.
Dann musst Du in der Schleife mal alles "zusammensetzen",
und dann nachher nur eine INSERT-Query absetzen.
$zaehler=0; $inhalt="";
foreach($Berufsbilder as $berufe)
{
if ($zaehler>0) // d.h. ab dem zweiten Element
$inhalt.=", "; // soll vorher jeweils ein Trennzeichen eingefuegt werden
$inhalt .= $berufe;
$zaehler++;
}
$query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$inhalt')";
Gruesse,
Thomas
Hallo Thomas -
Ich glaube jetzt bist Du erlöst. Ich habe mein Problem mit 'implode' gelöst.
Wie sieht sie denn aus?
Was fuer Felder (Name und Typ) hat die Tabelle betriebe?
Die Tabelle speichert verschiedene Ausbildungsbetriebe mit den jeweils angebotenenen Ausbildungsberufen sodass diese dann nach einer Suchroutine wieder ausgegeben werden können.
Ich habe das Ganze bereits online. Du kannst des dir ja mal anschauen:
http://www.rgs.kn.schule-bw.de/cgi-bin/betriebe.php
Dann musst Du in der Schleife mal alles "zusammensetzen",
und dann nachher nur eine INSERT-Query absetzen.$zaehler=0; $inhalt="";
foreach($Berufsbilder as $berufe)
{
if ($zaehler>0) // d.h. ab dem zweiten Element
$inhalt.=", "; // soll vorher jeweils ein Trennzeichen eingefuegt werden
$inhalt .= $berufe;
$zaehler++;
}$query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$inhalt')";
Gruesse,
Thomas
Danke nochmal im Namen der Robert Gerwig Schule Singen, für die ich das ganze erstellt habe.
Bernhard
Hi,
Ja das wahr wohl einer der Fehler. Doch jetzt schreibt er mir in die Datenbank nur noch 'array' statt der gewünschten Inhalte!
Das einfachste vor dem Schreiben:
$a = implode("($..$)", $a);
Und zum Anzeigen wieder:
$a = explode("($..$)", $a);
($$) ist ein String, der relativ unwahrscheinlich von deinen Boxen kommen dürfte...
E7