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]">
budete pak moci projít vstupní sadu přes
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
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>
                        ";
                    }
php - zápis
                    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++;
                        }
                    }
Děkuju moc!

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: