Autor Zpráva
pavel01
Profil *
mysql_query("SET NAMES 'utf8'");
$vysledek_editace_misto=mysql_query("
INSERT IGNORE INTO misto (misto_stat, misto_psc, misto_mesto, misto_ulice, misto_gps, misto_typ)
VALUES(
'".$_POST["misto_stat"]."',
'".$_POST["misto_psc"]."',
'".$_POST["misto_mesto"]."',
'".$_POST["misto_ulice"]."',
'".$_POST["misto_gps"]."',
'".$_POST["misto_typ"]."'
)
");
Tori
Profil
pavel01:
To je návod, jak to udělat, anebo se na něco ptáte?
Jinak IGNORE způsobí jen to, že pokud se záznam neuloží kvůli tomu, že se pokoušíte vkládat duplicitní hodnotu do některého indexovaného sloupce, tak mysql_query nevrátí false.
Nechybí tam vložení hodnoty i do sloupce misto_id? Ve všech ostatních by se asi opakované hodnoty mohly vyskytnout.
pavel01
Profil *
Potřeboval bych, aby se po odeslání formuláře vložil nový řádek s výše zmíněnými údaji jen v případě, že řádek s těmito údaji ještě neexistuje. Dalším voláním databáze bych pak uložil změny do relevantních tabulek a vymazal v tabulce "misto" řádky , které nejsou sojeny s žádnými tabulkami. Od kódu výše jsem očekával, že vloží řádek a pokud již řádek s těmito údaji existuje, nechá být.
Děkuji za případnou pomoc.
Tori
Profil
Asi bych určila, která pole rozhodují, jestli už takový záznam je v DB. Např. PSČ by tam nemělo být vůbec, to je vázané na město. Rovněž stát by měl být jako FK (cizí klíč) v tabulce měst. GPS nemusí být vždy zadané. Takže by pro určení unikátnosti zbyly sloupce typ + ulice + č.p. (to ukládáte zároveň k ulici?) + ID města + nějaký název (pokud se tam zadává). Přes těchto 4-5 sloupců bych nastavila UNIQUE index, a pak už by se nevložily opakované záznamy. Bylo by potom ale lepší vynechat IGNORE a po provedení dotazu testovat, jestli nevyhodil MySQL chybu 1062 = duplicita - tím byste rozlišil chybu vs. duplicitu.

A používejte escapování (intval/floatval pro čísla, mysql_real_escape_string pro řetězce), ušetříte si možné problémy.

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: