Gast vplus Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Hallo allerseits, ich kenne mich mit MySQL und PHP noch nicht ganz so gut aus und habe folgendes Problem. Ich habe eine HTML-Seite, in der eine Tabelle mit Daten aus einer MySQL-Tabelle angezeigt wird. In einer Spalte dieser Tabelle befindet sich eine Checkbox. Ich möchte nun, dass wenn ich in dieser Tabelle in mehreren Zeilen diese Checkbox aktiviere, dann hinterher entsprechend in den so ausgewählten Datensätzen in der MySQL-Tabelle ein Feld aktualisiert wird. Wie ich generell Datensätze via PHP in einer Tabelle ändere, weiß ich. Ich weiß allerdings nicht, wie ich nur die bei einer Tabelle ausgewählten Datensätze verändere. Gruß vplus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Du packst das alles in ein Formular (hast du wahrscheinlich eh, checkboxen sind ja für Formulare gemacht). Jeder Checkbox gibst du dann einen Namen, aus dem du die eindeutige ID des Datensatzen auslesen kannst (bsp: chk_1, chk_2 ... also alles ausser chk_ ist die ID). Dann prüfst du, ob chk_1 im Post gesetzt ist (also angehakt war) und wenn ja, dann soll der Satz aktuallisiert werden. Was du dann noch brauchst, ist eine Möglichkleit, die vorhandenen IDs zu übergeben. Da du $_POST["chk_1"] kennen musst um zu prüfen ob es gesetzt wurde. Das kannst du z.B. mit einem Hidden-Feld machen. also beim aufbau des Formulars setzt du ein Feld ans Ende, wo z.B. alle IDs mit Komma getrennt drinstehen (... type="hidden" value="1,2"...). Bevor du dann die Post Variablen prüfst, holst du dir zuerst alle IDs aus diesen Feld. Hoffe das war jetzt verständlich erklärt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 ich markiere meistens alles variablen einer zeile mit einer ID. ist in der regel die $i, die in der while schleife hochgezaehlt wird. $ID $name_id $wasweiussich_id usw. type="hidden" value="$name_id" type="hidden" value="$wasweiussich_id" natürlich sind es auch meine hidden variablen und die übergebe ich mit post dann weiter ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 ich markiere meistens alles variablen einer zeile mit einer ID. ist in der regel die $i, die in der while schleife hochgezaehlt wird. $i ist hier auf jeden Fall die falsche Variable, mit der du den Satz markieren solltest. Das sollte(muss) die ID des Datensatzen (oder etwas anderes eindeutiges für den Satz) sein. Wenn du die Zählvariable der while-Schleife nimmst, änderst du bei jedem Aufruf immer dieselben Werte in der DB. Also das mag manchmal (gerade bei nur ein paar Testdaten) noch stimmen, wenn aber z.B. ein Satz mal gelöscht wird passt es auf jeden Fall nicht mehr. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 ich glaub du hast etwas nicht verstanden. die $i ist nur, um die werte in der tabelle eindeutig zur checkbox zu machen. der primary_key ist es noch lange nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
~Hawkeye~ Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Meine Lösung wäre ja für jede Zeile eine Checkbox zu erstellen und der einen Namen wie $arrUpdateListe[] zugeben. Als Value bekommt die dann pro Zeile den aktuell ausgelesenen Primary Key aus der Datenbank. Nach dem Abschicken von dem Formular dann per for- Schleife die Elemente des Arrays durchgehen und prüfen ob ein Wert eingetragen ist. Wenn ein Wert eingetragen -> dann Update, ansonsten ruhe dich aus. Was die Lösung mit Hidden- Feldern angeht stehe ich gerade auf dem Schlauch, da da für mich die Zuordnung zwischen einem Hidden- Feld und der Checkbox nach dem Absenden des Formulares verloren geht. Zumal das mit Variablen sowie nichts gibt, da die nach dem Abschicken generell nur den Wert des letzten Datensatzes haben, da der Variablenname nur einmal vergeben wurde und der Inhalt so immer überschrieben wird. Wenn dann müssten das schon Arrays sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schlati Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Meine Lösung wäre ja für jede Zeile eine Checkbox zu erstellen und der einen Namen wie $arrUpdateListe[] zugeben. Als Value bekommt die dann pro Zeile den aktuell ausgelesenen Primary Key aus der Datenbank.So ohne weiteres geht das nicht - nicht markierte Checkboxen werden ignoriert, deswegen wird jeder Wert deines Arrays = 1 sein, die Zuordnung, zu welcher Checkbox diese 1 gehört ist dann aber nicht mehr möglich Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
~Hawkeye~ Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Ich habe ein Formularfeld: <input type="checkbox" name="arrUpdateListe[]" value="".$Datensatz->PrimaryKey."" /> Nach dem Abschicken von diesem Formular habe ich in php das Array $_POST['arrUpdateListe'] und kann dieses mit: for ($intX = 0; $intX < count($_POST['arrUpdateListe']); $intX++) { echo $_POST['arrUpdateListe'][$intX]; } [/PHP] durchlaufen. Dort finde ich dann alle Checkboxen. egal ob angeklickt oder nicht. Die angeklickten kann ich nun aber dadurch herrausbekommen, indem ich einfach in der Schleife frage ob das Array an der jeweiligen Stelle einen Wert enhält. Im Ganzen schaut das dann so aus: [PHP] <?php echo " <form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">"; $intX = 0; while ($intX < 10) { echo " <input type=\"checkbox\" name=\"arrUpdateListe[]\" value=\"".$intX."\" /><br />"; $intX++; } echo " <input type=\"submit\" name=\"btnUpdate\" value=\"Update\" /> </form>"; if (isset($_POST['btnUpdate'])) { for ($intX = 0; $intX < count($_POST['arrUpdateListe']); $intX++) { if (!empty($_POST['arrUpdateListe'][$intX])) { echo $_POST['arrUpdateListe'][$intX]."<br />"; } } } ?> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast vplus Geschrieben 23. August 2005 Teilen Geschrieben 23. August 2005 @all Erstmal schönen Dank für Eure Hilfe... Ich habe es dann so gemacht, dass ich in der Tabelle zum Anzeigen eine Checkbox hinterherlegt habe, die dann als Wert den Inhalt des jeweilgen Schlüsselementes des Datensatzes gehabt hat. Nach dem Absenden des Formulars, habe ich dann die Tabelle sequentiell durchlaufen und immer geprüft, ob es zu dem Datensatz praktisch eine POST-Variable gibt. Falls der Fall gewesen ist, dann ist der entsprechende Datensatz geändert worden. Gruß vplus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 23. August 2005 Teilen Geschrieben 23. August 2005 Nach dem Absenden des Formulars, habe ich dann die Tabelle sequentiell durchlaufen und immer geprüft, ob es zu dem Datensatz praktisch eine POST-Variable gibt. Falls der Fall gewesen ist, dann ist der entsprechende Datensatz geändert worden. Das ist eine Lösung, die funktioniert, aber sobald deine DB etwas größer wird, verhält sich diese Lösung sehr unvorteilhaft (im Zweifel wird das Skript bei zu langer Laufzeit vom Server abgebrochen!). Daher auch der Tip die IDs mitzugeben, die überhaupt in Frage kommen geändert werden zu können. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 23. August 2005 Teilen Geschrieben 23. August 2005 Daher auch der Tip die IDs mitzugeben, die überhaupt in Frage kommen geändert werden zu können. Was auch nicht elegant ist. Die optimale Lösung hat ~Hawkeye~ gepostet. Ein Array in dem die angeklickten ids stehen. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.