hromadny formular

Programovacie jazyky, rady, poradňa...
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

hromadny formular

Príspevok od používateľa joedis »

Da sa spravit taky formular, kde po odoslani ulozi do databazy hodnoty roznym ID v tabulke? napr. vytiahnem si z databazy 5 mien, ku kazdemu menu mam textarea, upravim ich v textarea dam submit a upravi tie mena naraz a v jednom formulari, bez nejakeho preklikavania
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

samozrejme ze da. presne tak ako si to napisal.
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

ja som to vybral z databazy, ku kazdemu menu som pridelil ID ako hidden input , UPDATE mam Where id=$id, ale zobere to vzdy len posledne ID
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ako máš urobený ten <form>?
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

Kód: Vybrať všetko

echo "<form action=edit.php method=post>";
echo "<p><table cellspacing=1 width=40% align=center cellpading=5 bgcolor=000000>";

while($row = MySQL_Fetch_Array($result))
{
$id = $row['id'];
$meno = $row['meno'];

echo " <tr><td class=b align=center>$meno<input type=hidden value=$id name=id>
Zverejniť<input type=checkbox value=1 name=active> "; 
}

echo "<tr><td class=b><input type=submit name=submit value=Uprav>"; 
echo "</table>";
echo "</form>";
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Atribút name nesmie byť rovnaký (čiže nech tam je id_1, id_2..., active_1, active_2...), alebo skús name="id[]" a name="active[]". To druhé by malo vytvoriť pole.
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

no dal som name=id[] , potom $id=$_POST["id"]; ? lebo tak to nejde
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ako tú premennú $id potom používaš? Používaš so ako pole (teda $id[0], $id[1]...)?
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

no pouzivam to pri UPDATE,
Update:

Kód: Vybrať všetko

function uprav() {

$id=$_POST["id"];
$active=$_POST["active"];

$sql  = "UPDATE tabulka set active='$active'...... WHERE id=$id ";
$res = mysql_query($sql);

if($res) echo "Upravené";
  else   echo "Chyba!";
}
form:

Kód: Vybrať všetko

echo "<form action=edit.php method=post>";
echo "<p><table cellspacing=1 width=40% align=center cellpading=5 bgcolor=000000>";

while($row = MySQL_Fetch_Array($result))
{
$id = $row['id'];
$meno = $row['meno'];

echo " <tr><td class=b align=center>$meno<input type=hidden value=$id name=id[]>
Zverejniť<input type=checkbox value=1 name=active[]> ";
}

echo "<tr><td class=b><input type=submit name=submit value=Uprav>";
echo "</table>";
echo "</form>";
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ja by som radšej odporúčal ten prvý spôsob, ale keď chceš ten druhý, tak to musíš urobiť takto:

Kód: Vybrať všetko

function uprav() {
    $id=$_POST["id"];
    $active=$_POST["active"];

    for ($i = 0; $i < count($id) {
        $sql = "UPDATE tabulka set active='$active[$i]'...... WHERE id=$id[$i]";
        $res = mysql_query($sql);

        if($res) echo "Upravené";
        else echo "Chyba!";
    }
}
(alebo niečo podobné)
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

hmm toto mi nechce zobrazit, ten prvy sposob ako prosim ta zapisem?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Je tam chyba:

Kód: Vybrať všetko

for ($i = 0; $i < count($id); $i++) {
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

teraz upravuje len prve ID :(
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

cez echo to vypisalo ked som oznacil 3 mena taketo nieco:

Kód: Vybrať všetko

ID:1
Meno:meno1

ID:2
Meno:meno2

ID:3
Meno:meno3

ID:4

ID:5
takze ono to zobere vsetky ID aj ked nebudu oznacene a preto upravi prve alebo posledne ID, nedalo by sa s tym nieco robit?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Otestuj, či $action[$i] niečo obsahuje. Napr. tam pridaj riadok

Kód: Vybrať všetko

if ($action[$i] == "") continue;
(do toho cyklu for)
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

no teraz aby to upravilo presne ako to ide za sebou, musim zaskrtnut vsetky ID. Ked zaskrtnem 1,2,3,5 ID upravi 1,2,3 a 4 ID :?

Ked uz to nepojde, budem zadavat teda vsetky, lenze mam tam pre kazde ID az 3 actions ako zapisat ci aspon jedna action pri kazdom ID nieco obsahuje?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Môžeš v tom value v

Kód: Vybrať všetko

<input type=checkbox value=$id name=active[]>
použiť priamo id. Potom bude pole $active[] obsahovať id tých položiek, ktoré chceš meniť.
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

Stale je nejaky problem. Na priklad: mam 3 mena ku kazdemu menu 2 checkboxy, jeden checkbox s hodnotou 1 a druhy ma hodnotu 3, ked kazdemu menu oznacim len checkbox s hodnotou 1 vsetko je v poriadku, ale ked dam napriklad prve meno - checkbox1 a druhe meno - checkbox2 tak prvemu menu prideli hodnotu checkboxu1 + checkboxu2 cize 4 a to druje ignoruje, neviem ci to tymto sposobom pojde spravit?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Takto nejako by to bolo tou prvou metódou:

Kód: Vybrať všetko

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>

<body>


<?php

if (isset($_POST['submit'])) {
	$i = 0;
	while (isset($_POST["id_" . $i])) {
		$id = $_POST["id_" . $i];
		$check1 = isset($_POST["check1_" . $i]) ? TRUE : FALSE;
		$check2 = isset($_POST["check2_" . $i]) ? TRUE : FALSE;
		echo "ID: ", $id, "; checkbox-1: ", $check1 ? "true" : "false", "; checkbox-2: ", 
			$check2 ? "true" : "false", "<br>";
		$i++;
	}
} else {
	echo '<form method="post">';
	for ($i = 0; $i < 10; $i++) {
		$id = "id-$i";
		echo "Meno$i <input type=hidden value=\"$id\" name=id_".$i.">".
			"Zverejnit<input type=checkbox value=\"1\" name=check1_$i> ".
			"Nieco ine<input type=checkbox value=\"1\" name=check2_$i><br>";
	}
	echo "<input type=submit name=submit value=Uprav>";
	echo "<form>";
}

?>
</body>
</html>
joedis
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 03 aug 2006, 10:35

Príspevok od používateľa joedis »

diky :)
Napísať odpoveď