Autor | Zpráva | ||
---|---|---|---|
kopi Profil |
#1 · Zasláno: 24. 8. 2017, 21:34:30
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 |
#2 · Zasláno: 24. 8. 2017, 22:22:20
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 |
#5 · Zasláno: 25. 8. 2017, 13:52:09
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 |
#6 · Zasláno: 25. 8. 2017, 16:27:18
kopi:
„do pole do header se musí načítat z db nějakým cyklem“ A to je problém? |
||
kopi Profil |
#7 · Zasláno: 25. 8. 2017, 18:29:05
to ještě nevím :-) s poli mi to moc nejde
|
||
Tomášeek Profil |
#8 · Zasláno: 25. 8. 2017, 20:07:27
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 |
#10 · Zasláno: 26. 8. 2017, 23:04:43
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 |
#12 · Zasláno: 28. 8. 2017, 09:27:32
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 |
#13 · Zasláno: 28. 8. 2017, 20:16:50
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 |
#14 · Zasláno: 28. 8. 2017, 20:42:20
|
||
Tomášeek Profil |
#15 · Zasláno: 29. 8. 2017, 06:25:05
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 |
#16 · Zasláno: 29. 8. 2017, 08:29:40
Š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 |
#17 · Zasláno: 29. 8. 2017, 08:37:14
kopi:
Máš to nějaké pomotané dohromady všechno. Zpracování formuláře určitě nebude v tom samém foreach i 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 |
#19 · Zasláno: 29. 8. 2017, 12:55:28
Základní kurz najdeš na www.pehapko.cz/zakladni-kurz/4-zaklady-syntaxe
|
||
Časová prodleva: 7 let
|
0