Autor Zpráva
libris
Profil
Ahoj, vím že už se tento problém tady několikrát řešil... Víceřádkové mazání mi funguje, ale ne tak jak bych potřeboval.

Problém je v tom že bych potřeboval ošetřit dva paramatry a né jenom jeden jak uvádím níže "id". Tzn. že nevymazat řádky kde id = $r_obj["id"], ale aby se vymazaly jen ty řádky kde id_host = $r_obj["id_host"] AND cas = $r_obj["cas"], ale nevím jak toho docílit.

Uvádím zkrácený kód.

if(isset($_POST["vyber"]) && isset($_POST["akce"]) && ($_POST["akce"] == "Smazat")):
  printf("DELETE FROM test WHERE id in (" . implode(',',$_POST['vyber']) . ")");
endif;

echo "<form name=\"smazat\" action=\"\" method=\"post\">";
  echo "<input type=\"checkbox\" name=\"vyber[]\" value=\"".$r_obj["id"]."\">";
  echo "<input type=\"submit\" name=\"akce\" value=\"Smazat\">";
echo "</form>";


Díky
Kajman_
Profil *
co vygenerovat podmínku
(id_host = $r_obj["id_host"] AND cas = $r_obj["cas"])
or
(id_host = $r_obj["id_host"] AND cas = $r_obj["cas"])
or
(id_host = $r_obj["id_host"] AND cas = $r_obj["cas"])
...
libris
Profil
Můžeš mi to prosím trochu přiblížit? Jak mám vygenerovat podmínku když v poli vyber[] přenáším jenom "id"? Potřeboval bych, abych mohl přenést dvě proměnné místo jedné, a to $id_host a $cas abych mohl tyto proměnné porovnat s údajema v databázi.
Kajman_
Profil *
Např.
echo "<input type=\"checkbox\" name=\"host[1]\" value=\"".$r_obj["id_host"]."\">";
echo "<input type=\"hidden\" name=\"cas[1]\" value=\"".$r_obj["cas"]."\">";
echo "<input type=\"checkbox\" name=\"host[2]\" value=\"".$r_obj["id_host"]."\">";
echo "<input type=\"hidden\" name=\"cas[2]\" value=\"".$r_obj["cas"]."\">";
...
libris
Profil
Zkouším to nějak rozběhnout, ale asi tam dělám něco špatně...

echo "<input type=\"checkbox\" name=\"id_host[]\" value=\"".$r_obj["id_host"]."\">";
echo "<input type=\"hidden\" name=\"cas[]\" value=\"".$r_obj["cas"]."\" />";

a pak porovnávám...

printf("DELETE FROM test WHERE (id_host in (" . implode(',',$_POST['id_host']) . ") AND cas in (" . implode(',',$_POST['cas']) . "))");

Ale vypíše to všechny časy co jsou na stránce i když zaškrtnu jen jeden checkbox, přitom id_host se vypíše jen tolikrát, kolik zaškrtnu checkboxu.

Tak si to asi neměl na mysli že?
Kajman_
Profil *
Proto tam byla ta čísla, aby šlo

foreach($_POST['id_host'] as $poradi=>$hodnota)
printf("(idhost='$hodnota'" and cas='".$_POST['cas'][$poradi].")' or");
libris
Profil
Tak jsem to zkoušel, něco to vymaže a něco zase ne (nechápu to ). Zřejmě (podle výpisu) se nepřiřadí správný čas. V databázi můžou být třeba i 4 řádky se stejným údaji "id_host" a "cas". Vypisuji jak jsem to poskládal.

if(isset($_POST["id_host"]) && isset($_POST["akce"]) && ($_POST["akce"] == "Smazat")):
foreach($_POST['id_host'] as $poradi=>$hodnota):
  mysql_query("DELETE FROM test WHERE id_host='$hodnota' AND cas='".$_POST['cas'][$poradi]."'") or die (mysql_error()); 
  printf ("DELETE FROM test WHERE id_host='$hodnota' AND cas='".$_POST['cas'][$poradi]."'");
endforeach;
endif;

echo "<input type=\"checkbox\" name=\"id_host[]\" value=\"".$r_obj["id_host"]."\">";
echo "<input type=\"hidden\" name=\"cas[]\" value=\"".$r_obj["cas"]."\" />";


Asi se ptám jako lama, ale jak tam dostanu ty čísla, pokud teda mají vliv na správné vymazávání? Data se mi ciklicky vypisují do tabulky pod sebe.
Kajman_
Profil *
Musíte tam dát ty čísla! Prostě si uděláte proměnnou a na každém řádku ji zvýšíte o jedničku.

$i=1;
cyklus
echo "<input type=\"checkbox\" name=\"id_host[$i]\" value=\"".$r_obj["id_host"]."\">";
echo "<input type=\"hidden\" name=\"cas[$i++]\" value=\"".$r_obj["cas"]."\" />";
libris
Profil
Tak už to snad jede jak má. Použil jsem to zaciklení. Používám ve stránce stránkování, kde využívám $i, tak se hodila i pro toto využití. Jen doufám že to bude v pořádku fungovat a nevymaže nic jiného. Bude to totiž sloužit k vymazávání objednávek. To bych byl v pasti kdyby to vymazalo důležité objednávky. No budu to ještě zkoušet a uvidíme.

Zatím díky, jsem ti vděčný za pomoc.
libris
Profil
ahoj, navazuji na tento problém, protože bych potřeboval né jenom mazata vybrané řádky ale také je vypsat. Jenže používám jedne formulář kde bych potřeboval více tlačítek, které by při kliknutí udělalo nějaký úkon.

Mám tam teď:
echo "Zaškrtnuté: <input type=\"hidden\" name=\"akce\" value=\"Smazat\" />";
echo "<input type=\"image\" name=\"akce\" value=\"Smazat\" src=\"img/icon_delete.gif\" alt=\"Smazat\" title=\"Smazat\" />";

a pak se vytvoří podmínka:
if(isset($_POST["id_host"]) && isset($_POST["akce"]) && ($_POST["akce"] == "Smazat")):

Pokud se jedná jen o jednu akci, ato mazání, tak to funtuje, ale já bych potřeboval ve formuláři více akcí, třeba mazání a vypisování:
echo "Zaškrtnuté: <input type=\"submit\" name=\"akce\" value=\"Smazat\" /> <input type=\"submit\" name=\"akce\" value=\"Vypsat\" />";

Jenže se mi podmínka $_POST["akce"] nechce vypsat.

Neví někdo jak to vyřešit?

Děkuji

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