Ich arbeite an dem folgenden Code, um Checkboxen aus einem Formular auszuwählen. Wenn ich das erste Kontrollkästchen ankreuze funktioniert alles super. Wenn ich ein anderes Kontrollkästchen ankreuze, erhalte ich den Fehler "Undefinierter Index" beim Senden von bulkcopy
form. Beachten Sie, dass ich die Checkboxen mit der Post-Methode bekomme und die Schaltfläche zum Absenden über den Checkboxen liegt aufgrund der Komplexität der Position des Formulars und der Felder. Was ich im Wesentlichen brauche, ist, mehrere Checkboxen auszuwählen und bestimmte Werte zur Datenbank hinzuzufügen.
Der Code des Formulars finden Sie unten:
%Vor%Jede Hilfe wird sehr geschätzt. Danke.
Sie haben ein Problem hier
%Vor%Es gibt keine schließende Klammer für die while-Schleife, und das Formular wird geschlossen, nachdem das erste Kontrollkästchen hinzugefügt wurde. Wenn dieses Kontrollkästchen nicht aktiviert ist, wird die Eingabe nicht gebucht, also der undefinierte Index. Stellen Sie sicher, dass Sie das Formular erst schließen, nachdem alle Zeilen hinzugefügt wurden, beispielsweise
%Vor%Nach der Überprüfung des HTML-Rohdaten der von Ihnen bereitgestellten vollständigen Seite ist klar, dass das Problem darin besteht, dass Sie versuchen, eine Verschachtelung durchzuführen mehrere Formulare, die ungültiges HTML ist. Bitte lesen Sie diese Antwort für weitere Informationen. Diese Antwort verlinkt auf eine Workaround , aber es ist ein hässlicher Hack und sollte wahrscheinlich vermieden werden.
Ich glaube, dass die richtige HTML-Lösung in Ihrem Fall ein einzelnes Formular ist. Derzeit haben Sie mehrere geschachtelte Formulare, die an folgende Speicherorte gesendet werden:
Was Sie tun können, ist ein einzelnes Formular, das festlegt, welche Aktion basierend auf der Schaltfläche zum Senden ausgewählt wurde. Zum Beispiel:
%Vor% Ihr Formular enthält nicht POST
eine Eingabe mit dem Namen 'room'. Wenn Sie versuchen, es mit dieser Zeile $room = mysql_real_escape_string($_POST['room']);
zu überprüfen, gibt es daher kein Element im Array $_POST
mit dem Index ' room
', daher der undefinierte Indexfehler.
Um solche Dinge zu debuggen, ist es hilfreich, die Request / Response-Header Ihrer Formularübertragung zu analysieren. Wenn Sie Chrome verwenden, drücken Sie STRG + UMSCHALT + I, um die Entwicklerkonsole aufzurufen, wählen Sie die Registerkarte "Netzwerk" aus, und zeigen Sie beim Übergeben des Formulars die Details des angezeigten Eintrags an. Sie werden hier die Namen und Werte der Dinge sehen können, die gesendet werden, und Ihnen eine Vorstellung davon geben, wo die Dinge falsch laufen. Andere Browser sind verfügbar, und jeder hat seine respektablen Versionen davon.
Bevor Sie auf Variablen zugreifen, die Sie selbst nicht definiert haben oder auf die Sie sich nicht verlassen können (z. B. Formularübergaben), sollten Sie isset()
verwenden, um sicherzustellen, dass die Variable existiert, bevor Sie sie verwenden Sie bekommen und erlauben Ihnen auch zu fangen, wo es schief geht:
Du hast dir selbst ein Problem gemacht.
Was ich verstehe, haben Sie Probleme beim Senden mehrerer Kontrollkästchen der Spalte "Eintragsname" mit der Schaltfläche "Bulk-Kopie".
So sollte es funktionieren. Das liegt daran, dass Sie Ihr Formular in der Spalte "Anzeigereihenfolge" schließen, wodurch es im Wesentlichen nur das erste Kontrollkästchen enthält. Wenn Sie alle markierten Checkboxen in das "Bulkcopy" -Skript stellen möchten, müssen Sie es entweder als separates Formular für alle Checkboxen deklarieren oder JS verwenden, z. mit Ihrem eingeschlossenen jQuery:
%Vor% Haken Sie etwas wie oben mit z. on('click')
Ihrer smbit-Schaltfläche. Hier auf SO gibt es pletny der Beispiele, wie man das Formular vorbereitet und schickt, verwendend JS.
Bearbeiten:
gibt es noch einen einfacheren Weg. Sie müssen id
zu Ihrem Formular hinzufügen:
und dann setzen Sie Ihre Kontrollkästchen so, dass sie zu ihm gehören:
%Vor%das sollte Ihr Problem leicht beheben.
Vergessen Sie nicht, überzählige schließende Formular-Tags zu entfernen:
%Vor%Sie können Ihre Lösung später leicht beschädigen. Schließen Sie gleich nach dem Absenden-Button:
%Vor% In Ihrem letzten generierten HTML befinden sich die Eingaben, die Sie einreichen möchten, nicht in bulkcopy
form. Wie andere darauf hingewiesen haben, sollten Sie Ihr HTML-Markup ändern.Ein schneller Weg, dies ohne Änderung Ihres Markups zu machen, ist die Verwendung von Javascript. Fügen Sie dies einfach an den unteren Rand Ihres html.It wird die Eingaben, die Sie eingereicht werden sollen und sie anhängen zum bulkcopy
Formular.
Sie sollten auch mysql_num_rows()
verwenden, um zu prüfen, ob Sie tatsächlich ein Ergebnis haben, bevor Sie versuchen, auf sie zuzugreifen und sie zum Einfügen in die Datenbank zu verwenden. Das Problem mit Ihrem Code ist, dass die Variablen in
sind niemals definiert, wenn die Ergebnismenge leer ist. Obwohl sie nie definiert sind, versuchen Sie, sie später in einer Einfügeabfrage zu verwenden. Überprüfen Sie einfach, ob Sie zuerst Ergebnisse haben:
%Vor%