Alex: Ajax - Hidden Feld mit "[]" übertragen!

Hallo Leute,

hier gleich meine 2. Ajax Frage.

Also mal zur Erläuterung: Ich versuche grad einen Kalender zu bauen dazu nutze ich PHP und Ajax. Wenn auf einen Tag im Kalender (ähnlich wie z.B. Outlook) geklickt wird, soll dieser Tag die Farbe ändern und unter dem Kalender soll stehen "Vorgemerkte Termine: #DAS_DATUM#"
Also man kann da dann fröhlich durch den Kalender browsen und sich Temrine vormerken, ganz am Ende sendet man dann die Speicherung ab.

So zu meinem Problem.
Habe jetzt die Daten unter "Vorgemerkt" stehen und daneben immer ein hidden field (name="vorgemerkt[]") mit dem Datum. Wenn ich das Formular jetzt richtig absende bekommt mein PHP Skript einen Array mit den Daten.
Wie kann ich jetzt aber dem Ajax Dings verklickern, dass es dem PHP-Kalenderskript sagt, dass die jeweiligen Tage gefärbt werden sollen?
Ich würde gerne einfach diesen Array senden - habe aber keine ahnung wie?

Oder weis jemand vielleicht eine andere Möglichkeit umd die Daten einzufärben?

mfg
Alex

  1. Hi,

    Habe jetzt die Daten unter "Vorgemerkt" stehen und daneben immer ein hidden field (name="vorgemerkt[]") mit dem Datum. Wenn ich das Formular jetzt richtig absende bekommt mein PHP Skript einen Array mit den Daten.
    Wie kann ich jetzt aber dem Ajax Dings verklickern, dass es dem PHP-Kalenderskript sagt, dass die jeweiligen Tage gefärbt werden sollen?
    Ich würde gerne einfach diesen Array senden - habe aber keine ahnung wie?

    Mach's genauso, wie ein normales Formular es auch macht.
    (Das kannst du dir am leichtesten anschauen, in dem du dir ein verkuerztes Formular mit drei oder vier derart benannten Feldern bastelst, und per GET abschicken laesst - dann findest du die Form, in der die Daten verschickt werden, im Querystring in der Adresszeile deines Browsers.)

    MfG ChrisB

  2. Hi!

    So ganz verstaendlich ist Deine Frage mir nicht. Ich weiss z.B. nicht was das einfaerben mit AJAX und php zu tun hat.

    Aber bei mir ist folgendes angekommen:

    Du hast ein Problem, die Formularfelder zu verschicken. Was du nicht getan hast: Erklaert wie du denn ueberhaupt Daten verschickst.

    Normalerweise sollte alles kein Problem sein, wenn du schlicht jedes Element des Formulars an deine AJAX Funktion uebergibst.

    Da Du dich aber ueber die essentiellen Punkte (deine Programmierung) nicht ausgelassen hast und mein persoenlicher Yogi (ein hervorragender Hellseher uebrigens) grad Urlaub zuhause macht, kann ich dazu auch nicht mehr sagen.

    1. Hallo und danke für die Antworten.

      Ich will es mal genauer erklären (wollte ja nicht mit zu viel Information nerven;)

      Also ich habe meine Administrationsseite.
      Auf dieser Seite wird auf wunsch ein Kalender eingeblendet. Die geschieht per Ajax und PHP.
      Mit Ajax wird das PHP Skript geladen, welches den Kalender ausspuckt, aufgerufen.
      Jetzt soll der Nutzer einfach auf seine Wunschdaten klicken können.
      Dieser klick soll zum einen auslösen, dass unter dem Kalender das angeklickte Datum als "Vorgemerkt" notiert wird. Zum Anderen soll gleichzeitig auf der entsprechende Tag eingefärbt werden, damit man sich besser zurechtfindet, was schon geklickt wurde.
      Wenn der User alles ausgewählt hat, klickt er auf speichern und die Daten werden in die DB eingetragen.

      Ich bin so weit, dass ich unter meinen Kalender alle ausgewählten Daten stehen habe und sie auch mittels der hidden-Fields auf normalem Wege übermitteln kann um sie in die DB zu speichern.

      Jetzt fehlt also nur noch die einfärbung.

      Ich rufe also nach jedem "notieren" die Kalender-Ajax-Funktion neu auf. Der Kalender soll dann die ganzen Daten die notriert wurden bekommen (am besten aus den Hidden-Fields) und die entsprechenden Tage einfärben (die, welche im ausgewählten Monat liegen natürlich nur).
      Ich kann einzelne Formulardaten übergeben. Was ich jetzt lernen möchte, ist das Übergeben meines "Vorgemerkt-Arrays". Da es eine unbestimmte anzahl an hidden-Fields ist, weis ich nicht wie ich diese einzeln ansprechen soll.

      Ich hoffe diese Erklärung hilft euch beim Helfen weiter ;)

      Vielen Dank nochmal.

      1. Hi,

        Ich kann einzelne Formulardaten übergeben. Was ich jetzt lernen möchte, ist das Übergeben meines "Vorgemerkt-Arrays". Da es eine unbestimmte anzahl an hidden-Fields ist, weis ich nicht wie ich diese einzeln ansprechen soll.

        Dann ueberlege dir zunaechst, wie du es ohne hippes AJAX, auf dem "klassischen" Wege machen wuerdest.

        Bilde diesen anschliessend, wenn gewuenscht, per AJAX nach.

        MfG ChrisB

        1. Hallo Chris

          ich glaube du verstehst meine Frage nicht ganz oder ich deine Tipps nicht. Der normale Weg hat hier denke ich wenig mit dem Problem zu tun. Wie dieser geht habe ich ja schon geschrieben.
          Der Array wird an PHP übergeben.
          Genauer:
          Bei jedem Klick auf ein Datumsfeld wird unter dem Kalender das Datum angezeigt. versteckt daneben ist das zugehörige Formularfeld (z.B. <input type=hidden name="daten[]" value="27.02.2008"> etc.)

          $_POST['daten'] ist jetzt im PHP ein Array. Beim erstellen des Kalenders wird nun überprüft ob das jeweilige Datum (erstellen per for schleife) im Array ist. Wenn ja, dann wird es eingefäbrt wenn nein, dann nicht.

          Ich verstehe nicht ganz wie ich von diesem Weg auf die AJAX Variante kommen soll? Ich brauche irgendwie diesen Daten-Array und habe keine Ahnung wie ich den da rein bekommen soll :(

          Würde sicher auch ohne AJAX gehen, dann müsste ich aber bei jedem Klick die komplette Seite neu laden.

          mfg
          Alex

          1. Hi,

            ich glaube du verstehst meine Frage nicht ganz oder ich deine Tipps nicht.

            Hoechstvermutlich letzteres - aber wir haben ja Zeit :-)

            Der normale Weg hat hier denke ich wenig mit dem Problem zu tun.

            Und ob er hat.

            Wie dieser geht habe ich ja schon geschrieben.
            Der Array wird an PHP übergeben.

            Also schau dir (endlich) an, *wie* das passiert - genauer, in welcher *Form*.

            Ich verstehe nicht ganz wie ich von diesem Weg auf die AJAX Variante kommen soll? Ich brauche irgendwie diesen Daten-Array und habe keine Ahnung wie ich den da rein bekommen soll :(

            In dem du den Request, der auf dem "normalen" Wege vom Browser an den Server gestellt wird, per AJAX nachbildest - also die Daten in genau dem gleichen Format uebertraegst, welches der Browser beim "normalen" Abschicken eines solchen Formulars benutzen wuerde.
            Wie du dir dieses Format anschauen kannst, wenn du dir darueber nicht im klaren bist, beschrieb ich bereits in meiner ersten Antwort.

            MfG ChrisB

            1. Hallo,

              ok dann bin ich mal gespannt ob wir es schaffen :)

              Das, was du in deiner ersten Antwort geschrieben hast habe ich da schon sofort gemacht. Die Adresszeile sieht dann so aus:
              ...test.php?datum%5B%5D=1&datum%5B%5D=2&datum%5B%5D=3

              Ich kenne mich sehr wenig mit JAvascript aus und mit dem Ajax habe ich gestern erst angefangen.

              Ich verstehe also wirklich nicht, worauf du hinaus willst.

              Gib mir doch bitte noch mal einen größeren Denkanstoß

              mfg
              Alex

              1. Hi,

                Das, was du in deiner ersten Antwort geschrieben hast habe ich da schon sofort gemacht. Die Adresszeile sieht dann so aus:
                ...test.php?datum%5B%5D=1&datum%5B%5D=2&datum%5B%5D=3

                Gut, also werden die Feldnamen und ihre Inhalte wohl in der absolut ueblichen Form uebertragen - als name=value-Paare, durch & voneinander abgetrennt.
                Die eckigen Klammern in den Feldnamen werden schlicht und einfach URL-kodiert uebertragen, wie andere Sonderzeichen im URL-Kontext auch.

                Ich kenne mich sehr wenig mit JAvascript aus und mit dem Ajax habe ich gestern erst angefangen.

                Ich verstehe also wirklich nicht, worauf du hinaus willst.

                Du kennst (jetzt) also das Format, in dem das PHP-Script deine Daten auf dem "normalen" Weg erhalten wuerde, und weisst, dass dein PHP-Script damit umgehen kann.

                Gib mir doch bitte noch mal einen größeren Denkanstoß

                Bilde eben dieses Format beim Uebertragen der Daten per AJAX nach.

                Wenn du detailiertere Hilfe willst, dann muss deine Problembeschreibung detailierter werden - statt "isch nix Idee wie machen das" musst du dann schon konkret beschreiben, woran du bei der Umsetzung denn nun scheiterst.

                MfG ChrisB

                1. Jetzt sind wir aber einmal ordentlich im Kreis gelaufen.

                  Dass name=value so übertragen werden kann ist mir schon klar.

                  Mein Problem ist:
                  Ich habe unbegrent viele Hidden-Felder mit diesem datum[] Array also kann ich da nicht jedes namentlich ansprechen um seine value zu bekommen.
                  Also was ich fragen will ist, wie bekomme ich diesen Array am besten in mein send()?

                  mfg
                  Alex

                  1. Hi,

                    Mein Problem ist:
                    Ich habe unbegrent viele Hidden-Felder mit diesem datum[] Array also kann ich da nicht jedes namentlich ansprechen um seine value zu bekommen.

                    Es gibt viele Wege, Formularelemente anzusprechen. Wenn jetzt wirklich dein einziges Problem ist, dass du die Beschreibung zu elements nicht aufmerksam gelesen hast, frage ich mich doch aber, warum du nicht gleich konkrete Fragen stellst, sondern erst mal mit dem Blahfasel ueber "AJAX" etc. pp. fuer groessmoegliche Verwirrung sorgen musstest ...?

                    MfG ChrisB

                  2. Hi

                    Mein Problem ist:
                    Ich habe unbegrent viele Hidden-Felder mit diesem datum[] Array also kann ich da nicht jedes namentlich ansprechen um seine value zu bekommen.

                    Dein Problem ist, dass du uebertreibst.

                    Unbegrenzt viele Hidden Felder sollte es eigentlich nicht geben. Man braeuchte ja auch unbegrenzt viel Zeit, diese zu erstellen. ChrisB hat Dir da ja schon denWeg gewiesen.

                    Ich denke aber, du gehst Dein Problem total falsch an. Ich hab dich so verstanden, dass Du die Daten schon alle in der DB hast. Also wird bei jedem Klick das aktuell gewaehlte Datum gespeichert?

                    Was soll nun also nochmal das hin und hergeschicke von Daten? Du sprichst selbst von unbegrenzten Daten. Mit post und get sind aber nur begrenzte Datenmengen (je nach Server) uebermittelbar.

                    Welchen Grund gibt es ueberhaupt den Kalender durch Ajax nachzuladen? Und was spricht dagegen, das umfaerben der Datumsfelder mit JS durchzufuehren? Ich sehe keinen Grund fuer ewiges Daten hin und her geschiebe. In meinen Augen ist dein ganzes Konzept fragwuerdig.

                    Mein Kalender waere in meiner Seite integriert und php wueder dafuer sorgen, das gespeicherte daten markiert sind. Bei Auswahl kann Ajax das Datum speichern und JS markiert auch dieses Feld. (mit einer Klasse z.B. deren aussehen du in CSS festlegst)  Fertig.

                    1. Hi

                      Hi Steel,

                      Dein Problem ist, dass du uebertreibst.

                      Unbegrenzt viele Hidden Felder sollte es eigentlich nicht geben. Man braeuchte ja auch unbegrenzt viel Zeit, diese zu erstellen. ChrisB hat Dir da ja schon denWeg gewiesen.

                      Ja, ich hatte schon befürchtet, dass ich übertreibe. Bin ja mit dem ganzen JavaScript/Ajax Zeugs noch ziemlich am Anfang.
                      Unbegrenzt viele Hidden Felder sind es natürlich nicht. Ich habe nicht vor irgendwelche Endlosschleifen oder sonnstetwas zu bauen. Ich denke aber es ist klar, was ich meine: Ich habe eine ungewisse Anzahl solcher Felder. Es können 2 sein, es können aber auch 100 sein. Je nachdem, wie weit jemand seine Termine mit dem Kalender vorausbucht...

                      Ich denke aber, du gehst Dein Problem total falsch an. Ich hab dich so verstanden, dass Du die Daten schon alle in der DB hast. Also wird bei jedem Klick das aktuell gewaehlte Datum gespeichert?

                      Da hast du mich glaube ich falsch verstanden. Ein klick bewirkt lediglich eine Vormerkung. Das heißt, dass unter dem Kalender das jeweilige Datum als vorgemerkt notiert wird (das klappt bereits) und dass das Kalenderfeld (bestimmtes Datum) seine Farbe ändert.
                      In die Datenbank wird zu diesem Zeitpunkt nichts gepseichert. Der Nutzer kann wenn er sich z.B. den 2.3.08 vorgemerkt hat zwei mal auf "Weiter" klicken, ihm wird dann der per Ajax erstellte Monat Mai (er war ja vorher im März) angezeigt. Hier kann er weitere Daten vormerken...geht er wieder auf den März soll natürlich wieder der vorgemerkte Tag automatisch markiert werden.

                      Was soll nun also nochmal das hin und hergeschicke von Daten? Du sprichst selbst von unbegrenzten Daten. Mit post und get sind aber nur begrenzte Datenmengen (je nach Server) uebermittelbar.

                      Habe ich denke ich erklärt^^

                      Welchen Grund gibt es ueberhaupt den Kalender durch Ajax nachzuladen? Und was spricht dagegen, das umfaerben der Datumsfelder mit JS durchzufuehren? Ich sehe keinen Grund fuer ewiges Daten hin und her geschiebe. In meinen Augen ist dein ganzes Konzept fragwuerdig.

                      Der Kalender soll per Ajax geladen werden, damit nicht bei jedem Monats-Sprung bzw. öffnen einer Tagesansicht die ganze Seite drum herum neu geladen werden muss. Was spricht dagegen?
                      Gegen das markieren per Javascript spricht nichts - klingt sogar logisch. Also ich lasse per Javascript suchen welche Daten vorgemerkt sind, wird gerade ein solcher Tag/Monat angezeigt, so wird er markiert.

                      Mein Kalender waere in meiner Seite integriert und php wueder dafuer sorgen, das gespeicherte daten markiert sind. Bei Auswahl kann Ajax das Datum speichern und JS markiert auch dieses Feld. (mit einer Klasse z.B. deren aussehen du in CSS festlegst)  Fertig.

                      Gespeicherte (in der DB) Daten werden dann sehr wohl in PHP schon markiert ausgegeben (wohl in einer anderen Farbe als die vorgemerkten...hier wird es nur kompliziert, wenn ein Tag bereits in der DB gespeichert wurde und ein neuer Termin darauf vorgemerkt wird...2 Farben gehen ja schlecht)

                      mfg
                      Alex

  3. Hallo,

    wollte nur berichten, dass ich die Lösung jetzt gefunden habe.

    ich kann auf meine Elemente (vorgemerkt[]) so zugreifen:

    document.formular.elements["vorgemerkt[]"][0].value

    Also ich weis jetzt, dass, weil mehrere Elemente mit dem gleichen Namen vorhanden sind ein Array gebildert wird...so einfach war das.

    mfg
    Alex

    1. Hi,

      wollte nur berichten, dass ich die Lösung jetzt gefunden habe.

      Nach knapp vier Tagen also ...

      MfG ChrisB