dedlfix: Mysqli namen speicherung?

Beitrag lesen

Tach!

if (isset($_POST['submit']) && isset($_POST['Vorname'])
&& isset($_POST['Jahr']) {

Wenn du auf das Vorhandensein des submit prüfst, dann kann man in manchen Browsern, vorwiegend IE nicht mit Enter das Formular absenden, denn der IE betrachtet einen nicht geklickten Button als nicht erfolgreiches Element und schickt es nicht mit. Andere Browser nehmen sich einfach irgendeinen Button und tun so, als ob er geklickt wurde.

$sql = sprintf ("INSERT INTO angaben (Vorname, Jahr)
    VALUES ('%s','%s')",

Jetzt hast du zwar das Statement in "" eingerahmt, aber trotzdem noch die ' maskiert.

<input type="text" name="Jahr" value="Jahr" /> <br />
<input type="checkbox" name="Jahr[]" value="1" /> <br />
<input type="checkbox" name="Jahr[]" value="2" /> <br />
<input type="checkbox" name="Jahr[]" value="3" /> <br />
<input type="checkbox" name="Jahr[]" value="4" /> <br />

Jetzt hast du aus PHP-Sicht zwei Elemente, die den Namen Jahr tragen.

Und zwar habe ich das problem das ich dieses Checkbox array nicht in die datenbank bekomme.

Wie sieht denn die Tabellenstruktur aus? Willst du tatsächlich mehrere Werte in ein Feld bringen? Das erzeugt nämlich gleich noch ein Folgeproblem: Wie findet man Werte in solch einem Feld? FIND_IN_SET() kann zwar bei kommaseparierten Werten helfen, aber das ist langsam, weil dabei kein Index verwendet werden kann.

Ich weiß das ich es zu einem string formatieren muss bevor ich es weiterleiten kann.

Ein Array in einen String-Kontext zu bringen erzugt immer den Wert "Array". Du brauchst also irgendwas anderes, wenn du wirklich nur ein Feld verwenden willst. Mit Hinblick auf FIND_IN_SET() wäre dann was mit Kommas angesagt.

Jetzt ist die Frage nicht nur wie sondern auch wo? Mitten in der php mysqli anweisung geht das bestimmt nicht,

Was verstehst du unter einer "php mysqli anweisung"? Du hast zunächst einmal nur PHP-Code. Du musst also mit PHP-Code-Mitteln ein SQL-Statement erzeugen. Und das muss obendrein syntaktisch korrekt sein sowie keine SQL-Injection-Lücke aufweisen. Ein einfaches implode() mit einem Komma als $glue reicht nicht. Du musst jeden Wert einzeln sichern und dann kannst du sie zusammenfügen.

es wird wohl so sein, das ich herausfinden muss welche checkbox ausgewählt wurde

Nun, die ausgewählten werden vom Browser mitgesendet, die anderen nicht.

und diese dann als string weiterschicke?

Sichern und zusammenbauen. Aber besser ist vielleicht das Datenmodell in Bezug auf Normalisierung zu ändern.

Ich weiß das php leere checkboxen ignoriert und mit ihnen gar nichts macht bin ziemlich ratlos.

Falsch, es ist der Browser. Schau dir an, was bei PHP ankommt, indem du eine Kontrollausgabe von $_POST machst - mit var_dump() oder print_r() (und <pre> vorher). Und was den Browser verlässt kannst du mit entsprechenden Browser-Erweiterungen oder -Funktionen prüfen (livehttpheaders für den Firefox beispielsweise).

Ich muss lediglich das array in einen string umwandeln, ich weiß auch das es mit unserialze() gehen müsste, aber habe auch gelesen das es nicht die beste methode ist.

Das "lediglich" ist zu wenig. serialize() (und unserialize() beim Abfragen) geht zwar prinzipiell (Escaping braucht es für den serialisierten Wert natürlich auch), aber dann kann MySQL gar nicht mehr (oder nur mit noch viel mehr Aufwand) in dem Feld suchen.

dedlfix.