Ankündigung

Einklappen
Keine Ankündigung bisher.

select - Auslesen mit php

Einklappen

Neue Werbung 2019

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

  • select - Auslesen mit php

    Liebe Forengemeinde,

    ich stehe vor einer (für mich) unlösbaren Aufgabe. Ich habe alles versucht, aber nichts hat funktioniert. Darum wende ich mich noch einmal an euch.

    Ich habe eine eigene Datenbank, die mittels php ausgelesen wird. Die einzelnen Variablen werden zum Teil als <select> ausgegeben. Die option, die dem Inhalt entspricht, wird mithilfe des hier vereinfachten folgenden Codes als "selected" markiert.

    HTML-Code:
    $tag = "tag$i_tag";
    $$tag = "selected";
    
            <select name="woche">
              <option> </option>
              <option $tagMo>Mo</option>
              <option $tagDi>Di</option>
              <option $tagMi>Mi</option>
              .........
            </select>

    Das klappt super und wirft keine Fragen auf. Allerdings funktioniert es nur, weil die Tage vorher festgelegt sind und damit die option-Möglichkeiten begrenzt und klar vorgegeben sind.

    Nun möchte ich das Gleiche gern mit den Namen aus der Datenbank machen, allerdings liegt hier der Hase im Pfeffer. Da die Namen der hinterlegten Personen natürlich nicht im Quelltext hinterlegt sind, weil sie regelmäßig wechseln, müssen sie nach dem Auslesen der Dateien quasi variabel durch php eingesetzt werden können.

    HTML-Code:
    foreach ($i_name as $key => $val){
      $name[$key] = "name$i_name[$key]";
      $$name[$key] = "selected";
    }
    
    foreach ($i_name as $key => $val){
      echo "<option $name[$key]$i_name[$key]>$i_name[$key]</option>";
    }
    Ich habe es wirklich mit allen Variationen versucht, das $key überall ranzuhängen oder wegzulassen, aber mit meiner Logik komme ich da nicht durch.
    Wie bekomme ich es hin, dass im zweiten Beispiel das Setzen des "selected" genauso funktioniert wie im ersten Beispiel?

    (Kleiner Zusatz: Ich habe den $$-Quelltext sowohl während des Auslesens der Datenbank, danach mit 'foreach' und auch ohne 'foreach' in allen Variationen eingefügt, aber nichts hat mich der Lösung näher gebracht.)

    Ich weiß, dass es sicherlich auch andere Möglichkeiten des Auslesens gibt, möchte aber ungern meine komplette Seite umbauen, da mich das locker ein Jahr kosten würde, weil ich es ehrenamtlich für meinen Vereinneben meiner eigentlichen Arbeit mache. Darum bitte ich euch, wenn möglich, um Lösungsvorschläge mit dieser Variante.

    Ich danke euch für eure Hilfe.

  • #2
    ich habe nun keine ahnung ob die schleife nicht klappt oder deine echo ausgabe.
    das eingängiste beispiel für die ausgabe finde ich den verknüpfungsoperator (.):
    https://www.php.net/manual/de/langua...ors.string.php

    Kommentar


    • #3
      Zitat von Black Pearl Beitrag anzeigen
      PHP-Code:
      foreach ($i_name as $key => $val){
      $name[$key] = "name$i_name[$key]";
      $
      $name[$key] = "selected";

      Da du nicht verrätst was in $i_name steht ist mir auch nicht so ganz klar wie das Ergebnis aussehen soll - in einem bin ich mir aber ziemlich sicher: du möchtest keine variablen Variablen (die $$-Konstruktion) verwenden. Die sind quasi nie sinnvoll, verwende Arrays. Und soll jedes Element ausgewählt sein? Das sieht so aus, ich sehe kein if mit einer Bedingung das die susgewählten Elemente einschränken würde.

      Ich weiß, dass es sicherlich auch andere Möglichkeiten des Auslesens gibt, möchte aber ungern meine komplette Seite umbauen, da mich das locker ein Jahr kosten würde, weil ich es ehrenamtlich für meinen Vereinneben meiner eigentlichen Arbeit mache. Darum bitte ich euch, wenn möglich, um Lösungsvorschläge mit dieser Variante.
      Wenn man merkt dass man in einer Sackgasse gelandet ist, bringt es wenig an dem bestehenden Code rumzupfuschen. Auch wenn es schmerzt ist es dann sinnvoller den Code komplett umzubauen und neu zu schreiben, das kostet im Endeffekt dann weniger Zeit als jahrelang den unbrauchbaren Code mit samt der dafür notwendigen Würgarounds mit zu schleppen - so von wegen totes Pferd und absteigen und so …

      Kommentar


      • #4
        Hallo Tom, hallo tk,

        das ist leider etwas ganz Anderes. Mir geht es darum, mittels der Daten aus der Datenbank die option auf selected zu setzen.


        $i_name beinhaltet die Namen der Vereinsmitglieder. Diese werden alle ausgelesen und jeder Name als <option> in das Auswahlfeld gesetzt. Das ist soweit kein Problem.
        Die variable Variable (danke dafür, das bleibt bei mir hängen) ist bei den eindeutig vorgegebenen Möglichkeiten (Wochentage) eine wunderbar einfache Funktion, die kurz und knapp ist und fehlerfrei funktioniert. Daher sehe ich es erstmal noch nicht als totes Pferd - vielleicht etwas angeschlagen, aber es steht noch auf den Beinen. Nun will ich es einfach wieder zum Laufen bringen.
        Warum funktioniert sie aber nun nicht bei den Namen, die erst durch das Auslesen eingespielt werden müssen? Wo ist da der Fehler?
        Und was muss ich ändern oder machen, damit die <option> als selected markiert wird?

        Kommentar


        • #5
          Variable Variablen machen einen Code sehr schwer verständlich und fehleranfällig. Ich denke mit sowas will sich einfach niemand herumschlagen. Du musst den Leuten schon irgendwie entgegen kommen, wenn du Hilfe zu deinem Code brauchst.

          Und ob etwas "funktioniert", ist vielleicht für den Endanwender relevant, aber für einen Programmierer ist in erster Linie wichtig, dass der Code lesbar ist. Denn kaum etwas ist schlimmer als an Code zu arbeiten, der "funktioniert", aber unlesbar ist.

          Kommentar


          • #6
            So einfach ist es, ohne variable Variablen und ähnlichen Unsinn.

            PHP-Code:
            foreach ($i_name as $key => $val) {    
              
            $selected $key === $valueWhichShouldBeSelected ' selected' '';    
              echo 
            "<option value='" $key "'" $selected ">" $val "</option>";  

            Kommentar


            • #7
              Also ich finde zwei Zeilen, die nur wenige Zeichen enthalten, sehr gut lesbar. Und für mich als Programmierer, der leider nicht die Zeit hat, sich professionell mit allen Programmiersprachen zu befassen, ist so ein kurzer Code-Schnipsel deutlich besser zu verstehen als ein vielzeiliger, aus etlichen Variablen erstellter und mit vielen neuen Fachbegriffen gespickter neuer Code, weil ich dessen Modifizierung nicht vermag, ohne mich wieder jedesmal stundenlang damit zu befassen.

              Sicherlich, als Profi kann man mir das vorwerfen, aber es muss für weniger erfahrene doch auch der einfache, vielleicht etwas unprofessionelle Weg erlaubt sein. Auf einem Bolzplatz erwartet man doch auch keine Profispieler.


              Danke für den Code, jonas. Ich habe ihn direkt getestet, allerdings vergibt er in meinem Quelltext nur die Werte ("value='0'" "value='1'" etc.), setzt den aus der Datei ausgelesenen Namen nicht als selected, weil damit ja kein Abgleich stattfindet.
              Ich versuche mal, es nochmal genauer zu beschreiben: In einer Datei sind zum jeweiligen Mitglied mehrere Daten. Diese Dateien lasse ich alle auslesen, um mir alle Namen für einen Auswahlzweck in ein <select> zu schreiben. Nun möchte ich, dass in dem <select> die <option> markiert wird, die ebendiesen Namen enthält. Dazu müssen also die flexibel durch das Auslesen eingefügten Optionen mit dem Namen der Daten ($i_name[$i]) abgeglichen werden. Das jedoch passiert weder bei der variablen Variable in meinem ersten Beispiel, noch bei anderen Versuchen, die meiner unfachmännischen Phantasie entsprungen sind. Und auch im Netz habe ich bei meinen Suchanfragen leider nichts gefunden, das alle Fakten gemeinsam abdeckt.


              Danke für eure bisherigen Reaktionen.

              Kommentar


              • #8
                Zitat von Black Pearl Beitrag anzeigen
                Sicherlich, als Profi kann man mir das vorwerfen, aber es muss für weniger erfahrene doch auch der einfache, vielleicht etwas unprofessionelle Weg erlaubt sein. Auf einem Bolzplatz erwartet man doch auch keine Profispieler.
                Das ist ein Irrtum. Dein Weg ist der schwierigere und aufwändigere.

                Außerdem sagt die Länge des Codes nichts über die Komplexität aus. Längerer Code ist oft verständlicher und einfacher als ein möglichst kurzer und kryptischer Code, den nur der versteht, der ihn geschrieben hat und für alle anderen ein Buch mit sieben Siegeln ist.

                Mit Professionalität hat das alles nichts zu tun. Auch für einen Amateur hat es viele Vorteile einfachen und übersichtlichen (nicht kurzen!) Code zu schreiben.

                Code sollte fast wie Text lesbar sein. Mit verständlichen Wörtern und Absätzen, und ohne kryptische Abkürzungen und Fachbegriffen.

                Kommentar


                • #9
                  hellbringer

                  Längerer Code ist oft verständlicher und einfacher als ein möglichst kurzer und kryptischer Code, den nur der versteht, der ihn geschrieben hat und für alle anderen ein Buch mit sieben Siegeln ist.
                  Es mag durchaus richtig sein, dass am Ende nur ich ihn verstehe. Aber da ich der Einzige bin, der ihn sieht und damit arbeitet, sollte der Code doch vor allem so sein, dass eben ich ihn verstehe. Ich schreibe meinen Code nicht für Andere, da sie ihn im Quelltext eh nicht sehen können. Ich muss ihn verstehen, da ich damit arbeiten und zurecht kommen muss. Was hilft es mir da also, einen Code zu verwenden, den zwar andere verstehen mögen, der mich aber jedesmal dazu zwingt, mich lange mit ihm zu beschäftigen?

                  Für mich hat es einen größeren Vorteil, einen kurzen Code zu verwenden, wenn ich ihn leichter durchsteige und mich dadurch nicht durch 30 Zeilen zu arbeiten, sondern vielleicht nur durch 3. Und diese Methode der variablen Variablen ist für mich alles: Kurz, verständlich, bei ähnlichem Aufbau leicht abänderbar und überall anwendbar, wenn es (wie bisher) um festgesetzte Auswahlmöglichkeiten geht.
                  Alles, worum es mir geht, ist diese Methode auf flexible Daten anwenden zu können oder einleuchtend erklärt zu bekommen, warum es dabei nicht funktionieren kann. Denn dann gehe ich einen ganz anderen Weg, der am Ende aber die Seite unübersichtlicher machen würde. Daher wäre dies mein bevorzugter Weg.

                  Ohne überheblich klingen zu wollen, aber: Ob du das nun für einen Irrtum hältst, ist für mich unrelevant, da du ja nicht damit arbeiten musst, sondern ich. Daher ist es für mich keiner.
                  Zudem hast du bisher nur hochtrabende Aussagen auf meine Anfrage herausgebracht, die rein gar nichts mit der Lösung des Problems zu tun haben, sondern lediglich andere von deiner Sicht auf die Dinge überzeugen sollen. Es war nicht einmal die Hinführung auf die Lösung irgendwo darin versteckt, sondern nur besserwisserische Aussagen, mit denen du dich über diejenigen stellen möchtest, die nicht deine Meinung vertreten.

                  Wenn du mir bei der Lösung helfen möchtest, freue ich mich darüber, aber bitte unterlass das sinnfreie Herausposaunen von Ansichten, die nichts mit der Anfrage zu tun haben. Es kostet uns beide nur unnötig Zeit - außer du siehst genau das als Hobby. Dann kostet es nur alle anderen, die dieses Gespräch auch später lesen, wertvolle Zeit.
                  Und genau diese aufwändigeren Wege möchtest du nach eigener Aussage doch vermeiden. Oder?

                  Kommentar


                  • #10
                    Zitat von Black Pearl Beitrag anzeigen
                    das ist leider etwas ganz Anderes. Mir geht es darum, mittels der Daten aus der Datenbank die option auf selected zu setzen.
                    Bahnhof vom Feinsten. Ich habe absolut keine Ahnung was du da vor hast. Der Code in #1 sieht mir so aus als würde für jedes Element in $i_name eine Variable mit selected darin erzeugt werden - da kann man auch einfach in jedes option-Element ein selected-Attribut reinschreiben - ist aber wohl nicht das was du vor hast. Irgendwo muss es doch zwei Variablen (mindestens eine ein Array): eine mit den anzuzeigenden Werten und eine mit den Werten die markiert werden sollen. Diese Variablen sehe ich aber nirgends deswegen weiß ich auch nicht was du falsch machst (mal abgesehen vom Einsatz variabler Variablen natürlich).

                    Daher sehe ich es erstmal noch nicht als totes Pferd […] Warum funktioniert sie aber nun nicht […]
                    Merkste selber, oder? Der Gaul ist so tot, der riecht schon … Natürlich steht es dir frei die Ratschläge die du hier bekommst zu ignorieren - du kannst aber davon ausgehen dass sie nicht ohne Grund gegeben werden. Wenn sie dann noch von mehreren Seiten kommen sollte dir das zu denken geben. Aktuell mag dir dein Code vielleicht verständlich vorkommen - in x Jahren wirst du aber die Hände über dem Kopf zusammen schlagen was du da für einen unwartbaren Murks produziert hast. Und kannst du garantieren dass niemals jemand anderes mit dem Code arbeiten muss?

                    Kommentar


                    • #11
                      Zitat von Black Pearl Beitrag anzeigen
                      Danke für den Code, jonas. Ich habe ihn direkt getestet, allerdings vergibt er in meinem Quelltext nur die Werte ("value='0'" "value='1'" etc.), setzt den aus der Datei ausgelesenen Namen nicht als selected, weil damit ja kein Abgleich stattfindet.
                      Ich versuche mal, es nochmal genauer zu beschreiben: In einer Datei sind zum jeweiligen Mitglied mehrere Daten. Diese Dateien lasse ich alle auslesen, um mir alle Namen für einen Auswahlzweck in ein <select> zu schreiben. Nun möchte ich, dass in dem <select> die <option> markiert wird, die ebendiesen Namen enthält. Dazu müssen also die flexibel durch das Auslesen eingefügten Optionen mit dem Namen der Daten ($i_name[$i]) abgeglichen werden. Das jedoch passiert weder bei der variablen Variable in meinem ersten Beispiel, noch bei anderen Versuchen, die meiner unfachmännischen Phantasie entsprungen sind. Und auch im Netz habe ich bei meinen Suchanfragen leider nichts gefunden, das alle Fakten gemeinsam abdeckt.
                      Ja den Vergleich im foreach musst du natürlich anpassen. Das ist ein Beispiel. In welcher Variable ist denn der aus der Datei ausgelesene Name gespeichert. Diese Variable musst du dort für den Vergleich nutzen.
                      Du denkst IMHO viel zu weit.

                      Kommentar


                      • #12
                        tk1234

                        Bahnhof vom Feinsten. Ich habe absolut keine Ahnung was du da vor hast.
                        Es ist für mich schwer, aus einem sehr komplexen Vorgang den einen Part heruszufiltern, um den es geht. Da es sich aber auch um hochsensible Daten handelt, kann ich leider nicht einfach den gesamten Quelltext kopieren.
                        Und ja, es gibt ein Array (nämlich die vielen ausgelesenen Namen $i_name), aber eben dieser Abgleich funktioniert sonst mittels der variablen Variablen aus meinem Beispiel. Wenn du es ausprobierst, verstehst du vielleicht, wie ich mir das denke.

                        Aktuell mag dir dein Code vielleicht verständlich vorkommen - in x Jahren wirst du aber die Hände über dem Kopf zusammen schlagen was du da für einen unwartbaren Murks produziert hast. Und kannst du garantieren dass niemals jemand anderes mit dem Code arbeiten muss?
                        Da ich meine Codes seit Jahren gemeinsam mit meinem Wissen erweitere, kann ich dir noch heute haarklein sagen, welche Funktion was bewirkt und wie sie aufgebaut ist. Sicherlich sind auch da viele Dinge bei, die ein "echter" Programmierer so nicht verwenden würde, doch ich bin so am besten in der Lage, damit zu arbeiten. Und ja, niemand außer mir wird je mit dieser Seite arbeiten. Sie ist privat und ausschließlich auf mich zugelassen. Niemand sonst hat Zutritt dazu und so wird es in den nächsten mindestens 30 Jahren auch bleiben, da ohne mich die Vereinsabteilung nicht stattfindet. Sollte irgendwann jemand das Zepter übernehmen wollen, wird er es sicherlich eh mit dem Baukastenprinzip neu gestalten. Denn leider hat niemand in meinem Umfeld die Erfahrung des Programmierens. Zu gern würde ich mich direkt mit jemandem austauschen wollen.



                        jonas3344

                        Ja den Vergleich im foreach musst du natürlich anpassen. Das ist ein Beispiel. In welcher Variable ist denn der aus der Datei ausgelesene Name gespeichert. Diese Variable musst du dort für den Vergleich nutzen.
                        Du denkst IMHO viel zu weit
                        Die Variablen habe ich komplett angepasst und eingefügt, ich glaube aber mittlerweile, der Fehler liegt hierfür beim Auslesen. Nach so vielen gescheiterten Versuchen des Anpassens schleichen sich gern Fehler ein. Das werde ich überprüfen (bzw. noch einmal komplett neu aufbauen) und dann funktioniert es sicherlich.
                        Vermutlich hast du recht mit meinen Gedankengängen. Ich werde mal zwei Nächte darüber schlafen, ohne daran zu denken und dann nochmal alles Schritt für Schritt durchgehen.

                        Danke für deine Hilfe.

                        Kommentar


                        • #13
                          Zitat von Black Pearl Beitrag anzeigen
                          Es ist für mich schwer, aus einem sehr komplexen Vorgang den einen Part heruszufiltern, um den es geht. Da es sich aber auch um hochsensible Daten handelt, kann ich leider nicht einfach den gesamten Quelltext kopieren.
                          Es hat niemand gesagt dass du Originaldaten posten sollst - eine Hand voll Dummy-Datensätze reicht völlig aus.

                          Wenn du es ausprobierst, verstehst du vielleicht, wie ich mir das denke.
                          Scherzkeks. Wie soll ich den Code ausprobieren wenn du keinen lauffähigen Code gepostet hast? Mit den geposteten Codefetzen lässt sich nicht nachvollziehen was du genau vor hast.

                          Niemand sonst hat Zutritt dazu und so wird es in den nächsten mindestens 30 Jahren auch bleiben, da ohne mich die Vereinsabteilung nicht stattfindet.
                          Ach, jemand der für sich unersetzbar hält - jeder ist ersetzbar. Man wünscht es natürlich niemandem, trotzdem kann es schnell mal sein dass jemand aufgrund von Unfall/Krankheit o.ä. mehr oder weniger lange ausfällt und da ist es sicher nicht verkehrt wenn der Betrieb erstmal weiterlaufen kann wofür es natürlich hilfreich ist wenn der Code zumindest halbwegs lesbar ist. Klar kommst du mit dem Code zurecht - das geht mir mit meinem Code auch so, wobei der Code von vor 15 Jahren teilweise echt gruselig ist. Ach, und dass nur du mit dem Code arbeiten musst stimmt nicht: wir müssen ihn jetzt auch lesen/verstehen. Da das aber nicht wirklich möglich ist wirst du wohl selbst schauen müssen wie du das Problem gelöst bekommst - alternativ kannst du natürlich auf unseren Rat hören und die variablen Variablen in die Tonne treten …

                          Kommentar


                          • #14
                            Ach, jemand der für sich unersetzbar hält
                            Es sind Aussagen wie diese, die einige von euch leider auch in ziemlich vielen Anfragen von anderen Nutzern, die euch nur um etwas Hilfe gebeten haben, ziemlich unsympathisch machen. Diese ekelhafte Arroganz, die vermutlich daher rührt, dass ihr euch hier für eine Macht haltet. Nur, weil ihr Fachwissen habt, denkt ihr, es sei okay, auf allen anderen herumtreten zu können. Dabei wäre es manchmal einfach sinnvoller und auch angebrachter, zumindest mal Hintergründe zu erfragen, bevor man seine Mitmenschen direkt in eine Ecke drängt, in die sie nicht gehören. Aber das ist natürlich unter eurer Würde, macht es doch so viel mehr Spaß, sich in dem gottähnlichen Schein zu sonnen, den ihr selbst über euch haltet.
                            Schade, dass ihr damit dieses und auch andere Foren so herunterreißt. Ihr fordert von uns in den Forenrichtlinien Fairness und Freundlichkeit. Gilt dieser Grundsatz für euch etwa nicht?

                            Um dich mal aufzuklären: Ich halte mich keinesfalls für unersetzbar. Im Gegenteil: Ich wünsche mir manchmal sogar, es würde mich mal jemand ersetzen. Doch in unserer Sportart ist das leider nicht so leicht. Ich suche seit Jahren vergeblich nach motivierten Trainern und anderen Unterstützern unseres Vereins. Und so geht es auch allen anderen Vereinen meiner Sportart. Wenn ich also dauerhaft ausfalle, stirbt meine Vereinsabteilung tatsächlich - und damit auch die Sinnhaftigkeit ihres Internetauftritts. Und die Wahrscheinlichkeit, jemanden zu finden, der mehrmals wöchentlich seine freie Zeit für das Training opfert und auch noch den langen Weg des Programmierens erlernen möchte, ist mit einem Lottogewinn gleichzusetzen.

                            Es wäre schön, wenn ihr vielleicht ein wenig sensibler auf die Nutzer eingehen würdet, die einfach nur eure Unterstützung suchen, statt immer nur von oben herab auf sie einzuprügeln. Wenn euch das Helfen selbst keinen Spaß macht, dann lasst es doch einfach und nutzt eure Zeit für viel schönere Dinge.
                            Und ja, ich weiß, dass ihr auch helfen könnt. Ich habe es oft genug gelesen und aus alten Forenbeiträgen auch mein Wissen erweitern können. Aber eure Art und Weise ist manchmal einfach nur unterirdisch.



                            Ich werde nun den Weg gehen, den mir jonas3344 geebnet hat und versuchen, diesen auszubauen und auf mein Script anzupassen. Dies war eine echte Hilfe und ich bin froh, dass es auch solche Menschen in diesem Forum gibt.

                            Kommentar


                            • #15
                              Black Pearl
                              ich muss jetzt als fortgeschrittener Anfänger auch mal meinen Senf dazugeben.
                              Ich verstehe dein Verlagen, für deinen Code eine Lösung zu finden so wie du sie gerne hättest...

                              Aber auch ich musste lernen, das es meist besser ist, einen Ratschlag anzunehmen und sich mehr mit den Grundlagen zu befassen, einen Schritt zurück zu gehen und es einfach richtig zu machen.
                              Den Grund dafür gibts du selbst... deine Vereinsabteilung stirbt aus, wenn du dich nicht mehr um die Programmierung kümmern könntest... allein dieses Argument sollte der Grund für dich sein, verständlichen Code zu schreiben... Dann würde zumindest die Chance bestehen, das sich da jemand anderes Einarbeiten kann...

                              Jetzt zu deinem Hauptproblem:
                              die variablem Variablen funktionieren in deinem ersten Fall nur, weil du sie entsprechend im Quelltext hinterlegt hast.... das wird einfach mit Daten aus einer Datenbank nicht funktionieren, fertig aus.

                              Du schreibst zu deinem ersten Code:
                              Das klappt super und wirft keine Fragen auf.
                              Ich brauchte verdammt lange, um zu verstehen was da irgendwie funktioniert. und bin mir immernoch nicht sicher, dass das überhaupt funktioniert.

                              Die Variante von jonas3344 ist die simpelste und einfachste...
                              alle Namen in der Schleife durchlaufen und jeweils prüfen, ob es der gesuchte ist. dieser kriegt dann das select-Attribut... fertig.

                              Erspare dir Stress und mach es richtig.

                              Kommentar

                              Lädt...
                              X