Autor Zpráva
Matyáš
Profil
Dobrý den,
Řeším otázku úpravy dat přímo v tabulce na stránce.
Napadlo mě, místo hodnoty políčka vložit input type text, ve kterém bude předvyplněný text. Každý input v tabulce bude mít jedinečné id. Podle toho se potom data uloží.
Tabulku zobrazuji následovným způsobem:

      $tabulka = mysql_query("SELECT * FROM nazev_tabulky");
      
      echo"<table class='tabulka_normalni' border='1' cellpadding='3' cellspacing='0'>\n";
      echo "<tr><th>Sloupec1</th><th>Sloupec2</th> ....  a další...  </tr>\n";
      
      while($radek = mysql_fetch_row($tabulka))
      {
        echo "<tr>\n";
        foreach($radek as $hodnota) 
        {
          echo "<td><input type='text' value='".$hodnota."' class='tabulka_policko' size='12'></td>\n";
        }
        echo "</tr>\n";
      }
      echo "</table>\n";

Teď je problém, že já potřebuji, aby u některých sloupců bylo políčko readonly. Zkrátka, aby se mohly upravovat jen některé sloupce.
Napadlo mě, použít foreach($radek as $index => $hodnota) a $index by byla procházena switchem a podle toho by se vypsalo buď normální, nebo readonly políčko. Jenže to mi připadá brutální. Při představě, že by měla tabulka 100 000 políček je to neuvěřitelně těžkopádné řešení.

Nic nového mě nenapadá. Byl beych velice rád, kdyby mi někdo poslal spolehlivý, ověřený a nenáročný kód.
Nejlepší by bylo, zobrazovat políčka po sloupcích, ne po řádkách, jenže žádné mysql_fetch_column neexistuje. Protože to by bylo jednodušší. Nejdříve by se zjistil sloupec a pak by se celý vypsal buď readonly, nebo normálně.

Nenapadá Vás něco?
Děkuji!
Tomáš123
Profil
Matyáš:
Nejdříve by se zjistil sloupec a pak by se celý vypsal buď readonly, nebo normálně.
V prípade, že poznáš počet stĺpcov v tabuľke by šlo pridávať atribút readonly každej bunke n.
Matyáš
Profil
Dobrý večer,
Právě, že počet sloupců neznám. Uživatel si může tabulku filtrovat podle určitých kritérií a některé sloupce si nemusí zobrazit.
Chtělo by to kód, který pracuje "pouze" s názvem sloupce.
Jde tento kód nějak upravit aby procházel tabulku po sloupcích, nikoli po řádkách?
Děkuji.
Matyáš
Profil
Nebo jak řešíte Vy úpravu a zobrazení dat v html tabulce?
Alphard
Profil
Já se většinou setkávám s úpravou tabulkových dat po jednotlivých řádcích, protože řádek reprezentuje jednu entitu (článek, objednávku, ...). I kdyby byla tabulka tak velká, že by měla 100 000 buněk, přece není třeba editovat vše najednou.
Matyáš
Profil
Dobře. Máte pravdu. Navíc například phpMyAdmin umožňuje vždy změnit pouze 1 políčko.
Nemáte náhodou ponětí o tom, kde by se dala sehnat nějaká "šablona"?
Děkuji!
Matyáš
Profil
Dobrý den,
Potřeboval bych poradit, jak vytvořit javascript, který po dvojkliku na řádek tabulky změní všechna (nebo jen některá) políčka řádku na input type="text" s předvyplněnou hodnotou - tak aby jej poté bylo možné upravit - to obstará PHP.
<tr id='1' ondblclick="funkce()"><td>Něco</td><td>Něco jiného</td></tr>
Děkuji za odpověď!
juriad
Profil
Takto?
Matyáš
Profil
juriad:
Děkuji! funguje to.
Teď ale nemůžu přijít na to, jak po stisku escape zase zrušit inputy a text zobrazit do <td>.
Tady jsou změny:
<script>
function edit(radek)
{
  var pole = [5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51];
  var bunka = radek.getElementsByTagName('td');
  for(var i = 0; i < bunka.length; i++)
  {
    obsah[i] = bunka[i].innerHTML;
    if(pole.indexOf(i) != -1)
    {
      var input = document.createElement('input');
      bunka[i].innerHTML = '';
      bunka[i].appendChild(input);
      bunka[i].style.padding = 0;
      input.type = 'text';
      input.value = obsah[i];
      input.id = i;
      input.style.background = "red";
      input.style.margin = 0;
      input.style.border = "none";
    }
  }
  radek.ondblclick = null;  
}

function stisk_klavesy(udalost)
{
  if(udalost.keyCode == 27)
  {
    for(var i = 0; i < bunka.length; i++)
    {
        bunka[i].innerHTML = obsah[i];
    }
    radek.ondblclick = true;
  }
}
</script>
<div id="div_tabulka" tabindex="2" onkeypress="stisk_klavesy(event)">
Nevíte kde je chyba?
Také jsem zrušil padding v buňce a margin inputu v domnění, že se tím input roztáhne do celé buňky, což ale nepomohlo.
juriad
Profil
Toto funguje pro jednotlivé řádky.
http://kod.djpw.cz/eflb

Pokud má být input na celou šířku, musí mít width rovné 100%.
Matyáš
Profil
juriad:
Děkuji!
Bohužel jsem asi špatně formuloval svůj požadavek.
Po stisku escape by se měly zrušit inputy a do buněk se vrátí původní údaje. (Escape slouží k zrušení změn)
Po stisku enter, se jen objeví confirm okno a provede se PHP skript - uložení dat do databáze - dokončení změn.
Ovšem je potřeba, aby šel upravovat jen jeden řádek v reálném čase. Až po jeho zavření (escapem) nebo potvrzení (enterem) bude možno otevřít další řádek.
Ještě se zeptám; Jak by se dalo zařídit, aby escape a enter fungoval, když se nacházím kdekoli v tabulce, nebo div_tabulka - tedy nejen v některém z inputů.
Ještě jednou děkuji.
Keeehi
Profil
Jak odchytit klávesu escape jsem psal včera sem:
Modalni dialog v htm menici stranku, ze ktere byl zavolan

Ten onkeydown se dá samozřejmě navázat i na jiný element. No a vykonanou akci už nechám na vás.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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