Autor Zpráva
kimmy
Profil *
Ahoj,

potřebovala bych poradit.
Mám jednoduchý formulář, který vypadá přibližně takto:

"DOTAZ NA DATABAZI"
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
while ($row = db_fetch_array($result)) {
   <input type="checkbox" name="checkbox[]" value="ANO">
   echo $row['id'];
}
<input type='submit' name='oznacit' value='Označit za proplacené'>
</form>

if (isset ($_POST['oznacit'])) {
   $pole[] = $_POST['checkbox'];

   $query = "UPDATE jina tabulka
				SET value = 'ANO'
				WHERE bug_id = "VSECHNY ID KTERE JSOU V POLI $POLE";
   $result = db_query($query);
}


Když to spustím takto, vytvoří se mi pole s indexy [0], [1], atd., které mají hodnotu "ANO".
Myslím, že bych ale potřebovala pole, které bude mít indexy stejné jako je ID problému, tzn. to co je v $row['id'] a budou mít hodnotu "ANO".

Potřebuju totiž vložit do "jiné tabulky" hodnotu ANO na pozice, které mají "bug_id" rovno ID problému.

Doufám, že jsem to napsala aspoň trošku zrozumitelně, pokud ne tak se omlouvám a ráda připíšu případné podrobnosti.

Děkuju moc.
kimmy
Profil *
samozřejmě řádek
WHERE bug_id = "VSECHNY ID KTERE JSOU V POLI $POLE";
takto v kódu není, zde právě nevím co dopsat.
nightfish
Profil
asi bych to dělal trochu jinak... (můj kód předpokládá, že $row['id'] obsahuje pouze číslice)

while ($row = db_fetch_array($result)) {
   echo "<input type='checkbox' name='row".$row['id']."'>";
   echo $row['id'];
}


a zpracování pak

foreach ($_POST as $k => $v) {
  if (($v == "on") && (preg_match("/^row(\d+)$/", $k, $regs))) {
    mysql_query("update tabulka set value='ANO' where bug_id = '".$regs[1]."'");
  }
}


případně by si to člověk mohl uložit v tom cyklu do pole, pak z toho pomocí implode získat podmínku pro where a provést ten dotaz jenom jeden....
kimmy
Profil *
nightfish
No tééééda, fakt to jede :-) Děkuju!

Jen taková drobnost:
Já když kliknu na to tlačítko "Označit za proplacené", tak v té databázi se to změní přesně tam kde chci, ale ty vypsané řádky mi zůstanou stejné. Já v tom echo $row['id']; vypisuju jen ty řádky, které tu hontotu "ANO" nemají.
Jako funguje to když stránku obnovím. V tom případě ta označená možnost zmizí. Chtěla bych ale, aby zmizela už po kliknutí na "Označit za ..".

Nevíš jak na to?
kimmy
Profil *
nightfish
A nebo já za ten poslední dotaz dám obnovení stránky.. nějaký header nebo něco.. Aspoň zmizí údaje z POSTU... to by šlo, ne?
kimmy
Profil *
S tím header to moc nejde, vypíše mi to vždycky:

SYSTEM WARNING: Cannot modify header information - headers already sent by (output started at C:\web\www\nazev_skriptu.php:65)
kimmy
Profil *
už jsem to vyřešila pomocí http://usenet.jyxo.cz/cz.comp.linux/0603/problem-s-php.html
nightfish
Profil
kimmy
řešením je dát ten cyklus s update ještě před select, který vybírá řádky k zobrazení...
kimmy
Profil *
nightfish
Aha, máš pravdu, to je lepší. Děkuju.
kimmy
Profil *
A ještě něco...

Tato situace se mi nelíbí: Mám před sebou formulář se všemi checkboxy, žádný z nich nezaškrtnu a kliknu na "Označit za proplacené." Stane se to, že se mi samozřejmě obnoví stránka, protože mám na začátku formuláře
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
. Ale když se mi obnoví stránka, přepíše se trošku její obsah.

Potřebovala bych (asi přes JS) stvořit něco, aby nebylo možno kliknout na tlačítko "Označit", pokud není zaškrtnutý žádný checkbox. Nebo aby na něho bylo možno kliknout, ale aby stránka zůstala po kliknutí stejná, jaká byla před kliknutím na to tlačítko.

Našla jsem hodně věcí tohoto typu: http://interval.cz/clanky/javascript-kontrola-formulare-pred-odeslanim /,
ale to mi do mojeho kódu moc nesedí, protože nemůžu měnit "name" jednotlivých inputů. Mám tam totiž to pole
"<input type='checkbox' name='row".$row['id']."'>"


Nevěděl by někdo, jak to zprovoznit, aby to šlo aplikovat na ten můj formulář?

Předem moc moc děkuju.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0