Autor | Zpráva | ||
---|---|---|---|
Vilak Profil |
Zdravím. Mám tabulku plnou inputů. Inputů může byt X (tedy můžu si sám říct, kolik jich chci). Mám sepsaný script, díky kterému si můžu vytvořit tabulku třeba o 5 řádcích a vím (platí vždy), že každý řádek má 3 sloupce (Takže si můžu vytvořit libovolný počet řádků u tabulky, která má pokaždé 3 sloupce).
buňky ve sloupcích se jmenují následovně: 1. řádek: rank1, num_allergen1, allergen1 2. řádek: rank2, numallergen_2, allergen2 ... a teď nevím, jak udělat pomocí cyklu to, aby se mi vždy vytvořila proměnná rank1 a zapsala do databáze, potom rank2 a zapsala do databáze... script vypadá takto: elseif (isset($_POST['go_tb'])) { require_once "include/db.php"; // připojení k db $num = $_POST['number']; //značí počet řádků v tabulce - funguje $b = 1; while ($b <= $num) { $rank = $_POST['rank".$b."']; //tady jsem se snažil udělat ten cyklus, nefunguje $number = $_POST['num_allergen$b']; // tady taky, nefunguje $allergen = $_POST['allergen"'.$b.'"']; // tady taky, nefunguje echo "ahoj"; // jen zkouška, jestli se vypisuje echo echo $rank."<br>".$number."<br>".$allergen; // tady by se měly vypsat hodnoty, proměnných (pro kontrolu), které jsou prázdné $vlozeni = mysql_query("INSERT INTO `allergens` (`rank`,`number`,`allergen`) VALUES ('".$rank."','".$number."','".$allergen."')"); //zápis do DB funguje, ale vždy se zapíše prázdná hodnota, tedy proměnné jsou prázdné $b++; } } |
||
Alphard Profil |
Jak vypadá vstupní POST pole?
S ním se dá docela čarovat. Když si inputy ve formuláři pojmenujete jako <input name="tbl[0][rank]"><input name="tbl[0][number]"><input name="tbl[0][allergen]"> foreach ($_POST['tbl'] as list($rank, $number, $allergen)) { // tahle konstrukce jde až od PHP 5.5, na starších přes pomocnou proměnnou // insert } Já jsem ty položky vlastně pojmenoval, takže ne list, ale asociativní pole. foreach ($_POST['tbl'] as $line) { // $line['rank'] ... // insert } |
||
Vilak Profil |
já jsem pojmenování polí řešil pomocí jednoduchého cyklu while. Bohužel to vaše "tbl[0][rank]" mi nic neříká... pod jakým pojmenováním si toto mám najít, abych se na to mohl podívat blíž?
vstupní pole vypadá takto: $c = 1; while ($c <= $num) { echo " <tr> <td class=\"food_tb1\"><input type=\"text\" name=\"rank".$c."\" value=\"".$c."\"></td> <td class=\"food_tb2\"><input type=\"text\" name=\"num_allergen".$c."\"></td> <td class=\"food_tb3\"><input type=\"text\" name=\"allergen".$c."\"></td> </tr>"; $c++; } echo " <tr> <td colspan=\"3\"> <input name=\"number\" type=\"hidden\" value=\"".$num."\"> <input name=\"go_back\" type=\"submit\" value=\"Vrátit zpět\"> <input name=\"go_tb\" type=\"submit\" value=\"Vytvořit tabulku\"> </td> </tr> </table> </form> "; |
||
Alphard Profil |
#4 · Zasláno: 3. 7. 2015, 11:30:22
Dle [#3] Vilak tu hodnotu přilepíte k názvu bez uvozovek, tak nevím, proč je používáte při přístupu k prvkům.
$rank = $_POST['rank'.$b]; $number = $_POST['num_allergen'.$b]; // tohle bylo skoro dobře, kdybyste to dal do uvozovek, fungovalo by to $allergen = $_POST['allergen'.$b]; „Bohužel to vaše "tbl[0][rank]" mi nic neříká... pod jakým pojmenováním si toto mám najít, abych se na to mohl podívat blíž?“ Nevím, jestli to má nějaký název, není o tom co hledat. Upravte si formulář podle mého vzoru a vypište si print_r($_POST) , ať vidíte, co to dělá.
|
||
Vilak Profil |
Ano, funguje to, teď si připadám blbě, že jsem to sám neviděl...
dávám zde konečné řešení pro budoucí uživatele: tabulka // chybí část, bylo tu echo "; $c = 1; while ($c <= $num) { echo " <tr> <td class=\"food_tb1\"><input type=\"text\" name=\"rank".$c."\" value=\"".$c."\"></td> <td class=\"food_tb2\"><input type=\"text\" name=\"num_allergen".$c."\"></td> <td class=\"food_tb3\"><input type=\"text\" name=\"allergen".$c."\"></td> </tr>"; $c++; } echo " <tr> <td colspan=\"3\"> <input name=\"number\" type=\"hidden\" value=\"".$num."\"> <input name=\"reset\" type=\"reset\" value=\"Reset\"> <input name=\"go_back\" type=\"submit\" value=\"Vrátit zpět\"> <input name=\"go_tb\" type=\"submit\" value=\"Vytvořit tabulku\"> </td> </tr> </table> </form> "; } elseif (isset($_POST['go_tb'])) { require_once "include/db.php"; // připojení k db $num = $_POST['number']; //značí počet řádků v tabulce - funguje $b = 1; while ($b <= $num) { $rank = $_POST['rank'.$b]; // toto už funguje $number = $_POST['num_allergen'.$b]; $allergen = $_POST['allergen'.$b]; echo "ahoj"; // jen zkouška, jestli se vypisuje echo echo $rank."<br>".$number."<br>".$allergen; // tady by se měly vypsat hodnoty, proměnných (pro kontrolu), které jsou prázdné print_r($_POST); // uvidíme, co dělá formulář $vlozeni = mysql_query("INSERT INTO `allergens` (`rank`,`number`,`allergen`) VALUES ('".$rank."','".$number."','".$allergen."')"); //zapíšou se hodnoty $b++; } } |
||
Časová prodleva: 10 let
|
0