18. října 2001, 00.00 | Dnes uděláme z jednoduchého skriptu propracovaný systém. Vylepšíme index, budeme mazat z DB a opravovat již vytvořené skripty.
Protože byly ohlasy na první díl, rozhodl jsem se napsat ještě jeden, kde
vysvětlím další věci, které vysvětlené pro začátečníka možná na Internetu
ani nenaleznete.
Vylepšíme si výpis
V našem prvním skriptu byl jednoduchý textový výpis, nijak zvlášť upravený. To
je možná škoda a tak upravíme výpis do nějaké hezké tabulky, kterou ještě
"orámujeme" jinou tabulkou.
<table cellSpacing=0 width=400 align=center bgColor=#000000>
<tr>
<td><table cellSpacing=0 width=100%>
<tr>
<td align=middle bgColor=#ffffe0>Písmena nemohou za to, co znamenají
slova z nich složená, ani za umýsly toho kdo je použil.</td>
</tr>
<tr>
<td align=right bgcolor=#e7e7d6>Jan Sova</td>
</tr>
</table>
</td>
</tr>
</table>
|
|
Jak taková tabulka vypadá si můžete prohlédnout:
Písmena nemohou za to, co znamenají slova z nich
složená, ani za úmysl toho, kdo je použil. |
Jan Sova |
|
Meze úpravám se nekladou, a tuto kapitolu jsem zařadil, protože se mě lidé často
ptají, jak orámovat tabulku, proto jsem snad zabil dvě mouchy jednou ranou :-).
Uznávám, že tato tabulka není příliš pěkná, ale vytvořit podobnou dovede podle
popsaného návodu snad každý.
Takže podle toho také upravíme index.php:
<HTML>
<HEAD>
<TITLE>Stranka s citaty</TITLE>
</HEAD>
<BODY>
<H1 align=center>Výpis citátů.</H1>
<?
do {
@$spojeni = MySQL_Connect("localhost"); //pokus o spojení
if (!$spojeni): //kontrola
echo "Nepodařilo se připojit k MySQL.<BR>\n";
break;
endif;
MySQL_Select_DB("datacitaty"); //výběr databaze
@$vysledek = MySQL_Query("SELECT * FROM citaty ORDER BY poradi DESC");
//SQL příkaz
if (!$vysledek):
echo "Došlo k chybě při zpracování dotazu v databázi.<BR>\n";
break;
endif;
while ($zaznam = MySQL_Fetch_Array($vysledek)){
echo "<table cellSpacing=0 width=400 align=center bgColor=#000000>
<tr>
<td>
<table cellSpacing=0 width=400>
<tr>\n<td align=middle bgColor=#ffffe0>\n";
echo $zaznam["citat"];
echo " </tr>
<tr>
<td align=right bgcolor=#e7e7d6>";
echo $zaznam["autor"];
echo "</tr>
</table>
</td>
</tr>
</table>
<p></p>\n";
}
} while (false);
?>
</BODY>
</HTML>
|
|
Upravujeme záznam v databázi
Ne každý má "přímý" přístup k databázi, aby mohl upravovat své data
pomocí SQL příkazů. Mnohem pohodlnější je vytvoření další části administrace,
kde budeme upravovat již vytvořené citáty. K tomu tady byl již dotaz a pravdou je,
že se nám může povést do databáze vložit špatná data (překlep, pravopisná
chybička, ...).
<HTML>
<HEAD>
<TITLE>Úprava citátu</TITLE>
</HEAD>
<BODY>
<FORM ACTION=uprav.php METHOD=post>
<INPUT NAME=poradi SIZE=20>
<INPUT TYPE=SUBMIT VALUE=" OK ">
</FORM>
</BODY>
</HTML>
|
|
První uvedenou stránku si uložíme jako třeba prvni.php. Tato stránka nám
bude sloužit pouze k tomu, abychom nějak dostali pořadové číslo citátu, které
chceme upravit, do proměnné.
Pozn: stejného efektu docílíte, pokud budete stránku uprav.php volat uprav.php?poradi=$poradi (misto $poradi musíte ale již zadat
rovnou cislo, treba uprav.php?poradi=1).
<HTML>
<HEAD>
<TITLE>Úprava citátu</TITLE>
</HEAD>
<BODY>
<?
do{
if (!IsSet($poradi)):
echo "Nezadal jste cislo citatu !";
break;
endif;
@$spojeni = Mysql_connect(localhost); //pokus o spojení
if (!$spojeni):
echo "Nepodařilo se připojit k MySQL.<BR>\n";
break;
endif;
MySQL_Select_DB("datacitaty"); //výběr databáze
@$vysledek=MySQL_Query("SELECT * FROM citaty
WHERE poradi=$poradi");
if (!$vysledek):
echo "Cbyba při dotazu v databázi";
break;
endif;
@$zaznam=MySQL_Fetch_Array($vysledek);
if($pole):
$autor=$zaznam["autor"];
$citat=$zaznam["citat"];
else:
echo "Chyba při prohledávání seznamu\n";
break;
endif;
?>
<H1>Úprava záznamů v databázi</H1>
<FORM ACTION=update.php METHOD=POST>
<TABLE>
<TR>
<TD>Pořadí:</TD>
<TD><INPUT NAME=poradi SIZE=4 VALUE="<?echo $poradi?>">
</TR>
<TR>
<TD>Autor:</TD>
<TD><INPUT NAME=autor SIZE=50 VALUE="<?echo $autor?>"></TD>
</TR>
</TABLE>
<TEXTAREA NAME=citat ROWS=8 COLS=80><?echo $citat?></TEXTAREA>
<P><INPUT TYPE=SUBMIT VALUE="Zapiš změny">
</FROM>
<?
} while(false)
?>
</BODY>
</HTML>
|
|
No, tak teď jsme vytvořili pěkný formulář, kam se nám vypíše obsah databáze
do jednotlivých částí formuláře a mi tak záznam můžeme snadno upravit. Ještě
však musíme vytvořit skript update.php, který změny zapíše do DB.
<HTML>
<HEAD>
<TITLE>Smazání citátu</TITLE>
</HEAD>
<?
do {
if (!IsSet($poradi)):
echo "Nezadal jste cislo citatu !";
break;
endif;
@$spojeni = mysql_connect(localhost); //pokus o spojení
if (!$spojeni):
echo "Nepodařilo se připojit k MySQL.<BR>\n";
break;
endif;
MySQL_Select_DB("datacitaty"); //výběr databáze
@$uprava=MySQL_Query("UPDATE citaty SET autor = '$autor',
citat = '$citat' WHERE
poradi = $poradi");
if (!$uprava):
echo "Cbyba při dotazu v databázi";
break;
endif;
} while(false);
?>
</BODY>
</HTML>
|
|
Mažeme citáty z databáze
Pokud vložíte špatný citát, prostě jej upravíte. Pravdou však je, že musíte
vložit jiný citát (pokud jste vložili nějaký nevhodný) a ten nový citát nebude na
prvním místě (musíte si uvědomit, že při každém zápisu stoupá poradi (viz. DB)
o jednu. V neposlední řadě tento skript popisuji hlavně proto, abych ukázal jak lze
také pracovat s databází.
Ve skriptu je vyřešen problém, kdy pokud vymažu jeden záznam, nezmění se poradi
všech ostatních, proto musíme pořadí těch, které měly poradi vyšší snížit o
jedničku.
Nejdříve jsem ještě vytvořil skript druhy.php, kterým dostanete na
stránku umaz.php potřebnou proměnou (úprava viz. prvni.php).
<HTML>
<HEAD>
<TITLE>Smazání citátu</TITLE>
</HEAD>
<BODY>
<FORM ACTION=vymaz.php METHOD=post>
<INPUT NAME=poradi SIZE=20>
<INPUT TYPE=SUBMIT VALUE=" OK ">
</FORM>
</BODY>
</HTML>
|
|
No a nyní pouze vytvoříme stránku umaz.php a vše jest hotovo:
<HTML>
<HEAD>
<TITLE>Smazání citátu</TITLE>
</HEAD>
<?
do {
if (!IsSet($poradi)):
echo "Nezadal jste cislo citatu !";
break;
endif;
@$spojeni = mysql_connect(localhost); //pokus o spojení
if (!$spojeni):
echo "Nepodařilo se připojit k MySQL.<BR>\n";
break;
endif;
MySQL_Select_DB("datacitaty"); //výběr databáze
@$zjisteni=MySQL_Query("SELECT * FROM citaty");
@$zjisteni=MySQL_Query("SELECT * FROM citaty WHERE poradi = $poradi");
if (!$zjisteni):
echo"<br>Takový citát není.\n";
break;
endif;
@$vymaz=MySQL_Query("DELETE FROM citaty WHERE poradi=$poradi");
if (!@$vymaz){
echo "Došlo k chybě při zpracování dotazu v databázi<BR>\n";
break; }
else{
@$vysledek=MySQL_Query("UPDATE citaty SET
poradi = poradi-1 where poradi > $poradi");
echo "<br>Kód byl ubrán.\n";
}
if (!@$vysledek):
echo "Došlo k chybě při zpracování dotazu v databázi.<BR>\n";
break;
else:
echo "<br>Vymazáno $id $rubrika\n";
endif;
} while(false);
?>
</BODY>
</HTML>
|
|