• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Elemente verschieben: Javascript, Java oder Flash?

J

jannmann

Guest
Ich habe eine Anwendung mit PHP erstellt und MySQL-Datenbank. In der Anwendung werden in einem Bereich Stichworte gesammelt, die dann später passend gruppiert werden:

Stichworte, z.B.

Bäcker
VW
rot
grün
BMW
Audi
gelb
Landwirt
Schuster

Gruppieren:
Bäcker -> Beruf
VW -> KFZ-Hersteller
rot -> Farbe
grün -> Farbe
BMW -> KFZ-Hersteller
Audi -> KFZ-Hersteller
gelb -> Farbe
Landwirt -> Beruf
Schuster -> Beruf

Mit PHP kann ich es über HTML-Selektfelder machen, das kommt mir aber ein wenig altmodisch vor.

Am liebsten wäre es mir, links die Stichworte stehen zu haben und rechts Boxen für die Gruppen und dann die Stichworte einzeln nach rechts in die richtige Gruppe zu ziehen. Das bekomme ich ausschließlich mit PHP und HTML natürlich nicht hin.

Bevor ich anfange, mich in eine neue Programmiersprache einzuarbeiten drei Fragen:
1. Ich vermute, die Lösung wäre Javascript, Java oder Flash. Java und Flash will ich eigentlich nicht auf meiner Webseite haben. Wäre Javascript ein guter Weg, um mein Ziel zu erreichen?

2. Wäre es sinnvoller, bei jedem verschieben eines Stichwortes in eine Gruppe das Ergebnis an PHP zu übergeben, damit es in MySQL gespeichert wird oder den Benutzer erst alle Stichworte Gruppieren zu lassen und erst wenn er speichern drückt, alles in einem Rutsch an PHP zu übergeben?

3. Falls ich es doch einen erfahrenen Javascript-Programmierer machen lasse, wieviel Stunden wird der (ganz unverbindlich) pi x Daumen dafür benötigen? Will nur erahnen, ob so etwas ewig schwierig oder relativ leicht ist.

Extrafrage:
Ich habe gerade eine ganz verwegene Idee: Wäre es möglich, dass man mehreren Benutzern gleichzeitig alle Stichworte gibt und jeder von denen gruppiert und die anderen sehen das sofort auf ihrem Bildschirm und können auch bei Bedarf ein Stichwort umgruppieren??

Bin auf Eure Anregungen richtig gespannt :)
 
Zuletzt bearbeitet:
Cool, dass du solange hier Mitglied bist obwohl du kein JS machst :)

Ja, JS wäre dafür genau das Richtige. Und benutzerspezifische Sortierung ist dann abhängig davon, wie du das im Backend speicherst.
Ich würde mir dafür mal Draggable aus jQuery's UI anschauen, damit sollte das in wenigen Zeilen möglich sein: https://jqueryui.com/draggable/
Anschließendes Speichern dann per jQuery .ajax().

Bei Fragen einfach hier nochmal melden bitte.
 
Cool, dass du solange hier Mitglied bist obwohl du kein JS machst :)

Ich programmiere viel in PHP und natürlich läuft einem dabei immer wieder JS über den Weg. Aber außer ein paar fertigen Skripten, die angepasst habe, bin ich nie richtig in JS eingestiegen

Ja, JS wäre dafür genau das Richtige. Und benutzerspezifische Sortierung ist dann abhängig davon, wie du das im Backend speicherst.
Ich würde mir dafür mal Draggable aus jQuery's UI anschauen, damit sollte das in wenigen Zeilen möglich sein: https://jqueryui.com/draggable/
Anschließendes Speichern dann per jQuery .ajax().

Das liest sich ja und hört sich wirklich erbaulich an.
Wäre auch meine oben genannte Extrafrage mit JS lösbar?

Und - gibt es jemanden hier (oder an einen anderen Ort im Internet), den man dazu evtl. mal live sprechen könnte, um mein ganzes Vorhaben mit Javascript zu besprechen und eine Einschätzung über die Machbarkeit zu erhalten?
 
Zur Extrafrage: personenbezogene Speicherung der Gruppierung: ja, relativ einfach. Aber dass andere diese Gruppierung sofort sehen ist etwas schwieriger. Was machst du, wenn mehr als einer gleichzeitig am Gruppieren sind? Wer hat Vorrang? Und zweitens müssten dafür alle Benutzer dauernd pollen, um mit zu bekommen, ob jemand was gruppiert hat. Je nach Struktur der Anwendung kann das unnötigen Traffic in erheblichem Ausmaß erzeugen. Oder besteht die techn. Möglichkeit, auf dem Server mit WebSocket zu arbeiten?
 
Zur Extrafrage: personenbezogene Speicherung der Gruppierung: ja, relativ einfach. Aber dass andere diese Gruppierung sofort sehen ist etwas schwieriger. Was machst du, wenn mehr als einer gleichzeitig am Gruppieren sind? Wer hat Vorrang? Und zweitens müssten dafür alle Benutzer dauernd pollen, um mit zu bekommen, ob jemand was gruppiert hat. Je nach Struktur der Anwendung kann das unnötigen Traffic in erheblichem Ausmaß erzeugen. Oder besteht die techn. Möglichkeit, auf dem Server mit WebSocket zu arbeiten?

Zu Deinen 2 Fragen:

1. Konflikte, wenn zwei gleichzeitig das gleiche tun, also das selbe Stichwort in eine ANDERE Gruppe schieben. Meine Idee ist: in diesem Fall das Stichwort sofort wieder aus der Gruppe rausnehmen und zu den ungruppierten Stichworten legen. So sehen beide, es hat nicht geklappt.

2. Websocket: Danke für Deine Erklärungen und Deinen Link. Ist mir schnell klar geworden, dass ein Websocket für mein Vorhaben wohl nötig ist. Ob auf meinem Server die Möglichkeit besteht, weiß ich nicht. Bin für meine einfachen Projekte bei bei 1und1 und ganz zufrieden. Da mein jetziges Projekt erheblich größer wird und erheblich mehr User haben wird, könnte ein Wechsel nötig sein. Gibt es einen einfachen Test, ob 1und1 Websockets (außer Fragen, aber das ist kein Test :)) zulässt?
 
Zuletzt bearbeitet:
Nach meiner Info kann man Websockets nur auf einem Root-Server bekommen, nicht auf shared Hosts. Konkret bitte den jew. Provider fragen.

Wieviel User sind denn geplant? Vielleicht kann man doch was mit Polling machen. Ich denke da an Möglichkeiten, die Benutzer die gleichzeitig sortieren irgendwie schlau einzugrenzen. Ich würde mal behaupten, bis 20 User dürfte nicht mit Problemen zu rechnen sein. Wobei ich 1&1 nicht einschätzen kann, weil ich mit denen keine Geschäfte mache.
 
Wieviel User sind denn geplant? Vielleicht kann man doch was mit Polling machen. Ich denke da an Möglichkeiten, die Benutzer die gleichzeitig sortieren irgendwie schlau einzugrenzen. Ich würde mal behaupten, bis 20 User dürfte nicht mit Problemen zu rechnen sein. Wobei ich 1&1 nicht einschätzen kann, weil ich mit denen keine Geschäfte mache.

Langfristig müssen das deutlich über 20 User werden, die gleichzeitig das System nutzen, sonst hätte sich der Riesenaufwand, den ich in die Applikation gesteckt habe, nicht gelohnt. Für den Anfang kann man mit 20 Usern gleichzeitig hinkommen.

Ich fasse mal in meinen Worten zusammen, um zu sehen, ob ich alles richtig verstanden habe:

Es geht ja um die Frage "Wie bekommt der User mit, wenn sich etwas (in der Datenbank) geändert hat?"
Das spielt sich also an der Schnittstelle PHP <-> Javascript ab.

Alternative I: "Pull" - das wird ausgelöst von Javascript (Client): JS schickt dann laufend Abfragen an PHP.

Alternative II: "Push" - das wird ausgelöst von PHP (Server): PHP schickt genau dann etwas, wenn neues in der Datenbank steht.
Also müsste PHP laufend angestoßen werden, um zu prüfen, ob etwas in der Datenbank steht. Ich schätze alle 1/2 Sekunden, damit der Benutzer Änderungen fast unmittelbar mitbekommt. Wahrscheinlich müsste man dafür ein zusätzliches kleines PHP-Script schreiben, um nicht immer den ganzen PHP-Framework aufzurufen.

Wäre es sinnvoll mit Alternative I zu beginnen um dann im Bedarfsfall auf II umzusteigen? Oder zu aufwändig?
 
Zuletzt bearbeitet:
Ich habe selbst noch nicht mit Websockets gearbeitet aber in der Theorie was ich darüber gelesen habe müsste das so gehen, dass ein PHP Script alle "laufenden" Websockets quasi von der Änderung unterrichtet. Das ist ja der Sinn und Zweck des Websockets Servers. Von daher muss es nicht laufend angestoßen werden sondern der Anstoß eines einzigen Users reicht zur Weiterreichung an alle bestehenden Websockets.

Ansonsten würde ich sagen richtig wieder gegeben. Wie gesagt, ich habe leider keine Praxiserfahrung mit Websockets aber ich vermute, dass das im Grunde - abgesehen von der DB Kommunikation - was völlig anderes ist als Dauerpoll aller User. Deshalb würde ich - wäre ich in deiner Lage - direkt mit A oder B anfangen aber nicht darauf hoffen, dass man das eine teilweise für das andere verwenden kann, falls man später doch umsteigt. Ob Websockets möglich sind oder was für Kosten anfallen es möglich zu machen kann man ja schnell rausfinden. Wenn das im Budget liegt würde ich direkt damit beginnen und mich darauf konzentrieren. Falls nicht mach Dauerpoll. Das kann man ja später bei zunehmender Nutzerzahl an der Leistungsfähigkeit des Servers optimieren und/oder die gleizeitigen Sortierer quantitativ einschränken nach dem Motto "hierfür sind nur x User gleichzeitig erlaubt bitte später nochmal versuchen".

Falls es Websockets wären würde ich mich sehr freuen, wenn du das hier ab und zu ein bisschen zeigen würdest. Das ist bestimmt eine spannende Angelegenheit.
 
Zurück
Oben