Autor Zpráva
kopi
Profil
Zdravím,
potřeboval bych poradit, jak sestavit tabulku, když vím, jaké budou názvy sloupců a kolik má mít řádků. Netuším jakým cyklem nebo jak vůbec na to. Musím počítat s tím, že počet sloupců i řádku se může měnit.

Děkuji moc za radu.
Keeehi
Profil
kopi:
A chceš vytvořit prázdnou tabulku, která bude mít jen záhlaví a x prázdných řádků, nebo bude mít nějaká data? Pokud jde o druhý případ, co je to za data? V jakém jsou formátu?
kopi
Profil
Keeehi:
měla by to být prázdná tabulka, v každé buňce bude input, kam se budou hodnoty vpisovat. Všechny hodnoty v inputech budou textové
Tomášeek
Profil
kopi:
prázdná tabulka, v každé buňce bude input
Takže vlastně prázdná nebude, že? :-)

Vypadat by to mohlo třeba nějak takhle:

$header = array('a' => 'Nazev sloupce a', 'b' => 'Nazev B', 'c' => 'C', 'd' => 'D');
$rows = 6;

$out = '<table>';
$out .= '<tr>';
$out .= '<th>#';

foreach ($header as $key => $row) {
    $out .= '<th>' . $row;
}

for ($i = 0; $i < $rows; $i++) {
    $out .= '<tr>';
    $out .= '<td>' . ($i + 1);
    foreach ($header as $key => $row) {
        $out .= '<td><input name="' . $key . '[]">';
    }
}

$out .= '</table>';
echo $out;
kopi
Profil
Tomášeek:
Děkuju za odpověď, ale jak to udělat, když počet sloupců se může měnit? do pole do header se musí načítat z db nějakým cyklem
Keeehi
Profil
kopi:
do pole do header se musí načítat z db nějakým cyklem
A to je problém?
kopi
Profil
to ještě nevím :-) s poli mi to moc nejde
Tomášeek
Profil
kopi:
pole do header se musí načítat z db nějakým cyklem
Ano, s tím se počítalo. Základní práce s poli, vyvětlená na mnoha místech.

Jak sis jinak tu mou odpověď představoval, kromě toho, že jsem ti dodal kompletní funkční kód? Že si někde založím hosting, vytvořím databázi (ideálně shodnou s tou tvou), naplním daty (ideálně podobnými jako ty), a strávím přípravou té ukázky hodinu namísto těch asi 3 minut, kdy jsem to napsal jako součást mé zbylé reakce z hlavy? Fakt ne :-) Teď je to na tobě, aby sis to pole vytvořil.
kopi
Profil
Udělal si toho až dost. díky. jen nevím, jak naplnit pole z cyklu while. Všude jsou uváděné příklady jen na "for".


už to mám, měl jsem tam jen překlep. Ještě jednou díky moc
Keeehi
Profil
kopi:
jen nevím, jak naplnit pole z cyklu while. Všude jsou uváděné příklady jen na "for".
Ono jde vlastně o úplně stejné cykly a je možné zapsat jeden pomocí druhého. To, co je u foru mezi závorkou a středníkem je v případě while před ním. To, co je mezi středníky je podmínka whilu, a to co je mezi druhým středníkem a koncovou závorkou, to patří do těla whilu, úplně nakonec. Naopak, pokud chceš zapsat while pomocí foru, tak stačí vynechat první a třetí část a použít jen prostředek, kde je podmínka.
Co se týče funkčnosti, jsou zaměnitelné. Ovšem kvůli čitelnosti je někdy lepší použít jeden, jindy druhý způsob.
kopi
Profil
Mohl bys mi prosím ještě poradit, jak ty odeslané hodnoty z inputů zpracovat a uložit do tabulky? Názvy sloupců jsou hodnoty v array. Mám totiž tabulku s povinnými poli - to jsou ty, co se vypisují do array a pak tvoří názvy sloupců vygenerované tabulky. V buňkách jsou inputy a jejich hodnota by se měla uložit do jiné tabulky, kde jsou názvy sloupců zase ty hodnoty z array. Problém je, že v té druhé tabulce je třeba 10 sloupců, ale já dopředu nevím, jaké sloupce se budou inputama odesílat, protože jako povinné pole v první tabulce může být pokaždé jiné.

Takže, jak spárovat insert into ("hodnota", "hodnota") s Values ("",""), aby to neskončilo errorem.

Asi trochu nesrozumitelný,co? :)
Tomášeek
Profil
kopi:
Asi trochu nesrozumitelný,co?
Ano.

Jak vypadá to pole, které je obsažené v POSTu? Jak vypadá struktura databázové tabulky, o které se bavíme?

ale já dopředu nevím, jaké sloupce se budou inputama odesílat
To je divné. Víš přeci, co máš ve formuláři, ne? Každopádně existuje isset, případně empty bude řešit tvůj problém?
kopi
Profil
chtěl bych, aby si uživatel mohl napsat názvy sloupců tabulky a počet řádků tabulky - díky tvému kodu se mi sestaví tabulka. Ted trošku váhám, jak má vypadat name inputu. Mě se tam ted ukládá název sloupce. No a ted nevím, jak to mám zpracovat, jak mám sestavit inserty.

Databázová tabulka má strukturu "NÁZEV POLE" a "POVINNE" - povinné je boolean - 1 povinné a 0 nepovinné. V tém kodu se do array header načítají pouze povinná pole.

Tabulka, do které se mají hodnoty z formuláře ukládat má strukturu, že sloupce jsou ty povinné pole a řádky jsou hodnoty odeslané v inputech.

Takže já nevím, jaký mít name inputu, aby mi to vypsalo všechny hodnoty a kde je input prázdný, tak se hodnota = 0. No a pak jak sestavit insert.

Vím, že toho po tobě chci hodně, ale prostě to nechápu logicky, aspoň za postrčení budu rád.
Kajman
Profil
kopi:
A nechcete raději editovat data v tabulce např. přes adminer?

Pokud chcete vypisovat a editovat jen některé sloupce z tabulky, tak můžete udělat view a editovat to.
Tomášeek
Profil
kopi:
To, co napsal Kajman, ti možná bude stačit.

Pokud se vyjádřím k tvému příspěvku, ani teď z něj moudrý nejsem.

Ted trošku váhám, jak má vypadat name inputu
Pokud chceš vložit více řádků naráz, tak jako pole. Tedy name=auto[], třeba. Insert stačí jeden i na vložení více řádků, inserty nejsou třeba.

V tém kodu se do array header načítají pouze povinná pole
V mém kódu povinná a nepovinná nerozlišuji. To ve tvém se načítají jen povinná, asi máš něco špatně.

Pokud chceš ve formuláři i vizuálně odlišit povinná pole od nepovinných, bude struktura $header jiná, například takováto (pole B je nepovinné):

$header = array(
    'a' => array('name' => 'Nazev sloupce a', 'required' => 1), 
    'b' => array('name' => 'Nazev B', 'required' => 0),
    'c' => array('name' => 'C', 'required' => 1),
    'd' => array('name' => 'D', 'required' => 1)
);
kopi
Profil
Špatně jsem to napsal, já načítám jen povinná pole do TVÉHO kodu - nechtěl jsem ho vydávat za svůj :-) Jen jsem si proměnnou $header upravil.

Všechno, co si napsal chápu. Jak ale zpracuju odeslané inputy? Zkoušel jsem:

foreach ($header as $key => $row) {
        $out .= '<td><input name="pole[]">';
        
$sloupec = array();
    if(isset($_POST['pole'])) { // jsou data v postu
        $sloupec = array_keys($_POST['pole']); // nenačítají se mi tam hodnoty z inputů
        
    }
    
     if(!empty($sloupec)) {
        foreach($sloupec as $sloupecHodnota) {
          
          // a tady by měl být vložený insert, ale nevím, jak ho sestavit.
          
        }
         
     }
Tomášeek
Profil
kopi:
Máš to nějaké pomotané dohromady všechno.

Zpracování formuláře určitě nebude v tom samém foreachi jako se vypisuje HTML tabulka. To zaprvé.
Zadruhé, array_keys slouží k něčemu jinému, podívej se na print_r($_POST['pole']);, jakou strukturu ta odeslaná data mají. Mělo by ti být jasné, jak se k nim dostat, pokud chápeš alespoň základní práci s poli. Pokud to jasné není, vrhni se na studium práce s poli.
kopi
Profil
Díky, pomocí print_r se mi vypisuje toto:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => ) 

To je asi dobře, až na to, že tam je podmínka if(!empty($sloupec)

Prostě jen pořád nevím, jak těch hodnot sestavit ten insert. hodnoty v [] by měly být sloupce tabulky a => hodnoty jsou hodnoty. Každopádně díky, vrhnu se na to studium :-)
Keeehi
Profil
Základní kurz najdeš na www.pehapko.cz/zakladni-kurz/4-zaklady-syntaxe

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: