Autor Zpráva
Matess
Profil *
Ahoj můžete mi někdo prosím poradit jak lze jednoduše zjistit které políčka byli vybrány?

<select name="zanr" size="3" multiple>
      <option value="a. pohádka">a. pohádka
      <option value="akční">akční
      <option value="dokument">dokoument
      atd...
</select>


Teď to řeším takto:
if ($_POST["a. pohadka"] == "a. pohadka") echo "OK";
if ($_POST["akční"] == "akční") echo "OK";
atd.

Ale to mi přijde moc pracné a nehledě na to, že když přidám nebo uberu žanr, tak to musím ve scriptech upravit.
Lze to nějak zjednodušit?
Ještě doplním, že žánry tahám z DB.

Děkuji
xmark
Profil
if ($_POST["zanr"] == "a. pohadka")  ...


A doporučil bych nepoužívat pro ten účel názvy položek, tzn. s mezerami, diakritikou a kdovíčím dalším, ale ID.
Tori
Profil
Jelikož chcete umožnit výběr více položek naráz, použila bych tohle:
<select name="zanr[]" multiple size="3">
  <option value="a">pohadka</option>
  <option value="b">horor</option>
  <option value="c">scifi</option>
  <option value="d">romantickej,ne?</option>
</select>

$_POST[zanr] tím pádem bude číslované pole, obsahující všechny zvolené možnosti. Zpracování např:
if (in_array('a', $_POST['zanr']))
  // chtěj pohádku
  
if (in_array('b', $_POST['zanr']))
  // a chtěj i horor. Červená karkulka?  
Matess
Profil *
xmark:
Díky za info.

Tori:
Nevím jestli jsem to špatně pochopil, ale teď když chci aktualizovat data v tabulce, tak mi to vypíše jenom poslední (nejvyšší) ID, které jsem označil.

$pole = $_POST["zanr"]; //odeslal jsem select a označil 1., 2. a 3. řádek (pohádka, horor, scifi)
if (is_array($pole)) {
  foreach ($pole as $val) {
    mysql_query("UPDATE seznam SET zanr = '$val' WHERE id_filmu='1"); //do tabulky (seznam) mi to uloží pouze ID 3 (scifi)
  }
}


Prosím nevíte jak to udělat aby mi to do tabulky napsalo všechna označená ID?
A nejlépe kdyby to uložilo do tabulky rovnou název vybraného žánru? (To jsem zkoušel tak, že jsem mezi 3-ti a 4-tý řádek vložil klasický SELECT na DB a zjišťoval jsem podle ID žánru jeho název. To jsem se následně pokoušel ukládat přímo do tabulky filmu, ale taktéž mi to vypsalo pouze poslední ID čili scifi.)

Děkuji za pomoc.
petr 6
Profil
Na řádku 4 v [#4] nastavíš u filmu s id 1 žánr 1, hned poté tomu samému filmu nastavíš žánr 2 (tudíž už tam nebude 1) a nakonec mu místo té dvojky nastavíš trojku, proto ti to „vypíše jenom poslední (nejvyšší) ID, které jsem označil.

Matess:
Prosím nevíte jak to udělat aby mi to do tabulky napsalo všechna označená ID?
Víme, ovšem záleží, jakou chceš mít strukturu těch dat v databázi.
if (is_array($pole)) {
  $values="";
  foreach ($pole as $val) {
    $values.=$val.",";
  }
    mysql_query("UPDATE seznam SET zanr = '$values' WHERE id_filmu='1"); //do tabulky (seznam) ti to uloží 1,2,3,
}


A nejlépe kdyby to uložilo do tabulky rovnou název vybraného žánru?
To radši ani nezkoušj, je to zbytečné, název žánru potřebuješ až při výpisu dat, nepotřebuješ ho mít uložený v tabulce (resp. ne v této tabulce).
Matess
Profil *
petr 6:
Jo to bude ono. Vyzkouším to. Děkuji.
panther
Profil
Matess:
spíše než oddělovat čárkami si udělej novou tabulku (id_filmu, id_zanru) a každý záznam na jeden řádek. Film o třech žánrech pak bude mít tři řádky

id_filmu | id_zanru
    1    |     1
    1    |     2
    1    |     4
Matess
Profil *
panther:
Jo to je super. Funguje to perfektně. Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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