Vorschläge gesucht

  • Hallo,

    ich suche nach einem Lösungsvorschlag für folgendes Problem:
    Ich habe eine sehr lange Liste mit Einträgen, die aus der Datenbank geholt werden. Nun soll der Nutzer aus dieser Liste ein oder mehrere Einträge auswählen können. Dabei möchte ich es dem Nutzer ggf. zusätzlich ermöglichen, über eine Schaltfläche(?) alle/keinen Einträg auszuwählen.
    Soweit, so gut. Meine erste Idee war ein Select-Feld das Mehrfachauswahl erlaubt. Aber auf den zweiten Blick ist das doch eher ungünstig, da der Nutzer wissen muß, daß er die Shift-Taste drücken muß um nicht alle selektierten Einträge zu verlieren :(
    Meine zweite Idee waren zwei Felder: links eins mit allen noch möglichen Einträgen und rechts eins mit allen gewählten Einträgen (wie z.B. in vielen Mailprogrammen bei Auswahl der Empfängeradressen). Hierbei weiß ich allerdings nicht, ob das ganze über JavaScript zu realisieren ist und wenn ja, ob ich über PHP an alle Einträge der rechten Box rankomme (diese sind ja nicht zwingend selektiert)?

    Kann mir da jemand helfen oder hat gar eine ganz andere Lösungsidee?

    Vielen Dank,
    Petra

  • Hallo Petra,

    hört sich etwas komplexer an, Dein Problem, generell kann ich Dir aber sicherlich helfen. Jedoch ist mit der sachliche Zusammenhang nicht nicht 100%ig deutlich.

    Wie ist das mit den zwei Checkboxen gemeint, eine rechts und eine links. Welche Box hat welche Funktion?

    Grundlegend läßt sich aber dazu sagen, dass es sich in Javascript sicher lösen läßt, es ist nur nicht ganz trivial. Über PHP diese Boxen abfragen, kein Problem.

    Ich würde mich über eine etwas detailliertere Beschreibung freuen, da ich Dir so nicht weiter helfen kann.

  • Ok, ich werde mal versuchen die ganze Sache etwas deutlicher darzustellen.

    Mal nebenbei: Das ganze System sieht man häufiger mal ... z.B. bei Outlook Express wenn man aus dem Adressbuch mehrere Empfänger aussucht.

    Ich habe eine große Anzahl an Wahlmöglichkeiten für den Nutzer. Da habe ich mir gedacht, daß ich diese in einem mehrzeiligen Select-Feld anzeigen könnte (das linke!). Hier kann sich der Nutzer eine oder mehrere Einträge auswählen. Ist er fertig mit der Auswahl klickt er auf nen Button (in den ganzen Mailprogrammen sind das immer Buttons mit nem Pfeil drauf). Wurde der Button (nach rechts) gedrückt, gehen die gewählten Einträge in das rechte Select-Feld, in dem alle gewählten Einträge drin stehen. Die Einträge die gewählt sind (d.h. im rechten Selec-Feld stehen), sind im linken Select-Feld nicht mehr vorhanden (sonst wird es noch schwerer, wenn man jedesmal vergleichen muß, ob ein gewisser Eintrag bereits gewählt wurde oder nicht)
    Will der Nutzer nun einen Eintrag deselektieren (d.h. vom rechten in das linke Feld bekommen), muß er diesen wiederum anklicken und auf einen Button mit einem Pfeil in die andere Richtung klicken.

    Im Endeffekt befinden sich im rechten Feld alle gewählten Einträge und im linken Feld die nicht gewählten Einträge.

    Code
    ------------------------                  ---------------------------
    I  nicht gewählte      I      -->         I  gewählte Einträge      I
    I  Einträge            I      <--         I                         I
    ------------------------                  ---------------------------


    Ja, das war's erstmal, ich hoffe das war etwas verständlicher.
    Bist du dir sicher, daß man sich mit PHP alle Einträge eines Select-Feldes holen kann, obwohl sie nicht selected sind? Normalerweise hat man doch nach dem submit nur Zugriff auf die Einträge die selected sind, oder nicht?


    Vielen Dank,
    Petra

  • Hallo Petra,

    vielen Dank, das nenne ich mal eine Klasse Beschreibung eines Problems. Aus dem Kopf kenne ich keine Lösung dafür, werde aber gerne mal etwas rumprobieren.

    So ist es natürlich nicht möglich, nicht selektierte Einträke mittels PHP auszulesen, aber wenn Du beide Felder in Summer betrachtest, hast Du ja alle, bzw sogar schon, wenn Du diese dynamisch aufbaust. Es geht doch sicherlich auch nur um die selektierten Einträge?

    Werde mich demnächst mal melden ... Mich interessiert das ganze auch.

  • Hallo Petra,

    ging doch wesentlich schneller, als ich dachte. Ich habe einfach mal die Schalter weggelassen, Du brauchst nur auf einen Eintrag klicken. Gerne baue ich das aber noch um. Nur ich finde es so bequemer.


    sel1 und sel2 kannst Du natürlich entsprechend umbenennen.

  • Hallo Beatz,

    das ist ja echt cool :) Vielen Dank!!!
    Es wäre für meinen Fall besser, wenn ich mehrere Einträge mit einem mal rüberkriege, weil in der Liste bis zu 300 Einträge stehen können. Das kann man ja keinem Nutzer zutrauen.
    Und unverschämterweise muß ich gleich mal fragen, ob man die alphabetische Reihenfolge beibehalten kann?

    Die Sache mit dem Auslesen in PHP ist natürlich immernoch da. Mich interessieren in der Tat nur die selektierten Einträge. Mir schwebt jetzt irgendwas in der Form vor, das man nach dem submit über JavaScript einfach alle Einträge des rechten Felds als selected markiert und schon müßte es gehen!?!

    Nochmal danke,
    Petra

  • Hallo Petra,

    Cyberlord hat ja bereits ein ähnliches Skript gepostet, hätte ich das eher gewußt :x , womit das geht. Die Liste alphabetisch zu ordnen sollte im Grunde genommen auch gehen. Ich werd mal schauen, ob sich da was machen läßt, kann aber nicht versprechen, ob ich das hinbekomme.

    Der Rest mit PHP, zumindest das auslesen ist recht einfach. Wenn Du dann Fragen hast, helfe ich auch gerne weiter!

  • Hallo,

    ich habe jetzt eine Version zusammengekriegt die die Einträge alphabetisch sortiert beibehält. Nur funktioniert das ganze leider nicht mit PHP :( Da ich die Felder aus dem rechten Select-Feld noch mit PHP auslesen will, muß ich dieses als Array definieren. Nur leider funktionieren dann die JavaScript-Sachen nicht mehr.

    Code
    <select name=select2[] size=10 multiple>


    Kann mir jemand sagen, wie ich mit JavaScript auf Select-Felder als Arrays zugreife?

    Danke für eure Mühe!!!!!!
    Petra


    Der Quellcode für die dies interessiert:

  • Mach eine PHP-Schleife mit dem Array und gib das in JavaScript über.
    zB

    Code
    print "array(0) = .$arr(0)."

    oder so ähnlich. :D

    Könnte dir das nur in ASP bzw. VBScript und JavaScript zeigen.

  • Naja, das Problem liegt darin, dass man das Select-Feld mit eckigen Klammern am Ende benennen muss. Und dann mit Javascript nicht vernünftig drauf zugreifen kann. Leider mache ich nicht sonderlich viel in JavaScript. Ich würde jedoch vermuten, dass es mit dem Befehl eval funktioniert, erste Versuche schlugen jedoch fehl. Ich werde mich aber nochmal dran setzen!