Autor | Zpráva | ||
---|---|---|---|
fandax17 Profil |
#1 · Zasláno: 30. 10. 2013, 18:23:24
ahoj, začínám s php a sql a snažím se pomocí php vkládat a zobrazovat data z sql databáze. mám 3 tabulky jedna z nich má referenční integritu na 2 zbývající tabulky a to takto:
<?php mysql_query ("create table p_s( id_pivo int NOT NULL, id_stupen int NOT NULL, primary key (id_pivo,id_stupen), FOREIGN KEY (id_pivo) references pivo (id_pivo), FOREIGN KEY (id_stupen) references stupen (id_stupen)) ") or die('nejde vytvorit tabulku PS!').mysql_error() ; echo "record added"; ?> data se snažím vkládat formulářem takto: <form method="POST" action=""> Zadejte název piva a stupne... <input type="text" size="3" name=id1> <BR> <input type="text" size="3" name=id2> <BR> <input type="submit" value="zadat"> <?php { if (empty($_POST)) {echo "Žádná data nebyla odeslaná, nyní se zobrazí formulář"; } else { echo "Uživatel už formulář odeslal, nyní proběhne odeslání formuláře"; mysql_connect.......... mysql_query ("insert into p_s values ('$_POST[id1]','$_POST[id2]')") or die('AJ! CHYBA - špatný dotaz!').mysql_error(); }} ?> při zprovoznění na localhostu vše funguje (tj. do formuláře se píšou čísla a musí se vyplnit obě kolonky), ale když vše nahraju na web (webzdarma.cz nebo hostuju) tak referenční integrita nefunguje a not null taky ne, takže do formuláře můžu psát co a chci a stačí vyplnit jen jedno políčko a formulář se odešle... proč to na localhostu funguje a při nahrání na web ne? |
||
nemeja Profil |
Proč dáváš do int sloupců
'string' ?
Nezapomeň si ošetřit vstupy a přetypovat proměnnou napevno na int ....((int)$_POST[id1],(int)$_POST[id2]) |
||
Tori Profil |
Chybí tam hlavně určení typu tabulky. Možná na localhostu máte jako výchozí nastavený InnoDB, ale na wz.cz dost pravděpodobně bude výchozí MyISAM.
mysql_query ("create table p_s( id_pivo int NOT NULL, id_stupen int NOT NULL, primary key (id_pivo,id_stupen), FOREIGN KEY (id_pivo) references pivo (id_pivo), FOREIGN KEY (id_stupen) references stupen (id_stupen)) ENGINE = InnoDB") Jinak pokud je sloupec NOT NULL, tak do něj nemůžete ukládat hodnotu NULL, nic míň, nic víc. Prázdný řetězec (= nevyplněné políčko formuláře) tam uložíte v pohodě. |
||
fandax17 Profil |
#4 · Zasláno: 1. 11. 2013, 00:00:46
děkuju mockrát, pomohla změna
ENGINE = InnoDB zajímavé je, že na hostuju to funguje, ale na wz.cz ne, ono si tam víc lidí stěžuje na foru že to tam mají nějaké zastaralé... jinak do int sloupců dávám string protože nevím co jiného, chci vyplnovací formulář, ale zapisovat jen čísla.. to not null je pravda, klidně to povolí zapsat prázdný formulář, jak toto ošetřit?pomocí if (empty($_POST)) ?
|
||
Tori Profil |
#5 · Zasláno: 1. 11. 2013, 07:31:11
Vyberte si podle toho, co potřebujete. Jestli chcete umožnit zadávat čísla včetně nuly, tak bych
empty nepoužívala.
if (!empty($_POST['neco'])) - neprojde prázdný řetězec a nula, mezeru pustí dál
if ($_POST['neco'] !== '') - neprojde prázdný řetězec, nulu a mezeru pustí dál
if ($_POST['neco'] !== '' && !preg_match('~^\s+$~', $_POST['neco'])) - neprojde prázdný řetězec ani libovolný počet mezer, nulu pustí dál
|
||
fandax17 Profil |
hm>mm když na to koukám, doufal jsem, že to už vlastně ošetřené mám, akorát to nefunguje jak bych si představoval...
viz 8 řádek v mém prvním postu { if (empty($_POST)) {echo "Žádná data nebyla odeslaná, nyní se zobrazí formulář"; } else { echo "Uživatel už formulář odeslal, nyní proběhne odeslání formuláře"; mysql_connect.......... mysql_query ("insert into p_s values ('$_POST[id1]','$_POST[id2]')") or die('AJ! CHYBA - špatný dotaz!').mysql_error(); }} if (empty($_POST))
|
||
Tori Profil |
fandax17:
$_POST je pole, empty ověří, že pole obsahuje nějaké prvky. Ale už nezjistí, jestli něco obsahují i ty prvky pole. To musíte ověřovat u jednotlivých prvků zvlášť.
|
||
fandax17 Profil |
#8 · Zasláno: 1. 11. 2013, 23:52:05
tak jsem to změnil na
if (empty($_POST[id])) a funguje to, prázdný formulář se neodešle.
moc děkuju za pomoc! |
||
Časová prodleva: 10 let
|
0