Philip P.: PHP und MySQL: Wie einen Datensatz auswählen und (bearbeiten/löschen)? Datentyp für Radiobutton?

Hallo Gemeinde!

Oben habe ich ein Formular und unten eine (mit Hilfe von PHP dynamische) Tabelle mit diversen Datensätzen, die vom Formular stammen. Nun möchte ich einzelne Datensätze auswählen können. Dazu erstelle ich am besten eine neue Spalte (Name: "Auswahl"), wo dann mittels Radiobuttons ein Datensatz ausgewählt werden kann. In der MySQL-DB muss ich dann natürlich auch ein neues Feld (Name: "fldChoice") erstellen. Aber welchen Datentyp soll ich nehmen, wenn Radiobuttons (= eine einzige Auswahl gleichzeitig möglich) ausgelesen werden sollen? Welche Ergebnisse liefert denn ein Radiobutton?

Beste Grüsse:
Philip P.

  1. Hello,

    wieso willst Du in der Datenbank eine eigene Spalte einführen?
    Wer wählt den Datensatz aus?
    Könnten da auch mehrere User gleichzeitig Datensätze auswählen?

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. wieso willst Du in der Datenbank eine eigene Spalte einführen?

      Im Formular unten will ich das. Damit eine Auswahl getroffen werden kann. Wir könnten die Daten auch über phpMyAdmin bearbeiten (aktualisieren/löschen), aber die Möglichkeit ist unkomfortabel.

      Wer wählt den Datensatz aus?

      Jeder aus einer bestimmten Abteilung.

      Könnten da auch mehrere User gleichzeitig Datensätze auswählen?

      Ähm, theoretisch schon. Aber wir sind ein kleines Team und wir machen ab, dass jeder nur seinen eigenen Datensatz bearbeiten soll.

    2. Hallo Tom (und andere)

      Ich habe die PHP-Seite auf meiner Website hochgeladen, was hoffentlich zum besseren Verständnis beiträgt:
      http://pc-freaks.ch/pp/eth/index.php

      Ich habe jetzt einfach mal eine neue Spalte mit Radiobuttons eingebaut. Jetzt existieren zwar die Elemente (Radiobuttons und der "bearbeiten"-Button ganz unten), aber sie funktionieren noch nicht. Durch einen Klick auf den "bearbeiten"-Button ganz unten soll der Datensatz dann wieder in den oberen (Formular)feldern erscheinen und entweder aktualisiert oder gelöscht werden.

      Gruss
      Philip

      1. Hello Philip,

        es ist nicht so geschickt, dem Radio-Element keinen Value zuzuweisen.
        Du könntest nun die ID des Datensatzes als Value benutzen.
        Dann könntest Du feststellen, welcher Datensatz gemeint ist.

        if(isset($_POST['Auswahl']) and intval($_POST['Auswahl'])) > 0)
          {

        }

        Nun müsstest Du aber auf jeden fall feststellen, ob der User zum bearbeiten des Datensatzes berechtigt ist.

        Außerdem empfiehlt sich in Multiuser-Umgebungen, dem Datensatz einen Konflikt-Zähler zu verpassen. Wenn der User nun die Daten holt, wird dieser Zähler mit der ID zusammen in der Session eingetragen. Wenn dann das Update stattfinden soll, wird ersten geschaut, ob die ID (bei dir $_POST['Auswahl']) überhaupt in der Session steht, und welcher Koflikt-Counter-Wert dazugehört:

        update $tabelle
          set ....., conflictcounter = conflictcounter+1
          where conflictcounter = $_SESSION[$id]['counter'] and ID = $id;

        wobei $id eben intval($_POST['Auswahl']) ist.

        So wird gewährleistet, dass nur Datensätze verändert worden sind, die seit dem letzten Lesen noch nicht (von jemand anderem) verändert wurden.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Moin!

          Außerdem empfiehlt sich in Multiuser-Umgebungen, dem Datensatz einen Konflikt-Zähler zu verpassen. Wenn der User nun die Daten holt, wird dieser Zähler mit der ID zusammen in der Session eingetragen.

          So ein "Konfliktcounter" existiert in MySQL in Form des TIMESTAMPs schon. Das vorderste TIMESTAMP-Feld wird bei Updates ja automatisch auf die aktuelle Zeit gesetzt. Wenn man sich also den gespeicherten Timestamp zum Zeitpunkt des Datensatzlesens merkt und beim Schreibversuch prüft, ob der Datensatz noch immer den gleichen Timestamp hat (am simpelsten, indem man das Timestamp-Feld inkl. der erforderlichen alten Zeit mit in die WHERE-Bedingung reinsetzt und dann die "affected rows" abfragt), dann wurde der Datensatz in der Zwischenzeit nicht verändert.

          Andernfalls muß man sich was überlegen. :)

          Oder hätte dein conflictcounter noch weitere Aufgaben?

          • Sven Rautenberg
          1. Hello,

            So ein "Konfliktcounter" existiert in MySQL in Form des TIMESTAMPs schon. Das vorderste TIMESTAMP-Feld wird bei Updates ja automatisch auf die aktuelle Zeit gesetzt. Wenn man sich also den gespeicherten Timestamp zum Zeitpunkt des Datensatzlesens merkt und beim Schreibversuch prüft, ob der Datensatz noch immer den gleichen Timestamp hat (am simpelsten, indem man das Timestamp-Feld inkl. der erforderlichen alten Zeit mit in die WHERE-Bedingung reinsetzt und dann die "affected rows" abfragt), dann wurde der Datensatz in der Zwischenzeit nicht verändert.

            Andernfalls muß man sich was überlegen. :)

            Oder hätte dein conflictcounter noch weitere Aufgaben?

            Der Conflict-Counter zählt nur die Updates bzw. die schreibenden Zugriffe.
            Da MySQL verflixt schnell ist, ist ein Timestamp in Sekunden-Quantelung nicht ausreichend.
            Queries werden in weniger als 0.08 sec ausgeführt.
            Man muss daher tatsächlich beides führen, wenn man Sicherheit und Information (wann wurde verändert) haben will.

            Das gilt natürlich nur dann, wenn zwischen Lesen und Schreiben nicht mehr Zeit vergeht, als eine Sekunde. Da man aber Funktionen für den Datenbankzugriff i.d.R. so schreibt, dass sie auch für die automatisierte Vorgangsbearbeitung geeignet sind, sollte man das berücksichtigen. Dann funktioniert das nämlich nachher im Dialogbetrieb genausogut wie im Batch-Betrieb.

            Interessant ist allerdings noch die Frage, wie man auf diesen Fehler (wenn er denn auftritt) reagiert.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau