Autor Zpráva
Stepanka
Profil *
Ahoj,

prosím, potřebovala bych poradit. Mám jeden SELECT a INSERT, nějak takto:

$query4 = "SELECT bug_id
							FROM custom_field_string_table
							WHERE bug_id = '".$regs[1]."' //REGS[1] JE POLE IDcek ZASKRTNUTYCH V CHECKBOXU VE FORMU
							GROUP BY bug_id";
							
			$result4 = db_query ($query4);	
			while ($row4 = db_fetch_array ($result4)) {
				$bugs_id[] = $row4['bug_id'];
			}
				
			foreach ($bugs_id as $key => $val) {	
				$query7 = "INSERT INTO custom_field_string_table 
								VALUES (8, '".$val."', 'ANO')";
				$result7 = db_query ($query7);
			}



Vždycky mi to udělá to, že INSERT se provede jen pro první hodnotu $val. Přitom, když je to v cyklu, měl by se provést pro všechny. Chci vložit více řádků najednou (tolik kolik jich je v poli $bugs_id). V čem je chyba, nevíte prosím někdo?

Děkuju moc.
nightfish
Profil
Vždycky mi to udělá to, že INSERT se provede jen pro první hodnotu $val. Přitom, když je to v cyklu, měl by se provést pro všechny. Chci vložit více řádků najednou (tolik kolik jich je v poli $bugs_id). V čem je chyba, nevíte prosím někdo?

echo count($bugs_id); // vypíše počet záznamů v $bugs_id a ty si zkontroluješ, že vypíše číslo větší než 1 - umístit před ten foreach
echo mysql_error(); // vypíše chybu, ke které došlo při dotazu - umístit za $result7 = db_query ($query7);
Stepanka
Profil *
nightfish
Děkuju, zkusila jsem to..
echo count($bugs_id); vypíše 1. Zrovna tu mám asi 8 checkboxů. Podle toho kolik jich zaškrtnu, tolik jedniček se vypíše.

Když před foreach zkusím dát print_r ($bugs_id);, vypíše se to pole takto:
Array ( [0] => 30 ) Array ( [0] => 35 ) Array ( [0] => 37 ) Array ( [0] => 38 ) Array ( [0] => 39 ) Array ( [0] => 40 ) Array ( [0] => 45 ) Array ( [0] => 46 ) Array ( [0] => 47 ) 


A když dám za db_query echo mysql_error();, vypíše to chybu "Previous non-fatal errors occurred. Page contents follow."
Stepanka
Profil *
nightfish
Ale když dám do cyklu foreach echo $val; a zaškrtnu všechny checkboxy, vypíše se 303537383940454647, což je dobře. Jsou to v řadě za sebou všechny ID, které potom potřebuju uložit v INSERTu.
nightfish
Profil
A když dám za db_query echo mysql_error();, vypíše to chybu "Previous non-fatal errors occurred. Page contents follow."
to je málo, určitě to toho vypíše víc... je potřeba sem poslat všechno
Stepanka
Profil *
nightfish
Nic víc to nevypíše. Jsou to skripty systému mantis, nevím jestli nemají ošetřené,a by to víc nevypisovalo. Pak už se vypíše jenom

APPLICATION ERROR #401

CHYBA: Dotaz v databázi se nezdařil.
Stepanka
Profil *
Nebo by to mělo jít zjednodušit takhle, ale taky to vyhodí vždycky chybu:

$query4 = "SELECT bug_id
							FROM custom_field_string_table
							WHERE bug_id = '".$regs[1]."'
							GROUP BY bug_id";
							
			$result4 = db_query ($query4);	
			while ($row4 = db_fetch_array ($result4)) {
				$query7 = "INSERT INTO custom_field_string_table (field_id, bug_id, value)
								VALUES (8, '".$row4['bug_id']."', 'ANO')";
				$result7 = db_query ($query7);
			}


Žádný foreach by tam ani nebyl potřeba. Vůbec nerozumím tomu, co mu vadí..
nightfish
Profil
Stepanka
ještě jeden pokus... zkus nahradit $result7 = db_query ($query7);
za
$result7 = mysql_query($query7); echo mysql_error();

(to by mohlo veškeré ošetření mantisu "obejít" a říct ti, v čem je problém)
Stepanka
Profil *
nightfish
Jo, fakt.
Při zaškrtnutí jednoho checkboxu to vypsalo
Duplicate entry '8-30' for key 1

Při zaškrtnutí všech
Duplicate entry '8-30' for key 1Duplicate entry '8-35' for key 1Duplicate entry '8-37' for key 1Duplicate entry '8-38' for key 1Duplicate entry '8-39' for key 1Duplicate entry '8-40' for key 1Duplicate entry '8-45' for key 1Duplicate entry '8-46' for key 1Duplicate entry '8-47' for key 1


víš z toho něco? Já ne..
nightfish
Profil
takže v tabulce je nějaký unikátní klíč (asi složený na sloupcích field_id a bug_id) a hodnoty s uvedenou kombinací obou sloupečků už v tabulce jsou a proto nelze přidat další...
Stepanka
Profil *
Aha, to je pravda.. U některých ID je v tabulce uvedeno (field_id, bug_id, value) => (8, ČÍSLO ID, NE). A já potřebuju tu hodnotu "NE" změnit na "ANO". Jenže pomocí UPDATE to nejde, protože existují i IDčka, která ten řádek (8, ČÍSLO ID, ANO/NE) nemají vůbec a je potřeba ho celý nově vložit.

Sakra jak to teď zkombinovat..
nightfish
Profil
mohlo by jít použít

$query7 = "INSERT INTO custom_field_string_table (field_id, bug_id, value)
VALUES (8, '".$row4['bug_id']."', 'ANO') ON DUPLICATE KEY UPDATE value = 'ANO'";
Stepanka
Profil *
nightfish
Aha, zatím moc moc děkuju, tohle vypadá dobře.

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: