Autor | Zpráva | ||
---|---|---|---|
KarelPHP Profil * |
#1 · Zasláno: 16. 8. 2011, 20:53:50
Ahoj, potřeboval bych poradit. Mám tabulku, která má 3 sloupečky - Jméno, Číslo, Poznámka
Jména se generují z databáze a vedle k nim se přidávají <input type="text"> Vypisovací while vypadá takto: while($vysledek=mysql_fetch_array($vypis)) { echo "<tr><td>".$vysledek[Jmeno]." <input type='hidden' name='jmeno' value=\"".$vysledek[Jmeno]."\"></td> <td><input type='text' name='cislo[]'></td> <td><input type='text' name='poznamka[]'></td></tr>"; } Potom mám skript, který by to měl ukládat do databáze. Protože to jsou všechno pole, tak používám funkci forearch, ale nemám s ní moc zkušeností, takže mi to samozdřejmě nefunguje. používám 3 foreach, na každé pole jedno a vnořil jsem je do sebe. Takhle to vypadá: foreach( $_POST['jmeno'] as $jmeno1=>$jmeno){ foreach( $_POST['znamka'] as $cislo1=>$cislo){ foreach( $_POST['poznamka'] as $poznamka1=>$poznamka){ $uloz = "INSERT INTO pokus2(Jmeno,Cislo,Poznamka) VALUES('$jmeno','$cislo','$poznamka')"; $VysledekDotazu=mysql_query($uloz); } } } Prosím o pomoc, s php teprve začínám a s forearch jsem se setkal poprvé |
||
Michal Benda Profil |
#2 · Zasláno: 17. 8. 2011, 08:10:02 · Upravil/a: Michal Benda
Stačí to procházet jedním foreachem (popř. forem)
foreach( $_POST['jmeno'] as $klic => $jmeno){ $uloz = "INSERT INTO pokus2(Jmeno,Cislo,Poznamka) VALUES('".$jmeno."', '".$_POST['cislo'][$klic]."', '".$_POST['poznamka'][$klic]."')"; // misto $jmeno by slo pouzit $_POST['jmeno'][$klic] $VysledekDotazu=mysql_query($uloz); } varianta pro for: for($i=0;$i<count($_POST['jmeno']);$i++){ $uloz = "INSERT INTO pokus2(Jmeno,Cislo,Poznamka) VALUES('".$_POST['jmeno'][$i]."', '".$_POST['cislo'][$i]."', '".$_POST['poznamka'][$i]."')"; $VysledekDotazu=mysql_query($uloz); } a jinak v tom výpisu si tam podle mě udělal menší chybu - chybí hranaté závorky v inputu hidden pro jméno takže by to mělo být takto: <input type='hidden' name='jmeno[]' value=\"".$vysledek[Jmeno]."\"> |
||
Nox Profil |
#3 · Zasláno: 17. 8. 2011, 09:01:59
Query v cyklu nikdy pokud není absolutně nutné
$query = 'INSERT INTO pokus2 (Jmeno, Cislo, Poznamka) VALUES '; foreach( $_POST as $key => $value ) $query .= '("'.mysql_real_escape_string($value['jmeno']).'", "'.mysql_real_escape_string($value['cislo']).'", "'.mysql_real_escape_string($value['cislo']).'"), '; mysql_query( mb_substr($query, 0, -2) ); |
||
KarelPHP Profil * |
#4 · Zasláno: 17. 8. 2011, 15:24:37
Děkuji za pomoc. už mi to funguje, použil jsem toto:
foreach( $_POST['jmeno'] as $klic => $jmeno){ $uloz = "INSERT INTO pokus2(Jmeno,Cislo,Poznamka) VALUES('".$jmeno."', '".$_POST['cislo'][$klic]."', '".$_POST['poznamka'][$klic]."')"; // misto $jmeno by slo pouzit $_POST['jmeno'][$klic] $VysledekDotazu=mysql_query($uloz); } Moc tomu kodu nerozumím, např pořádně nechápu co znamená $_POST['cislo'][$klic] proč se tam přidává ta proměnná $klic A ještě mám jeden problém. toto funguje, pokud ke všem jménům zadám číslo a poznámku, ale když nezadám ke všem, stejně se mi uloží všechna jména. jak to udělat, aby to zapsalo jen do db jen ty jména, která mají vyplněno cislo a poznamku? je to jen detail, když to budu vypisovat z db, tak pomocí sql příkazu vypíšu jen ty co to mají vyplněné, ale zbytečně zabírají prázdná jména místo v databázi. |
||
Časová prodleva: 14 let
|
0