Datenbankfrontend: Frage zu Submit-Buttons

  • Hallo,
    ich habe mal ein paar Fragen zum Design von Nutzerschnittstellen für Datenbanken:

    Ich habe eine MySQL - Datenbank erstellt, die der Nutzer über ein Formular mit PHP-Script durchsuchen kann. Das war eigentlich nicht schwer.

    Nun bin ich dabei eine administrative Seite zu gestalten. Da gestaltet sich das Ganze etwas schwieriger, denn der Administrator soll:

    - die Datenbank (wie der Nutzer) durchsuchen können
    - neue Datensätze eintragen können
    - bestehende Datensätze editieren und löschen können

    Es müssen also jeweils verschiedene PHP-Anweisungen ausgeführt werden.
    Da das Ganze in ein und dem selbem Dokument passieren soll, habe ich das momentan folgendermaßen gelöst:

    Praktisch die ganze Seite ist ein Formular und es gibt verschiedene Submit-Buttons, die alle den selben name haben. PHP schaut dann, welchen value der betätigte Button hat und fügt dann (in einer switch-Anweisung) per include das benötigte Skript ein.

    Ich hoffe mal, dass das kein allzu dilettantischer Ansatz ist, denn er funktioniert recht gut. :D

    Nur ein Problem gibt's: Wenn man auf einer Seite mit einem HTML-Formular Retrun drückt, dann wird das Formular mit dem ersten verfügbaren Submit-Button ausgeführt.
    Ich hätte es gerne so, dass bei eben dieser Aktion die Datenbank vom Admin einfach nach allen Einträgen durchsucht wird.
    Und das wäre auch so, wenn der Suchbutton der erste Submit-Button wäre. Aufgrund des Seitenlayouts, ist das aber der zweite.
    Nun meine Frage: Gibt es eine Möglichkeit festzulegen, welcher Submit-Button bei der Eingabe von Return benutzt wird?

    Alternativ könnte ich ja auch einfach die buttons anders setzen, aber das will ich eigentlich nicht. :)

  • Soweit ich weiß kann man die Reihenfolge wie die Elemente durchgetabbt werden mittels tabindex="#" im tag abändern, wobei # die Nummerierung ist.

    Ich kann die Leider nicht sagen ob dass den Problem löst aber ich hoffe es :)

    µC-Leitung

  • Praktisch die ganze Seite ist ein Formular und es gibt verschiedene Submit-Buttons, die alle den selben name haben. PHP schaut dann, welchen value der betätigte Button hat und fügt dann (in einer switch-Anweisung) per include das benötigte Skript ein.

    Ich hoffe, du übergibst dem include nicht den Wert eines Arrays der GET-, POST- bzw. REQUEST-Variablen, sondern immer nur Konstanten. Macht man zum Beispiel so etwas:

    PHP
    <?php
        include($_REQUEST['foo']);
    ?>

    Dann kann man mit einem entsprechenden HTTP-Request $_REQUEST['foo'] auf eine beliebige URL setzen (include kann beispielsweise HTTP verarbeiten), dann kann da ein beliebiges Skript, das von einem anderen Server geladen wird, inkludiert werden.

    Da du ein switch verwendest, klingt das aber eh in Ordnung.

  • Welcher Submit-Knopf standardmäßig benutzt wird, hängt vom Browser ab, und vom Browser allein. Vielleicht wird sich das auch in Zukunft ändern, wenn die Entwickler aufhören zu kiffen. :ahhh:

    Um das zu verhindern, könntest du zB den Browser austricksen: Der Standardknopf deiner Wahl bleibt <input type="submit" /> und die anderen musst du so gestalten:

    PHP
    <button type="button" onclick="javascript:top.location.href='script.php?aktion=suche';">Klick mich HART!</button>



    Fein ist das allerdings nicht und wenn du es am wenigsten erwartest, wird eines Nachts der Browser-Gott kommen und dich deiner Männlichkeit berauben.

  • Vielleicht wird sich das auch in Zukunft ändern, wenn die Entwickler aufhören zu kiffen. :ahhh:

    Dass die Kifferei nun der Hauptgrund dafür ist, kann man wohl als "verkürzte Argumentationslinie" bezeichnen... :D


    Mit Javascript wollte ich das eigentlich nicht realisieren, weil ich eher ein Freund von serverseitigen Skripten bin.

    Ich werde das mit dem tabindex mal nachschauen und ansonsten einfach den Button umsetzen. Dann muss eben das "Design" leiden.

  • Nochmal eine weitere Frage:

    Wenn ich mich bei meinem Datenbankfrontend im Adminbereich bewege, werden mir alle Sätze aus der Datenbank in einer Tabelle ausgegeben, aber im Unterschied zum normalen Usermodus gibt es in jeder Zeile einen Knopf zum Bearbeiten und einen zum Löschen des Datensatzes.

    Wenn man da drauf klickt, dann wird jeweils die php-Datei für den Editier- oder den Löschvorgang ausgeführt.
    So weit, so gut.
    Die Frage ist jetzt nur, wie ich dem System klarmache, welchen Eintrag ich löschen möchte.
    Die Tabelleneinträge sind ja "loser Text" und nicht indiziert, die Buttons auch nicht.

    Ich müsste also diese Sachen irgendwie in Relation zu den Knöpfen mit Indizes versehen (Knopf-ID = Eintrags-ID oder so...).

    Wie kann man sowas elegant lösen?

  • So, ich bin jetzt etwas weiter:

    Die Datensätze aus der HTML-Tabelle habe ich in einem array indiziert.
    Und die Buttons werden jeweils dynamisch bei einer Suchanfrage durchnummeriert.
    Das funktioniert so, dass ich den Index der Einträge für das Array, dass in der Suchfunktion erstellt wird auch gleich als [b]value[b] an die dabei erzeugten Submitbuttons übergebe, also:


    Die Editbuttons haben folglich die [b]values[b] ed0 bis ed$i und die Löschbuttons analog del0 usw.

    Es ist also jetzt so, dass der Index eines Suchtreffers in einer Tabellenzeile (bzw. im Array $ids) mit dem numerischen Teil des [b]values[b] der Knöpfe in dieser Zeile übereinstimmt.

    Nun zum eigentlichen Problem:

    Die Ausführung des Editier- oder Löschskriptes (edit.php, del2.php) hängt zum einen vom Buchstabenteil (wie heißt das wissenschaftlich? alpha...?) und zum anderen vom numerischen Teil des [b]values[b] des Knöpfchens ab.

    Problem: Wie zerteile ich bspw. ed35 in "ed" und 35?

    Ich stelle mir den Aublauf dann etwas so vor (bissl Pseudocode):

    In den Dateien edit.php und del2.php müsste dann jeweils $y ausgewertet werden, also entweder

    "Lösche array[$y]"

    oder

    "Editiere array[$y]".

    Aber erstmal müsste ich eben wissen, wie ich die Variable aufteile oder evtl. einfach umwandle.

    Danke im Voraus!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!