Autor Zpráva
KarelPHP
Profil *
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
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
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 *
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.

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:

0