Zum Inhalt springen

Datensätze in DB ändern (MySQL & PHP)


Gast vplus

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 />";
}
}
}
?>

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...