Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Dopdown - selected - INPUT - autosubmit

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Dopdown - selected - INPUT - autosubmit

    Hallo zusammen,
    ich wende mich an Euch, da ich mir von Eurer Expertise eine gute Idee erhoffe.

    PHP-Code:
    <?php
    require_once('db_daten.php');
    $_table        "tabelle";
    $_sql "SELECT DISTINCT `matchDate` FROM `$_table
       WHERE `matchDate` = (SELECT MIN(`matchDate`) 
       FROM `
    $_table` WHERE `matchDate` > CURDATE())";
    $_select     mysql_query($_sql) OR die(mysql_error());
    $_fetch     mysql_fetch_assoc($_select);
    $_selected date('d.m.Y'strtotime($_fetch['matchDate']));
    echo 
    $_selected;
    ?>
    <form action="" method='post'>
        <select name='match' onchange='javascript: submit()'>
        <?php
        
    echo $_selected;
        while(
    $_fetch_list mysql_fetch_assoc($_list)) {
            echo 
    '<option value="'date('d.m.Y',          strtotime($_fetch['matchDate'])) . '"';
            if (
    date('d.m.Y'strtotime($_fetch_list['matchDate'])) == '$_selected') echo 'selected';
            echo 
    '>' date('d.m.Y'strtotime($_fetch_list['matchDate'])) . '</option>';
        }
        
    ?>
        </select>
        <input type='submit' value='Spietag auswählen'/> 

    </form>
    Aufgabe:
    Dropdownliste mit Datumsfeldern aus der DB wird erzeugt mit $_fetch_list. Aus dieser Liste soll der Eintrag $_selected selektiert werden.
    Ferner hätte ich bei Aufruf der Seite gerne automatisch den selektierten Wert dargestellt.
    Hierbei habe ich zwei Probleme:
    1.) $_selected ist vor der while-Schleife korrekt gefüllt, aber in der while-Schleife leer. Habe kein Idee, warum das so ist. Trage ich anstatt $_selected einen festen Wert ein, funktioniert die Selektion.
    2.) Den Input Button muss man drücken, damit bei Seitenaufruf auch der selektierte Wert ausgewählt wird.

    Was geht?
    - Der Wert aktuell wird selektiert, aber nicht automatisch angezeigt
    - Wird der Wert im Dorpdown geändert arbeitet das autosubmit auf Basis von "onchange"

    Ich hoffe, das der Code ausreichend ist, damit mir geholfen werden kann.

  • #2
    PHP-Code:
    == '$_selected' 
    Warum die '?

    Du solltest deinen Code mal ordentlich formatieren, das ist schrecklich zu lesen. So z.B. könnte man schneller erkennen was du da machst.
    PHP-Code:
        while($_fetch_list mysql_fetch_assoc($_list)) { 
            
    $matchDate date('d.m.Y',  strtotime($_fetch['matchDate']));
            
    $selected = ($matchDate == $_selected) ? 'selected' '';
            echo 
    '<option value="' $matchDate '" ' $selected '>' $matchDate '</option>';
        } 
    Falsches Unterforum.

    Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt.
    Durch einen Wechsel auf mysqli_* oder PDO greifst du auf die modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections schützen.
    Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
    [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
      Zitat von shermano Beitrag anzeigen
      <select name='match' onchange='javascript: submit()'>
      onchange ist immer Javascript, das »javascript:« gehört da nicht hin. Außerdem kann man select-Elemente nicht abschicken, du möchtest das Formular abschicken (->this.form.submit()) - evtl. funktioniert submit() aufgrund der Fehlertoleranz der Browser trotzdem, wirf mal einen Blick in die Fehlerkonsole was die dazu meint.

      if (date('d.m.Y', strtotime($_fetch_list['matchDate'])) == '$_selected') echo 'selected';
      echo '>' . date('d.m.Y', strtotime($_fetch_list['matchDate'])) . '</option>';
      Mal abgesehen davon dass du nicht mit dem Inhalt von $_selected vergleichst sondern mit dem String »$_selected«: Warum verwendest du zum Vergleichen mit dem auszuwählenden Eintrag nicht den unformatierten Datumsstring - so wandelst du jeden Wert aus der Datenbank jedenfalls zweimal um ...

      - Der Wert aktuell wird selektiert, aber nicht automatisch angezeigt
      - Wird der Wert im Dorpdown geändert arbeitet das autosubmit auf Basis von "onchange"
      ach, das Formular wird doch automatisch abgeschickt? Wo liegt dann das Problem? In dem Code sehe ich nichts was dafür sorgen soll dass der ausgewählte Wert angezeigt wird ...

      Kommentar


      • #4
        Hallo zusammen,
        @VPh: Vielen Dank für die Hinweise. Da ich Anfänger bin, bin ihc für alle Hinweise dankbar. Habe das umgebaut. Ist nun lesbarer (auch für mich ). Dabei war ich schon so stolz auf mich, dass ich so weit gekommen bin.

        @tk1234 und @all:
        Evtl habe ich mich schlecht ausgedrückt. Der Vergleich soll eigentlich zwei Datumswerte miteinander vergleichen, die aus unterschiedlichen DB-Abfragen kommen. Warum mache ich das? Die erste Abfrage der DB holt mir alle Datumswerte für die Dropdown-Liste. Die zweite Abfrage sucht mir bezogen auf das aktuelle Datum (SQL Query mit CURDATE()) das nächste Datum raus.
        Die Idee:
        1. Die Dropdown-Liste soll alle Spieltage der Saison darstellen. => erste Abfrage
        2. Der nächste Spieltag bezogen auf das heutige Datum soll selktiert sein => zweite Abfrage und Ergbnisvergleich zu erster Abfrage
        3. Das selektierte Datum soll automatisch "submitted" werden und das Ergebnis dagestellt werden
        4. Suche ich mir in der Dropdown einen anderen Spieltag, wird der Wert sofort submitted (hier mit javascript onchange)

        P4 funktionert, P3 nicht. Zu P2 schaffe ich es nicht, die Variable $_selected, die for der while-Schleife gefüllt wird, innerhalb der while-Schleife zu benutzen (Test dazu: echo $_selected innerhalb der Schleife)

        Daher: es funktiniert grundsätzlcih, aber eben nicht schön. Ein weiterer unschöner nebeneffekt: Wenn javascript onchange() ausgeführt wurde, steht nicht der gewählte Wert in der Dropdown, sonder der alte...

        Ich komme trotz Eurer Hilfe, Büchern und Google nicht weiter

        Merci
        SHE

        Kommentar


        • #5
          Zitat von shermano Beitrag anzeigen
          Habe das umgebaut. Ist nun lesbarer (auch für mich ).
          Warum postest du dann nicht den geänderten Code damit wir den aktuellen Stand kennen?

          Evtl habe ich mich schlecht ausgedrückt. Der Vergleich soll eigentlich zwei Datumswerte miteinander vergleichen, die aus unterschiedlichen DB-Abfragen kommen.
          Schon klar. Aber warum formatierst du die beiden Datumswerte noch um um sie miteinander zu vergleichen? Sie sind doch im gleichen Format und können ohne Umformen miteinander verglichen werden - umwandeln musst du nur das Datum das du ausgibst.

          P4 funktionert, P3 nicht.
          Was genau funktioniert an Punkt 3 nicht? Was meinst du mit "Ergebnis da[r]gestellt"?

          Zu P2 schaffe ich es nicht, die Variable $_selected, die for der while-Schleife gefüllt wird, innerhalb der while-Schleife zu benutzen (Test dazu: echo $_selected innerhalb der Schleife)
          Hast du die einfachen Anführungszeichen um $_selected entfernt auf die du schon zweimal hingewiesen wurdest?

          Daher: es funktiniert grundsätzlcih, aber eben nicht schön. Ein weiterer unschöner nebeneffekt: Wenn javascript onchange() ausgeführt wurde, steht nicht der gewählte Wert in der Dropdown, sonder der alte...
          Dann musst du eben nachschauen ob vom Formular ein Wert übergeben wurde und wenn ja diesen verwenden und nicht den aus der Datenbank ...

          Kommentar


          • #6
            Hallo,
            hatte den neuen Code nicht geposted, da ich eigentlich "nur" Deine Änderungen reingehauen hatte. Dann habe ich mich nochmal mit der Problematik $_selected beschäftigt.

            Mein Code sieht nun so aus:
            PHP-Code:
            <form action="" method='post'>
                <select name='match' onchange='javascript: submit()'>
                <?php
                
            while($_fetch_list mysql_fetch_assoc($_list)) {
                    
            $_selected  date('d.m.Y'strtotime($_fetch_select['matchDate']));
                    
            $_matchDate date('d.m.Y'strtotime($_fetch_list['matchDate']));
                    
            $selected = ($_matchDate == $_selected) ? 'selected' '';
                    echo 
            '<option value="' $_matchDate '" ' $selected '>' $_matchDate '</option>';
                }
                
            ?>
                </select>
                <input type='submit' value='Spietag auswählen'/> 
            </form>
            Und er funktioniert schon recht gut, aber:
            Es wird nun $_selected berücksichtig und im Dropdwon auch als selected angezeigt. Die Verarbeitung von PHP soll dann in etwas so ausgegeben werden:
            PHP-Code:
            if(isset($_POST['match'])) {
                
            $_matchList = isset($_POST['match']) ? $_POST['match'] : '';
                
            $_matchList date('Y-m-d'strtotime($_matchList));
                
            $_matches "SELECT `team0Name`, `team0ShortName`, `team0ClubCode`, `team1Name`, `team1ShortName`, `team1ClubCode`, `matchDate`, `matchTime`, `matchSpectators`, `matchNetDuration`, `locationName`, `resultsSetPoints`, `resultsSetsSet0Points`, `resultsSetsSet1Points`, `resultsSetsSet2Points`, `resultsSetsSet3Points`, `resultsSetsSet4Points`
                    FROM  `
            $_matchesTable
                    WHERE `matchDate` = '
            $_matchList' ";
            $query mysql_query($_matches);
            while(
            $fetch mysql_fetch_assoc($query)) {
                echo 
            '<tr>' .$fetch['team0ShortName']. '</tr>'
            Die Ausgabe ist auch schon sehr gut, aber eben mit den zwei "Fehlern":
            1. der selektierte Spieltag ist nicht in der Anzeige
            2. der Wechsel des Spieltages erfolgt automatisch bei Auswahl, aber danach steht wieder das "selected" in der Schleife.

            Hoffe, dass ich es gut genug beschrieben habe.
            Grüße und Danke schon jetzt für die bisherige UNterstützung und Geduld.

            Kommentar


            • #7
              Zitat von shermano Beitrag anzeigen
              <select name='match' onchange='javascript: submit()'>
              der Wert des onchange-Attributs ist immernoch falsch.

              PHP-Code:
              while($_fetch_list mysql_fetch_assoc($_list)) {
                  
              $_selected  date('d.m.Y'strtotime($_fetch_select['matchDate']));
                  
              $_matchDate date('d.m.Y'strtotime($_fetch_list['matchDate']));
                  
              $selected = ($_matchDate == $_selected) ? 'selected' ''
              Warum steht die Definition von $_selected mit in der Schleife? Es reicht die Zuweisung einmal vor der Schleife zu machen. Außerdem kannst du als Bedingung in der Schleife auch $_fetch_list['matchDate'] mit $_fetch_select['matchDate'] vergleichen und dir $_selected sparen.


              PHP-Code:
              $_matchList = isset($_POST['match']) ? $_POST['match'] : '';
              $_matchList date('Y-m-d'strtotime($_matchList)); 
              Fällt dir an den beiden Zeilen was auf? Du überschreibst in der zweiten Zeile den Wert aus $_POST wieder ...

              1. der selektierte Spieltag ist nicht in der Anzeige
              Wo berücksichtigst du den Wert aus $_POST für die Vorauswahl in der Auswahlliste?

              2. der Wechsel des Spieltages erfolgt automatisch bei Auswahl, aber danach steht wieder das "selected" in der Schleife.
              ?

              Kommentar


              • #8
                Zitat von tk1234 Beitrag anzeigen
                der Wert des onchange-Attributs ist immernoch falsch.
                ?
                ich vertehe nicht, wo das falsch ist. Kannst Du das näher erklären? Wenn ich im Dropdown einen anderen Wert auswähle, wird der Wert verarbeitet und alles richtig dargestellt, nur das der aktuell selektierte Wert im Dropdown nicht dem entspricht, der ausgewählt wurde.

                Zitat von tk1234 Beitrag anzeigen
                Warum steht die Definition von $_selected mit in der Schleife? Es reicht die Zuweisung einmal vor der Schleife zu machen. Außerdem kannst du als Bedingung in der Schleife auch $_fetch_list['matchDate'] mit $_fetch_select['matchDate'] vergleichen und dir $_selected sparen.
                ?
                Zitat von tk1234 Beitrag anzeigen
                Fällt dir an den beiden Zeilen was auf? Du überschreibst in der zweiten Zeile den Wert aus $_POST wieder ...
                ?
                Ja, da ich das Datum umformatieren muss für die SQL Abfrage, da die mir mit deutschem Format keine Ergebnisse liefert. Vorher hatte ich diese in deutschem Format, damit diese in der Dropdwon-List richtig stehen. Ist für mich richtig. Wenn es besser, schöner, schneller geht: Gerne. Mir fällt nichts ein

                Zitat von tk1234 Beitrag anzeigen
                Wo berücksichtigst du den Wert aus $_POST für die Vorauswahl in der Auswahlliste?
                ?
                Ich dachte hier in der While Schleife:
                PHP-Code:
                while($_fetch_list mysql_fetch_assoc($_list)) {
                    
                $_matchDate date('d.m.Y'strtotime($_fetch_list['matchDate']));
                        
                $selected = ($_matchDate == $_selected) ? 'selected' '';
                        echo 
                '<option value="' $_matchDate '" ' $selected '>' $_matchDate '</option>';
                    } 
                Erst bau ich mir den Spieltag zusammen ($_matchDate) dann baue ich mir den kommenden Spieltag zusammen ($selected) und dann den Wert, der selektiert werden soll ($selected).

                Den Aufbau habe ich wegen der Übersichtlichkeit im Code so gewählt. War eine Empfehlung von weiter oben.

                Kommentar


                • #9
                  Zitat von shermano Beitrag anzeigen
                  ich vertehe nicht, wo das falsch ist.
                  Das schrieb ich in #3: richtig wäre onchange="this.form.submit()".

                  Wenn ich im Dropdown einen anderen Wert auswähle, wird der Wert verarbeitet und alles richtig dargestellt, nur das der aktuell selektierte Wert im Dropdown nicht dem entspricht, der ausgewählt wurde.
                  Das nach dem Auswählen eines Wertes eine neue Seite aufgerufen wird und damit das <select> neue zusammengebaut werden muss ist dir aber schon klar, oder?

                  Ja, da ich das Datum umformatieren muss für die SQL Abfrage, da die mir mit deutschem Format keine Ergebnisse liefert. Vorher hatte ich diese in deutschem Format, damit diese in der Dropdwon-List richtig stehen. Ist für mich richtig.
                  Sinnvoll wäre es vermutlich das Datum nur dann umzuformen wenn du es anzeigen möchtest und es sonst immer im Originalzustand zu lassen, also etwa so:

                  PHP-Code:
                  <form method="post">
                  <select name="match" onchange="this.formsubmit()">
                  <?php
                  $_selected  
                  = isset($_POST['match'])?$_POST['match']?$_fetch_select['matchDate'];
                  while(
                  $_fetch_list mysql_fetch_assoc($_list)) {
                      
                  $_matchDate date('d.m.Y'strtotime($_fetch_list['matchDate']));
                      
                  $selected = ($_fetch_list['matchDate'] == $_selected) ? ' selected="selected"' '';
                      echo 
                  '<option value="' $_fetch_list['matchDate'] . '"' $selected '>' $_matchDate '</option>';
                  }
                  ?>
                  </select>
                  <input type="submit" value="Spieltag auswählen" /> 
                  </form>

                  <?php
                  if(isset($_POST['match'])) {
                      
                  $query "SELECT […] FROM tabelle
                          WHERE matchDate = '"
                  .mysql_real_escape_string($_POST['match'])."'";
                      
                  # Daten holen und ausgeben
                  }
                  Auf mysqli oder PDO darfst du das ganze dann selbst umschreiben, mysql nicht verwenden, die Erweiterung ist veraltet!

                  Ich dachte hier in der While Schleife:
                  Du denkst richtig - warum machst du es nicht? In dem Codeteil wird nirgends auf $_POST zugegriffen ...

                  Den Aufbau habe ich wegen der Übersichtlichkeit im Code so gewählt. War eine Empfehlung von weiter oben.
                  Das ist schon ok - nur musst du halt noch darauf reagieren wenn $_POST existiert ...

                  Kommentar

                  Lädt...
                  X