Ankündigung

Einklappen
Keine Ankündigung bisher.

Kurse Einschreibung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kurse Einschreibung

    Hallo Zusammen,

    ich baue gerade ein Einschreibungssystem für angebotene Kurse an unserer Hochschule. Es gibt ein bestimmte Anzahl an Kursen, deren Teilnehmerzahl begrenzt ist.
    Was ich bisher gemacht habe: Ich habe ein simples PHP-Formular erstellt und selbstverständlich mit der Datenbank verbunden. Somit kann sich der Einschreibende nun in einen Kurs eintragen und erscheint in der Datenbank in einer Tabelle. Die Tabelle hat mehrere Spalten für Nachname, Vorname und den gewünschten Kurs.
    Soweit hat erstmal alles gut geklappt.
    Nun besteht immernoch das Problem, dass die Teilnehmerzahl der Projekte nicht eingeschränkt ist. Theoretisch bräuchte ich doch jetzt für jeden angebotenen Kurs eine Tabelle und müsste deren Zeilenanzahl begrenzen. Wenn sich jetzt jemand beispielsweise für Kurs 4 entscheidet, wird er über eine Fallunterscheidung in die Tabelle für Kurs 4 eingetragen, sofern da noch Platz ist.
    Ist das vom Prinzip her richtig? Wenn ja, wie kann man dies umsetzten? Oder gibt es auch simplere Methoden?
    Ich bedanke mich schon jetzt für die Antworten.
    Wie gesagt, ich bin Einsteiger im Gebiet PHP/SQL also würde ich mich über eine Erklärung sehr freuen.

    LG

  • #2
    Stichwort: Normalisierung

    Tabelle für Personen:
    PersonID | Vorname | Nachname

    Tabelle für Kurse:
    KursID | Kursname | Raum oder whatever..

    Tabelle ZuordnungKursPerson
    ZuordnungsID | KursID | PersonID


    Die Einhaltung der maximalen Teilnehmeranzahl setzt du dann um, indem du die Anzahl der Zuordnungen für den Kurs abfragst und je nachdem eine neue Zuordnung anlegst oder eben nicht.
    Die maximale Teilnehmeranzahl kannste auch in die Kursetabelle reinnehmen.
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Moin iX5lxq!

      Das ist leider Murks, für das geschilderte Szenario brauchst du drei Tabellen: Kurse, Teilnehmer, Verknüpfungstabelle Kurse-Teilnehmer. Tabelle Kurse hat Kurs-ID, Name, Beschreibung, max. Teilnehmeranzahl etc., Tabelle Teilnehmer enthält alle relevanten Daten zur Person, also ID, Name, Mail-Adresse etc., Verknüpfungstabelle nur Kurs-IDs und Teilnehmer-IDs. Somit kannst du hier mit einem einfachen count ermitteln, ob der Kurs voll ist. Das mal so als groben Denkanstoß.

      Gruß

      dk

      Kommentar


      • #4
        Nein, du musst die Tabellen nur geschickt vernetzen:

        Tabelle kurse: id, name, max_teilnehmer(nullable), ...
        Tabelle studenten: id, vorname, nachname, ...
        Tabelle kurse_stundenten: id, kurs_id, student_id

        Mit PHP (MySQL) checkst du vorher, wieviele sich bereits eingschrieben haben (SELECT COUNT(*) FROM kurse_studententen WHERE kurs_id = 4) und vergleichst das mit dem Wert "kurse.max_teilnehmer". Dann nimmst du die Eintragung vpr.

        edit// ok, zweimal zu langsam

        Kommentar


        • #5
          Zitat von iX5lxq Beitrag anzeigen

          Die Tabelle hat mehrere Spalten für Nachname, Vorname und den gewünschten Kurs.
          Also steht hier im Prinzip jeder Eintrag für einen Platz in einem bestimmten Kurs. Wenn du nun prüfen möchtest ob in einem bestimmten Kurs noch ein Platz frei ist, musst du einfach nur die Einträge in dieser Tabelle zählen, welche diesen Kurs beinhalten.

          Beispiel: Wenn Kurs A max 20 Mitglieder haben darf dann dürfen auch maximal 20 Einträge in dieser Tabelle mit dem Kurs A sein. Wenn es weniger sind, ist noch Platz im Kurs.

          Edit: 3 mal zu langsam...

          Kommentar


          • #6
            Um das zu realisieren und die Benutzerfreundlichkeit des Formulars zu steigern, könntest Du eine zweite Tabelle erstellen

            kurse
            ======
            KursID INT 255 AutoIncrement
            Name VARCHAR 300
            MaxTeil INT 3

            Darin könntest Du den Namen des Kurses eingeben, die maximale Teilnehmerzahl mit angeben.

            Nun kannst Du in Deinem Eintrage-Formular ein Dropdown Menü mit den Namen der Kurse aus der Tabelle kurse erscheinen lassen.

            Vor jedem eintragen lässt Du nun die Eintragungen zu dem ausgewählten Kurs in Deiner Tabelle zählen und wenn sie kleiner der MaxTel ist, kannst Du den Eintrag zulassen, ansonsten gibst Du eine Fehlermeldung aus.

            Kommentar


            • #7
              1st #getOnMyLevel
              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

              Kommentar


              • #8
                Zitat von iX5lxq Beitrag anzeigen
                Hallo Zusammen,
                . . .
                Wenn sich jetzt jemand beispielsweise für Kurs 4 entscheidet, wird er über eine Fallunterscheidung in die Tabelle für Kurs 4 eingetragen, sofern da noch Platz ist.
                Ist das vom Prinzip her richtig?
                . . .
                LG
                Hi,

                besser wäre, der Kurs würde gar nicht erst angeboten, wenn kein Platz mehr frei ist.

                Also: Vorher Tabellen nach Teilnehmeranzahl abfragen, dann Kurs anbieten oder nicht anbieten. Oder als Kurs belegt anzeigen mit Option, sich auf eine Warteliste eintragen zu können, wenn jemand abspringt.

                Gruß
                Günni

                Kommentar


                • #9
                  Also, erstmal ein riesen Dankeschön an alle, die auf meine Frage geantwortet haben!

                  Nun @VPh, daten-k und alxy die Frage:
                  Das Konzept erscheint mir logisch. Wie kann ich diese Eintragung in die drei verschiedenen Tabellen realisieren?

                  Und @Crazynet
                  Ich habe tatsächlich auch schon neben dem Eintragungs-Formular eine separate Seite mit einer Tabelle aller Kurse erstellt. Diese Tabelle ist dynamisch, also mit der Datenbank verbunden. Ich habe also bereits in der Datenbank eine Tabelle mit allen Kursen. Auch ein Dropdown-Menü habe ich bereits in mein Formular eingebaut. Allerdings ist dies noch nicht dynamisch, also die Items sind noch manuell eingetragen.

                  Kommentar


                  • #10
                    Zitat von iX5lxq Beitrag anzeigen
                    Also, erstmal ein riesen Dankeschön an alle, die auf meine Frage geantwortet haben!

                    Nun @VPh, daten-k und alxy die Frage:
                    Das Konzept erscheint mir logisch. Wie kann ich diese Eintragung in die drei verschiedenen Tabellen realisieren?
                    Normalerweise finden alle drei Eintragungen unabhängig voneinander statt. Es wäre aber auch kein Problem, drei Statements mit einem Skriptaufruf abzusetzen.

                    Aber normalerweise würde ich doch sagen, dass es so abläuft. Der Student registiert sich -> neuer Eintrag in der Tabelle stundenten. Der Kurs wird angelegt -> neuer Eintrag in der kurse Tabelle. Ein Student wählt einen Kurs -> neuer Eintrag in der Verknüpfungstabelle.

                    Kommentar


                    • #11
                      Zitat von alxy Beitrag anzeigen
                      Normalerweise finden alle drei Eintragungen unabhängig voneinander statt. Es wäre aber auch kein Problem, drei Statements mit einem Skriptaufruf abzusetzen.

                      Aber normalerweise würde ich doch sagen, dass es so abläuft. Der Student registiert sich -> neuer Eintrag in der Tabelle stundenten. Der Kurs wird angelegt -> neuer Eintrag in der kurse Tabelle. Ein Student wählt einen Kurs -> neuer Eintrag in der Verknüpfungstabelle.
                      Hierzu muss ich sagen, dass das ganze bewusst ohne Registrierung abläuft. Also gibt der Student erst beim Eintragen seinen Namen angibt.
                      Auch die Kurse werden nicht alle einzeln erstellt, sondern alle zusammen in die Datenbank importiert werden. Aber das sollte ja in diesem Fall kein Problem darstellen.

                      Kommentar


                      • #12
                        Zitat von iX5lxq Beitrag anzeigen
                        Nun @VPh, daten-k und alxy die Frage:
                        Das Konzept erscheint mir logisch. Wie kann ich diese Eintragung in die drei verschiedenen Tabellen realisieren?
                        Die Eintragung erfolgt nur in die Zuordnungstabelle.

                        Die Tabelle für die Kurse muss vorher befüllt sein, ist sie ja bei dir auch schon.

                        Die Tabelle für Personen, ist je nach Anwendungsszenario optional. Wenn man sich einfach so mit irgendeinem Namen zu einem beliebigen Kurs eintragen kann, kannst du dieses Tabelle auch einfach weglassen und die Personennamen mit in die Zuordnungstabelle schreiben.
                        Wenn nur Studenten auf die Einschreibungen zugreifen dürfen sollen, brauchst du eine Tabelle in der alle Studenten drin stehen. Die müssen sich dann einloggen, Kurs auswählen und die Anwendung kann die Zuordnung herstellen.

                        Also, für genaueres fehlen mir Infos zum Usecase.
                        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                        Kommentar


                        • #13
                          Zitat von VPh Beitrag anzeigen
                          Also, für genaueres fehlen mir Infos zum Usecase.
                          Ich mache das ganze ohne Login (bewusst, nicht wegen des Mehraufwands)

                          Also der Student gibt in das gleiche Formular, wo er seinen gewünschten Kurs angibt auch seinen Namen an.

                          Da das ganze nur für einen kurzen Zeitraum bereitgestellt wird und nur die Studenten den Link wissen, sehe ich da kein großes Risiko von Fremdeintragungen.

                          Kommentar


                          • #14
                            Jo, dann kannste dir eine Tabelle sparen.

                            Kurse
                            ID | Name | MaxTeilnehmerzahl | ...

                            Zuordnung
                            ZuordnungsID | KursID | Vorname | Nachname


                            Empfehlung zur Programmierung: http://www.peterkropff.de/site/php/pdo_pdo.htm
                            Prepared Statements ansehen, damit bist du dann vor SQL-Injections geschützt.

                            Und auch wichtig: http://www.php.de/wiki-php/index.php...Site_Scripting
                            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                            Kommentar


                            • #15
                              Zitat von VPh Beitrag anzeigen
                              Stichwort: Normalisierung

                              Tabelle für Personen:
                              PersonID | Vorname | Nachname

                              Tabelle für Kurse:
                              KursID | Kursname | Raum oder whatever..

                              Tabelle ZuordnungKursPerson
                              ZuordnungsID | KursID | PersonID


                              Die Einhaltung der maximalen Teilnehmeranzahl setzt du dann um, indem du die Anzahl der Zuordnungen für den Kurs abfragst und je nachdem eine neue Zuordnung anlegst oder eben nicht.
                              Die maximale Teilnehmeranzahl kannste auch in die Kursetabelle reinnehmen.
                              Also, ich habe jetzt beschlossen, die Tabelle für die Personen und die Tebelle für die Kurse bereits vorzugeben. Somit kann sich beispielsweise nur jemand Eintragen, dessen Name bereits in die Tabelle Personen hinterlegt ist.
                              Nun zum technischen: Wie kann ich die Anzahl der Zuordnungen abfragen (mit select count?) und wie kann ich die Zuordnung anlegen?

                              Kommentar

                              Lädt...
                              X