Smarty und das selected in einem <select> feld

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

  • Smarty und das selected in einem <select> feld

    Hallo, ich arbeite mich derzeit in Smarty ein und versuche jetzt grad ein dynamisches select feld zu erzeugen. Das erzeugen ist kein Problem, doch möchte ich gerne, wenn ein Feld noch nicht ausgefüllt wurde das zuletzt selektierte wieder selektiert wird, was ja über selected ="abc" geht. folgender code:

    index.tpl
    PHP-Code:
    <tr>
       <
    td>
          <
    input type="checkbox" name="rennen[{$rennen.nr}]" value="{$rennen.nr}{$rennen.checked}>
       </
    td>
       <
    td>
          {
    $rennen.bezeichnung}{$rennen.select}
       </
    td>
       <
    td>
          <
    select name="{$rennen.nr}size="3">
             {
    html_options values=$rennen.lg output=$rennen.lg selected="{$rennen.select}}
          </
    select>
       </
    td>
       <
    td>{$rennen.fehler}</td>
    </
    tr
    index.php

    PHP-Code:

    $rennen
    [] = array("nr"=> $row['Nr'],
       
    "bezeichnung"=> $row['Nr'].")".$row['Bezeichnung']."(".$klasse.")",
       
    "lg"=> explode(",",$row['Leistungsgruppen']),
       
    "checked"=> $checked,
       
    "select"=> $select); 
    das ganze wird in der PHP datei mittels eine while schleife erzeugt und dann in der tpl mittels foreach ausgegeben, für das $rennen.checked funktioniert es auch nur funktioniert dieser Teil noch nicht
    {html_options values=$rennen.lg output=$rennen.lg selected="{$rennen.select}" }
    es wird einfach nichts ausgewählt, obwohl an dieser Stelle {$rennen.bezeichnung}{$rennen.select}
    eindeutig ein das richtige ausgegeben wird.Der erzeugte Quellcode:
    PHP-Code:
    <tr>
       <
    td>
          <
    input type="checkbox" name="rennen[3]" value="3" >
       </
    td>
       <
    td>
          
    3)Männer Achter(8+)II
       
    </td>
       <
    td>
          <
    select name="3" size="3">
             <
    option label="I" value="I">I</option>
             <
    option label="II" value="II">II</option>
             <
    option label="III" value="III">III</option>
          </
    select>
       </
    td>
    </
    tr
    jemand ne Idee wieso ich nicht dynamisch selektieren kann? direkt eingegeben funktioniert das ganze

    mfg

  • #2
    Dann wirst du jetzt mal schön debuggen und gucken wo $checked welche Werte hat.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      es geht doch gar nicht um das $checked sondern um das $rennen.select und das hat an der richtigen Stelle ja den richtigen Wert, denn sonst würde hier:
      tpl=>{$rennen.bezeichnung}{$rennen.select}
      erzeugter Code =>3)Männer Achter(8+)II
      daher ist es da auf jeden Fall da. nur wenn ich es hier einfüge
      {html_options values=$rennen.lg output=$rennen.lg selected="{$rennen.select}" }

      wird es anscheinend nicht erkannt..
      es ist doch möglich an dieser Stelle eine Variable zu setzen, oder??

      mfg

      EDIT:

      das "II" kommt dann aus dem {$rennen.select}
      wieso wird es bei den html_options nicht erkannt

      Zuletzt geändert von krel; 06.06.2007, 22:44.

      Kommentar


      • #4
        Dann geht es eben und eine andere Variable. Debugge und prüfe was die Variablen beinhalten.
        PHP-Code:
         "checked"=> $checked,
        "select"=> $select 
        EDIT:
        weil dort selected stehen muss und zwar genau bei dem das ausgewählt werden soll. -> HTML
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          es stimmt doch auch alles
          PHP-Code:
          $rennen[] = array("nr"=> $row['Nr'],
             
          "bezeichnung"=> $row['Nr'].")".$row['Bezeichnung']."(".$klasse.")",
             
          "lg"=> explode(",",$row['Leistungsgruppen']),
             
          "checked"=> $checked,
             
          "select"=> $select);

          echo 
          "<PRE>".print_r($rennen)."</PRE>"
          ergibt folgendes nach dem abschicken des formulars und dem anklicken der zweiten Checkbox und der auswahl im zweiten SelectFeld
          Array
          (
          [0] => Array
          (
          [nr] => 3
          [bezeichnung] => 3)Männer Achter(8+)
          [lg] => Array
          (
          [0] => I
          [1] => II
          [2] => III
          )

          [checked] =>
          [select] =>
          )

          [1] => Array
          (
          [nr] => 15
          [bezeichnung] => 15)Männer achter(8+)
          [lg] => Array
          (
          [0] => I
          [1] => II
          [2] => III
          )

          [checked] => checked
          [select] => II
          )

          )
          es muss ja auch das richtige drin stehen sonst würde ja bei einem {$rennen.select} in der tpl vor dem selectFeld auch nicht "II" ausgegeben werden, RICHTIG?

          mfg

          Kommentar


          • #6
            Falsch.
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              jaja das man das so mittels html direkt macht ist mir klar aber bei Smarty macht man das in dem man das Value angibt siehe:
              http://smarty.php.net/crashcourse.php
              viertes Beispiel

              mfg

              Kommentar


              • #8
                Man gibt nicht den Value sondern den Key an. Und da auch nicht in geschweiften Klammern. Manual lesen!

                http://smarty.php.net/manual/en/lang...ml.options.php

                Kommentar


                • #9
                  mal auf das Beispiel bezogen:
                  PHP-Code:
                  include('Smarty.class.php');

                  // create object
                  $smarty = new Smarty;

                  // assign options arrays
                  $smarty->assign('id', array(1,2,3,4,5));
                  $smarty->assign('names', array('bob','jim','joe','jerry','fred'));

                  // hier ermittelst Du die Option die selected sein soll
                  $number $_POST['user']; 

                  // Wert der selektierten Option der Smartyvariablen "sel" zuweisen
                  $smarty->assign('sel'$number);

                  // display it
                  $smarty->display('index.tpl');


                  // in der index.tpl:

                  <select name=user>
                  {
                  html_options values=$id output=$names selected=$sel}
                  </
                  select

                  Kommentar


                  • #10
                    ja ok soweit hab ich das ganze jetzt verstanden. Ich versteh jetzt leider nur noch nicht wie ich das ganze in einem Array mache, denn ich habe ja mehrere select felder. Mal das Bsp von oben betrachtet so besteht mein select Feld aus folgenden Werten
                    [lg] => Array
                    (
                    [0] => I
                    [1] => II
                    [2] => III
                    )
                    das ist gleichzeitig ausgabe und value
                    wenn ich jetzt in meiner tpl folgendes schreibe selected="I" dann wird "I" vorselektiert. wie ist denn jetzt der zugehörige key? der von [lg] funktioniert nicht...

                    mfg

                    Kommentar


                    • #11
                      mehrere Selectfelder ?

                      Dann hast vermutlich ein mehrdimensionales Array.

                      Wenn Du damit nicht umgehn kannst, dann lern die Array-Grundlagen.

                      http://tut.php-q.net/array.html

                      Ich mach jedenfalls nicht die Arbeit für Dich und schreib Dir Dein Script.

                      Tips hast Du genügend bekommen - man muß Antworten eben auch verstehen können.

                      Kommentar


                      • #12
                        Es hat auch niemand behauptet, dass du mein Script schreiben sollst. Ich wollte nur ne Hilfe haben welchen Key ich verwenden muss. Denn sowohl 0-2 als auch I-III funktioniert nicht und das sind für mich die beiden Varianten.
                        danke

                        Kommentar


                        • #13
                          Du mußt den richtigen key nehmen - je nachdem welches Feld Du brauchst - ist doch logisch oder ?

                          Bei mehreren Selectfeldern hast auch mehrere Keys - auch logisch ?

                          Bei mehreren möglichen selektierten Optionsfeldern (je Select ein selektiertes Optionsfeld) hast mehrere Keys die zu den Selectarrays gehören welche wiederum in einem Array sind.

                          Nicht verstanden ?

                          Eben - deswegen hab ich den Link zum Tutorial gepostet.

                          Aber Du reitest lieber auf meiner Bemerkung rum, daß ich Dir Dein Script nicht schreib, anstatt den Umgang mit Arrays zu lernen.

                          In der Zeit in der Du hier postest, hättest schon ein bißchen was lernen können.

                          Aber wie Du meinst - warte halt bis jemand kommt und Dir genau sagt wo was hingeschrieben werden muß.

                          Viel Spaß beim warten.

                          *******

                          ich seh gerade was für Zeug Du schreibst:

                          denn ich habe ja mehrere select felder
                          Das ist doch Quark - Du hast mehrere Optionsfelder - nicht mehrere Selektfelder !

                          Ich nehm das von vorhin zurück:

                          Mach kein php-Grundlagentutorial, sondern ein html-Tutorial !

                          Und zu diesem hier:

                          [lg] => Array
                          (
                          [0] => I
                          [1] => II
                          [2] => III
                          )
                          ...
                          wenn ich jetzt in meiner tpl folgendes schreibe selected="I" dann wird "I" vorselektiert. wie ist denn jetzt der zugehörige key?
                          Tja - wie lautet bei obigem Array wohl der key der zu "I" gehört ?

                          Mach das http://tut.php-q.net/ - da steht doch wie man den Key zu einem Wert findet !
                          Zuletzt geändert von Koala; 07.06.2007, 10:53.

                          Kommentar


                          • #14
                            nein nein, ich habe schon mehrere select Felder mit jeweils maximal 3 Optionen, ich hab jetzt nochmal folgendes ausprobiert und das funkioniert einwandfrei:
                            index.php

                            PHP-Code:
                            $lg = array("I","II","III");
                            $smarty->assign("lg",$lg);
                            if(isset(
                            $_POST['leistungsgruppe'])){
                                
                            $smarty->assign("selectedlg",$_POST['leistungsgruppe']);

                            die index.tpl
                            PHP-Code:
                            <select name="leistungsgruppe" size="3">
                               {
                            html_options values=$lg output=$lg selected="$selectedlg"}
                            </
                            select
                            also ist wieder value und output gleich. Also steht jetzt in $_POST['leistungsgruppe'] entweder "I","II" oder "III" gleiches gilt wenn ich mehrere Selectfelder habe. Diese erzeuge ich dann mittels foreach in der tpl wie oben beschrieben da fehlt nur das {foreach from=$rennen item=rennen} und {/foreach} und da sollte ich doch dann auch "I","II" oder "III" verwenden können. Es funktioniert ja auch wenn ich eines von diesen dreien direkt in die tpl eingebe
                            z.B:
                            PHP-Code:
                            <select name="{$rennen.nr}size="3">
                               {
                            html_options values=$lg output=$lg selected="I"}
                            </
                            select
                            funktioniert

                            Kommentar


                            • #15
                              Deine Selectfelder müssen sich im Namen unterscheiden.

                              Wo und wie fragst Du denn die POST-Werte für die 3 Felder ab und wie sind die Namen der select-Felder ?

                              Du hast normalerweise ein Array mit den 3 Selectfeldern und in diesem Array befinden sich die 3 Arrays mit den Optionsfeldern.

                              Das ergibt also ein foreach innerhalb eines anderen foreach um das gewählte Optionsfeld bestimmen zu können.

                              Innerhalb der äußeren foreach werden die 3 Arrays für Smarty erzeugt.

                              Hast Du das jetzt begriffen ?

                              Hast Du inzwischen das Tutorial gemacht ?

                              Meinst Du ich würd das empfehlen wenn es nicht nötig wär ?

                              Kommentar

                              Lädt...
                              X