Meowsalot: Felder dynamisch füllen wenn Ergebnis vorhanden ist

Hallo,

ich habe ein kleines Problem wo ich nicht weiter kommen. Folgendes Formular habe ich:

<div>

	<form method="post" action="" class="frm" name="cnt_form_projekt">

		<label for="projektID">Projekt-ID</label>
		<input type="text" name="projektID" id="projektID" value="">

		<label for="name">Name</label>
		<input type="text" name="name" id="name" value="">
		
		<label for="vorname">Vorname</label>
		<input type="text" name="vorname" id="vorname" value="">
		
		<label for="email">E-Mail Adresse</label>
		<input type="email" name="email" id="email" value="">

		<button id="eintragen" class="btn">Speichern</button>

	</form>
	
</div>

In der Datenbank habe ich eine Tabelle die wie folgendermaßen ausschaut

CREATE TABLE `inhaber` (
  `pl_id` int(11) NOT NULL,
  `pl_nummer` varchar(25) NOT NULL,
  `pl_name` varchar(100) NOT NULL,
  `pl_vorname` varchar(100) NOT NULL,
  `pl_email` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Jetzt zu meiner Frage, wie kann ich es am einfachsten umsetzten wenn ich im ersten Feld eine Projekt-ID eintrage und es in der Datenbank ein Eintrag gibt dass die weiteren Felder automatisch ausgefüllt werden ohne dass die Seite neu geladen werden? Wir reden von ca. 10 - 25 Einträge, also nicht sonderlich viel.

Bin für jede Hilfe dankbar.

Bis bald!
Meowsalot (Bernd)

  1. @@Meowsalot

    Datanbank ist nicht mein Thema, aber DEFAULT CHARSET=latin1? 2018? Ernsthaft?

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  2. Tach!

    Jetzt zu meiner Frage, wie kann ich es am einfachsten umsetzten wenn ich im ersten Feld eine Projekt-ID eintrage und es in der Datenbank ein Eintrag gibt dass die weiteren Felder automatisch ausgefüllt werden ohne dass die Seite neu geladen werden?

    Zum Beispiel so wie es in der HTTP-Welt gängig ist. Ajax-Request an den Server senden, Ergebnis in die Seite einbauen. Und serverseitig ist das auch kein Hexenwerk: Request entgegennehmen, Datenbankabfrage ausführen, Abfrageergebnis ausgeban, beispielsweise im JSON-Format. Alles keine Raketenwissenschaft.

    dedlfix.

  3. Hallo Meowsalot,

    JavaScript ist einfach nicht mein Ding.

    • Meowsalot, April 2018

    Angesichts dessen solltest Du neben das Projekt-ID Feld einen Button "ID nachschlagen" setzen, der das Formular abschickt, die fehlenden Daten ergänzt und das Formular neu aufbaut. Affenformular-plus, sozusagen. Der User gibt die ID ein, drückt TAB (kommt idealerweise auf den Suchbutton), drückt ENTER und bekommt die Projektdaten. Serverseitig KÖNNTEST Du in diesem Fall - UND NUR IN DIESEM - über das autofocus Attribut erreichen, dass der Cursor bei der Rückkehr gleich auf dem nächsten sinnvollen Feld steht.

    Die JavaScript-Idee wäre, sich auf das change-Event des projektId input zu registrieren, aus dem Change-Handler einen Ajax-Call abzusetzen der ein PHP Script von Dir ruft; dieses Script gibt bspw. einen JSON-String zurück, den nimmst Du beim Success-Handler des Ajax-Calls entgegen, holst die Daten 'raus und schreibst sie in die Formularfelder. Das ist keine Raketentechnik, aber für jemanden, der sich mit JavaScript schwer tut, ist es trotzdem eine Herausforderung.

    Update: LOL - ich habe das ohne Kenntnis von Dedlfix' Beitrag geschrieben. Ist ja echt die Rakete.

    Rolf

    --
    sumpsi - posui - clusi
  4. Hallo,

    Jetzt zu meiner Frage, wie kann ich es am einfachsten umsetzten wenn ich im ersten Feld eine Projekt-ID eintrage und es in der Datenbank ein Eintrag gibt ..

    Überlege Dir ein Event was gefeuert werden soll. Das löst einen Request aus mit dem Parameternamen id= und dem Wert der sich als encodeURIComponent aus dem value des entsprechenden Eingebfeldes ergibt.

    dass die weiteren Felder automatisch ausgefüllt werden ohne dass die Seite neu geladen werden?

    Dann darf die eingetragene ID aber nur einen Record liefern. Falls das jedoch mehrere sind, musst Du dafür sorgen daß aus diesen ausgewählt werden kann.

    Ansonsten: Mit dem Request, siehe oben, geht die eingetippte ID ab zum Server und der sorgt dafür daß exakt(!) ein Record zurückkommt. Also ein Record mit allen Datenfeldern.

    Falls es zur requesteten ID keinen Solchen gibt, sollte das dann aber auch im Formular zu sehen sein. Z.b. darurch daß überall undefined drinsteht. Für den Anwender also sichtbar, ob ein legacy Record im formular steht oder ob er einen neuen anlegen soll.

    MfG

  5. Lieber Meowsalot,

      `pl_name` varchar(100) NOT NULL,
      `pl_vorname` varchar(100) NOT NULL,
    

    das genügt nicht! Nicht nur die 100 Zeichen sind meines Erachtens etwas knapp, auch mehrteilige Vornamen mit abgegrenztem Rufnamen und Namenszusätze können so nicht korrekt erfasst werden. Vielleicht ist das für Deinen Anwendungsfall egal, aber irgendwie empfinde ich das als "am falschen Ende gespart".

    Liebe Grüße,

    Felix Riesterer.

    1. Hallo Felix,

        `pl_name` varchar(100) NOT NULL,
        `pl_vorname` varchar(100) NOT NULL,
      

      das genügt nicht! Nicht nur die 100 Zeichen sind meines Erachtens etwas knapp, auch mehrteilige Vornamen mit abgegrenztem Rufnamen und Namenszusätze können so nicht korrekt erfasst werden. Vielleicht ist das für Deinen Anwendungsfall egal, aber irgendwie empfinde ich das als "am falschen Ende gespart".

      Wenn man es genau nimmt, ist die Unterteilung in Vor- und Nachname schon ein Problem. Nicht jeder Mensch hat einen europäischen Namen.

      LG,
      CK

      1. @@Christian Kruse

        Wenn man es genau nimmt, ist die Unterteilung in Vor- und Nachname schon ein Problem. Nicht jeder Mensch hat einen europäischen Namen.

        Personennamen aus aller Welt

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      2. Hallo Christian,

        Wenn man es genau nimmt, ist die Unterteilung in Vor- und Nachname schon ein Problem. Nicht jeder Mensch hat einen europäischen Namen.

        würdest du alles in ein Feld speichern?

        Bis bald!
        Meowsalot (Bernd)

        1. Hallo Meowsalot,

          Wenn man es genau nimmt, ist die Unterteilung in Vor- und Nachname schon ein Problem. Nicht jeder Mensch hat einen europäischen Namen.

          würdest du alles in ein Feld speichern?

          Hängt davon ab[tm]. Schau dir am besten die Seite an, die Gunnar verlinkt hat, die stellt auch ein paar valide Strategien vor. Alles in einem Feld zu speichern ist aber in der Tat eine Strategie, die eigentlich alles abdeckt. Musst du nur noch dafür sorgen, dass Menschen wie dieser arme Kerl angesprochen werden können 😀

          LG,
          CK

    2. Hallo Felix,

      wie viele Zeichen würdest du denn für den Vornamen und Nachnamen einplanen?

      Bis bald!
      Meowsalot (Bernd)

      1. Lieber Meowsalot,

        wie viele Zeichen würdest du denn für den Vornamen und Nachnamen einplanen?

        varchar(200)

        Liebe Grüße,

        Felix Riesterer.

      2. Tach!

        wie viele Zeichen würdest du denn für den Vornamen und Nachnamen einplanen?

        Die Felder sind VARCHAR, mit VAR wie in variabel. Die nehmen nur soviel Speicherplatz ein, wie die Inhalte wirklich lang sind. Du kannst da also ruhig mit größeren Zahlen operieren. Zudem sollte bei der Beantwortung der Frage immer der Anwendungsfall berücksichtigt werden. Müssen internationale Namen gespeichert werden, in denen komplette Lebensgeschichten der Vorfahren enthalten sind? Oder geht es um einen abgeschlossene Datenbestand, bei dem man also die Länge bereits kennt und sie deshalb nicht übermäßig groß werden kann? Müssen die Namen für beispielsweise behördliche Zwecke vollständig vorliegen oder reicht eine für den täglichen Gebrauch verwendete Kurzform? Diese Art Fragen musst du dem Auftragsgeber stellen.

        dedlfix.