Dobrý den, založij jsem si databázu v phpMyadmin a chtěl bych do ní přidávat záznamy přes webové rozhraní do tabulky Seznam přihlášených závodníků.
Problém je, že s jazykem PHP a SQL jsem se setkal poprvé a nemůžu vše nějak vyladit, aby to fungovalo.
Založil jsem následující stránky - na kterých je formulář - uložené do 15-02php3:
<head>
<title> Novoměstský pětiboj 2011 - on-line přihláška</title>
</head>
<body bgcolor="#ffebcd">
<H1>Přihlášení nového závodníka</H1>
<STRONG>Zadejte údaje o novém závodníku:</STRONG>
<FORM ACTION=15-03.php3 METHOT=GET>
<table font class=text>
<tr><td>Jméno : <td><input TYPE=TEXT NAME=jmeno SIZE=20>
<tr><td>Příjmení : <td><input TYPE=TEXT NAME=prijmeni SIZE=20>
<tr><td>Reg. číslo : <td><input TYPE=TEXT NAME=RC SIZE=7>
<tr><td>Č. čipu :<td><input TYPE=INT NAME=SI SIZE=3>
<tr><td>E-mail : <td><input TYPE="text" NAME=Email SIZE=30
<br>
<tr><td>Kategorie:<td><select name="kategorie" >
<option selected value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
<br>
<br>
<TR><TH COLSPAN=1><INPUT TYPE=Submit VALUE="Odeslat">
</table>
</FORM>
</body>
a zde jsou stránky k obsluze formuláře - uložené do 15-03.php3:
<head>
<title> Novoměstský pětiboj 2011 - on-line přihláška</title>
</head>
<body>
<?
mysql_Connect("mysql.webzdarma.cz");
@$spojeni = ODBC_Connect("np", "np", "*");
if (!$spojeni):
echo "<H1>Nepodařilo se připojit
k databázi!</H1>";
else:
@$vysledek = ODBC_Exec($spojeni,
"INSERT INTO Seznam přihlášených závodníku VALUES(
$jmeno, '$prijmeni', '$RC',
'$SI', $Email)");
if (!$vysledek):
echo "<H1>Nový záznam se
nepodařilo přidat!</H1>";
else: ?>
<H1>Nový záznam byl úspěšně přidán</H1>
<FORM ACTION=np_prihlasky.html METHOD=GET>
<INPUT TYPE=Submit
VALUE="Prohlížení seznamu přihlášených závodníků">
</FORM>
<FORM ACTION=np_online_prihlaska.html METHOD=GET>
<INPUT TYPE=Submit
VALUE="Přidání nového závodníka">
</FORM>
<FORM ACTION=index.html METHOD=GET>
<INPUT TYPE=Submit
VALUE="Zpět na úvodní stranu">
</FORM>
<?
endif;
ODBC_Close($spojeni);
endif;
?>
</body>
Zda by si někdo s tímhle věděl rady, tak prosím odepište. Mockrát děkuji za odpoveď Martin Křivda
P.S.: stránky ještě nejsou zveřejněny!
Haleluja, toto je nádherný příklad toho, jak by to ve finále opravdu nemělo vypadat ;)
Začnu funkční podstatou:
1) Je zbytečné používat odbc_ funkce, pro práci s mysql ti bohatě postačí běžné mysql_ funkce (mysql_connect, mysql_query).
2) Prováděný SQL dotaz je špatně, doporučím nastudovat manuál (http://www.junext.net/mysql/). tvoje tabulka se určitě nejmenuje "Seznam přihlášených závodníku", a i kdyby se náhodou takto jmenovala, musel by být její název (protože obsahuje mezery) uzavřen ve zpětných apostrofech (`).
3) Proměnným $jmeno,$prijmeni,$RC ve svém skriptu nikde nedáváš hodnotu. Informace z formuláře máš v proměnných $_GET a $_POST (obě jsou asociativní pole). Tvůj zápis je pozůstatkem kdysi používaného (a pitomci používamého dodnes) tzv. register_globals, které veškerý obsah zmiňovaných $_GET a $_POST proměnných mapovaly na běžné $proměnné.
4) Tvé soubory mají příponu .php3, proč? Používáš snad .php verzi 3? Používej normální příponu .php.
5) Ujasni si rozdíl mezi formulářem posílaným metodu get (kdy je veškerý zadaný obsah vidět v url dalšího souboru -- to má mimochodem několilk nevýhod) a metodou post (data pak nejsou vidět v url). Všeobecně lze říct, že ve většině případů je post ten správný ;)
6) Nepoužívej potlačování chyb přes @, zejména ve chvíli, kdy se snažíš chyby odhalit. Chybové hlášky php jsou (ač se to nezdá) docela schopné a výstižné.
7) Většina textových editorů neumí zvýrazňovat syntaxi u podmínek, když jsou zapisované jako if(): else: endif;. Používej proto spíš if(){ }else{ }, poděkuje ti minimálně ten, kdo po tobě bude výsledný kód někdy číst.
8) Nezapomíněj na kontrolu dat, které ti uživatel do formuláře nastrká! Kdybych do některého z tvých polí napsal jako '); DROP.. --, mohl by ses divit, kde máš databázi.
9) Html tagy by se měly psát malými písmeny (minimálně podle doporučení w3c), hodnota atributů by měla být uzavřena v uvozovkách (a to vždy: action="zpracovani.php"). Mimochodem ti ve formuláři chybí uzavření tagu u "NAME=Email SIZE=30 <br>".
Jo, je toho hodně a možná to zabere nějaký čas. Rozhodně to ale není snůška mých výmyslu (a to doufám někdo potvrdí :).
Mimochodem, body 7 a 4 jsou jenom takové "drobnosti", na funkčnost skriptu nemají vliv.