| 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: 11 let
|
|||
0