Autor Zpráva
Matmak
Profil
Mám tu takový problém. Nefunguje mi script, který by měl zařizovat ve zkratce toto:
1) vypíše do selectu položky podle souborů které existují
2) přes tento select je dán odkaz na jiné stránky a na sebe samou neodkazuje ale vypíše:<option selected>
3) musí to být seřazené sestupně (viz níže)

výsledný vygenerovaný select by měl vypadat nějak takto:
  <form>
  <select onchange="location.href=this.options[this.selectedIndex].value">
  <option selected>2013</option>
  <option value="3_souteze2007.php">2007</option>
  <option value="3_souteze2006.php">2006</option>
  <option value="3_souteze2004.php">2004</option>
  <option value="3_souteze2003.php">2003</option>
  <option value="3_souteze2002.php">2002</option>
  <option value="3_souteze2001.php">2001</option>
  </select>
  </form>

a teoreticky by to měl zařizovat tento script:
 <?php
  echo '<form><select onchange="location.href=this.options[this.selectedIndex].value">';
  $aktualni_rok = Date('Y');
  $aktualni_soubor = __FILE__;
  $rok = $aktualni_rok;
  $soubor = "3_souteze".$rok.".php";
  while($rok != 2000) {
    $selected = strpos($aktualni_soubor, $rok);
    if($selected != FALSE) {
      echo '<option selected>'.$rok.'</option>';
    } elseif(file_exists($soubor)) {
      echo '<option value="'.$soubor.'">'.$rok.'</option>';
    }
    --$rok;
  }
  echo '</select>';
  echo '</form>';
  exit;
  ?>

Avšak to bohužel nefunguje, prosím poraďte mi jak to poupravit či zařídit jinak.
_es
Profil
Matmak:
Avšak to bohužel nefunguje
Čo konkrétne, v tomto prípade, znamená „nefunguje“. Čo ti ten PHP skript vygeneroval si si skontroloval?
Chamurappi
Profil
Reaguji na _es:
Na první pohled bych řekl, že mu generuje <option>y se stejným value, protože hodnotu proměnné $soubor nastavuje jen jednou, na řádku 6, tedy mimo smyčku.
Matmak
Profil
_es:
Nefunguje to, světe div se, asi nějak tak, že to nedělá co jsem napsal, že potřebuji, aby to dělalo.
Jinak samozřejmě jsem to zkoušel. Výsledek vypíše select ale ne option viz >>
<form>
<select onchange="location.href=this.options[this.selectedIndex].value">
</select>
</form>

Chamurappi:
Máš pravdu proměnnou $soubor jsem nastavil mimo, to není dobré :)
Nicméně už to aspoň zčásti funguje po přemístění šestého řádku. Jenom tu nefunguje aby se u aktuálního souboru napsal místo <option value="">rok</option> <option selected>rok</option>
_es
Profil
Matmak:
Nefunguje to, světe div se, asi nějak tak, že to nedělá co jsem napsal, že potřebuji, aby to dělalo.
Možno by ti niekto skôr poradil, ak by si napísal, že to namiesto toho, čo by malo robiť, robí „???“, aby to nebolo až také triafanie naslepo, kde si asi tak mohol spraviť chybu.

Jinak samozřejmě jsem to zkoušel.
Ostatní si to majú „vyskúšať“ ako? Ak si si to vyskúšal a pozrel vygenerovaný HTML kód, tak by snáď mohol prísť na chybu v [#3].
Matmak
Profil
Takže ještě jednou aby v tom nebyl zmatek, opravil jsem chybu dle Chamurappiho. Po úpravě to spráávně vypíše jednotlivé options, ale já ještě potřebuji, aby se kupříkladu u souboru 3_souteze2003.php byl předvybraný a bez hodnoty rok 2003.

_es:
aby to nebolo až také triafanie naslepo, kde si asi tak mohol spraviť chybu.
hele je to jen trocha kódu a není to nijak složité takže se řídím heslem více očí více vidí, a proto když přehlédnu nějakou maličkost (viz řádek 6) tak si ji někdo všimne a to je hlavní důvod proč jsem sem napsal ten příspěvek.

Ak si si to vyskúšal a pozrel vygenerovaný HTML kód, tak by snáď mohol prísť na chybu v [#3].
Na zdrojak jsem se díval avšak na nic jsem nepřišel, nechápal jsem proč to nefunguje, a proto jsem asi potřeboval poradit, ne???? pro tebe jsem tu napsal výsledek a stejně ti to je platný jako kabát v létě
Matmak
Profil
Uplynul nějaký ten čas a jsem zase o něco starší a moudřejší. Můj problém tu nebyl vyřešen, ale já jsem si nakonec poradil, tak ať to tu nekončí otevřeně, tak tady je moje konečné řešení. Jak si můžete všimnout tak nejlépe na tento způsob uspořádání fotogalerie pasují šablony.
<?php
if(isset($_GET['rok'])) {
$tpl['title'] = 'Fotogalerie - '.$_GET['rok'];
} else {
$tpl['title'] = 'Fotogalerie';
}
include_once '_header.phtml';
?>


  <table>
  <tr><td>
  <h1>Akce</h1></td><td>
  <?php
    // genreování selectu pro výběr roku
    echo '<form method="get">';
    echo '<select name="rok" onchange="this.form.submit();">';
    for($i = date('Y'); $i >= 2000; $i--){
      $soubor = 'templates/fotogalerie_'.$i.'.phtml';
      if($i == $_GET['rok']){
        echo '<option value="'.$i.'" selected>'.$i.'</option>';
      }else{
          if(file_exists($soubor)){
           echo '<option value="'.$i.'">'.$i.'</option>';
          }
      }
    }
    echo '</select>';
    echo '</form>';
    ?>
  </td><tr>
  </table>
  
  
  <?php
    if(file_exists("templates/fotogalerie_".$_GET['rok'].".phtml")){
      include_once("templates/fotogalerie_".$_GET['rok'].".phtml");
    } else {
      // naincludování nejnovějšího souboru
      for($i = date('Y'); $i >= 2000; $i--){
        $soubor = 'templates/fotogalerie_'.$i.'.phtml';
        if(file_exists($soubor)){
          include_once($soubor);
          $i = 2000;
        }
      }
    }
      //echo "neexistuje";
    ?>
  
  
<?php include_once '_footer.phtml'; ?> 
Alphard
Profil
Matmak [#7]:
Super, že sdílíte řešení (na kterém je vidět pokrok od položení dotazu), víc takových :-)

Mám pár tipů:
1. Neopakujte v kódu tu hodnotu 2000, je to blbě znovupoužitelné a upravitelné, použijte proměnnou nebo konstantu.
2. Na řádku 44 by byl hezčí break.
3. Do $_GET['rok'] může kdokoliv vložit cokoliv. Pokud ve výpisech v šabloně neošetřujete proměnné, máte tam díru pro XSS, obecně je dobrý zvykem vstupy ošetřovat, u čísel stačí explicitně přetypovat na číslo.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: