Stefan: Lösch- & Movefunktion im Fomular

Hallo selfhtml,

ich bräuchte einen Denkanstoß für mein Projekt.

Per SQL-Select setze ich ich Inhalte aus einer Datenbank in eine Tabelle. In jeder Zeile gibt es einen Checkbutton und unterhalb der Tabelle soll es eine Funktion "Löschen" und eine "Verschieben nach Datum-X" geben.

Da es innerhalb eines Formulars nur einen Submitbutton geben darf, wollte ich wissen wie ich dieses änhlich realisieren kann.

Bitte Hilfe!

  1. du machst am besten für den namen der checkbuttons ein array

    ...name="checkbuttons[]"...

    dann nach dem submit überprüfst du ja z.B.

    if($_REQUEST['abgesendet'] == 'ok'){

    und guckst dann welche buttons angecheckt wurden und machst was damit

    for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
      echo $_REQUEST['checkbuttons'][$i];
    }

    is natürlich nur der ansatz ;-)

    1. du machst am besten für den namen der checkbuttons ein array

      ...name="checkbuttons[]"...

      dann nach dem submit überprüfst du ja z.B.

      if($_REQUEST['abgesendet'] == 'ok'){

      und guckst dann welche buttons angecheckt wurden und machst was damit

      for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
        echo $_REQUEST['checkbuttons'][$i];
      }

      is natürlich nur der ansatz ;-)

      Den Teil habe ich so ähnlich realisiert.
      Die Checkbutton haben den Namen bspw. neu[] mit value="SQL-ID".
      Das Löschen in der Datenbank läuft dann über ein foreach().

      Schonmal vielen Dank für die Antworten.

      1. Hello,

        dann nach dem submit überprüfst du ja z.B.

        if($_REQUEST['abgesendet'] == 'ok'){

        Mit $_REQUEST würde ich in diesem Fall überhaupt nicht arbeiten, weil darin auch per URL übertragene Parameter stehen können. Die sind für derartige Datenbankzugriffe (Löschen) nicht optimal.

        Eine ungeschriebe[1] Regel lautet:

        alle Funktionen der Ressourcen, die bookmarkfähig sein sollen, per URL-Parameter übergeben.
                Bookmarkfähig bedeutet auch, dass die Funktion mit genau diesen Parametern
                öfter wiederholt werden soll
           alle Funktionen der ressourcen, die nur über Formular gesteuert werden sollen
                immer als Post-Parameter übergeben, insbesondere dann, wenn die Ausführung
                der Funktion vermutlich nicht wieder mit denselben Paramertern ausgeführt werden
                soll.

        und guckst dann welche buttons angecheckt wurden und machst was damit

        for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
          echo $_REQUEST['checkbuttons'][$i];
        }

        dafür gibt es seit PHP 4 das Konstrukt "foreach()"
        Aber das kommt hier gar nicht zum tragen, weil ohnehin  nur maximal EIN Button geclickt werden durfte. Wenn mehr als ein Button übertragen werden, handelt es sich um einen Fake oder Fehler.

        for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
          echo $_REQUEST['checkbuttons'][$i];
        }

        Stattdessen also lieber

        $btn = 'home';  ## Vorbelegung

        if (isset($_POST['btn']) and is_array($_POST['btn']) and count($_POST['btn'] == 1))
          {
            $btn = key($_POST['btn']);   ## Namen des ersten Elementes des Arrays holen
          }

        [1] ich habe sie hier allerdings schon oft geschrieben

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Aber das kommt hier gar nicht zum tragen, weil ohnehin  nur maximal EIN Button geclickt werden durfte. Wenn mehr als ein Button übertragen werden, handelt es sich um einen Fake oder Fehler.

          warum das?
          er meinte sicherlich checkboxen
          nicht radiobuttons

          1. Hello,

            Aber das kommt hier gar nicht zum tragen, weil ohnehin  nur maximal EIN Button geclickt werden durfte. Wenn mehr als ein Button übertragen werden, handelt es sich um einen Fake oder Fehler.

            warum das?
            er meinte sicherlich checkboxen
            nicht radiobuttons

            Ok, er meinte wahrscheinlich Checkboxen
            Und ich meinte Submitbuttons

            Haben wir aneinander vorbeigeredet.

            Für die Checkboxen hatte ich im anderen Posting einen Vorschlag gepostet.
            Da fehlt dann natürlich noch die Berechtigungsprüfung usw.
            Wenn man da nicht aufpasst, kann eine Tabelle sonst in nullkommanix leer sein.

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. echo $begrüßung;

    Da es innerhalb eines Formulars nur einen Submitbutton geben darf, wollte ich wissen wie ich dieses änhlich realisieren kann.

    Diese Annahme ist nicht richtig. Du darfst so viele Submit-Buttons ins Formular einfügen wie du möchtest. Es kann aber immer nur höchstens[*] einer von denen das Formular absenden. Gib ihnen beispielsweise unterschiedliche Werte (value) bei gleichem Namen (name), dann kannst du abfragen, welcher aktiviert wurde.

    [*] "Höchstens", weil beim Absenden mit Enter ja keiner aktiv wurde. Allerdings verhalten sich in dem Fall die Browser unterschiedlich.

    echo "$verabschiedung $name";

  3. Hello,

    Per SQL-Select setze ich ich Inhalte aus einer Datenbank in eine Tabelle. In jeder Zeile gibt es einen Checkbutton und unterhalb der Tabelle soll es eine Funktion "Löschen" und eine "Verschieben nach Datum-X" geben.

    Die Dinger heißen "Checkbox"

    Da es innerhalb eines Formulars nur einen Submitbutton geben darf, wollte ich wissen wie ich dieses änhlich realisieren kann.

    In jedem Form darf es soviele <input>-Elemente vom Typ "Submit" geben, bis der Browser platzt.

    Es wird aber bei bestimmungsgemäßem Gebrauch maximal einer übertragen mit dem Request.

    Die Sache mit dem Array (siehe Rambo0815) ist ncht schlecht.
    Bei mir hat sich bewährt, die Namensbereiche etwas aufzuteilen.
    Daten, die direkte Bindung erhalten, werden im Form mit "data[name]" bezeichnet, Steuerflusselemente mit "ctrl[name]" usw. Das hat den Vorteil, dass man z.B. das Array

    $_POST['data'] rein mechanisch rekursiv bereinigen kann von Maskierungen oder auch unerlaubten Einträgen, vergleichen kann, ob die Daten erwünscht waren usw.

    für den Button kannst Du z.B. nehmen

    btn[delete]          Löschen
      btn[show]            Anzeigen
      btn[form][F001]      Formular wechseln...

    usw.

    Bei Checkboxen bietet sich z.B. an

    ctrl[delete][$id]    ### ID des Datensatzes

    Dann kannst Du später das Array durchgehen:

    if(isset ($_POST['crtl']['delete']) and is_array($_POST['crtl']['delete']))
      {
        $_delete = '';

    foreach ($_POST['crtl']['delete'] as $key => $val)
        {
          $_delete[] = intval($val);
        }
      }

    if (in_array(0,$_delete,true)
      {
        ### Hilfe, ein Fakeversuch. Die ID 0 gibt es nicht und ist verboten (sollte man so machen!)
      }
      else
      {
        $in = implode (',',$_delete);
        $sql = "DELETE from $table where ìd IN ($in);
      }

    Und das machst Du natürlich nur, wenn

    if (isset($_POST['btn']['delete'])
      {
        ### Löschen ausführen
      }

    Teile die Aufgaben in sinnvolle Funktionen auf, dann kannst Du über die Rückgabewerte der Funktionen leicht steuern, ob ein Abbruch der Aktion stattfinden muss, die rote Lampe beim Admin angehen muss, oder was auch immer...

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)