go
komunikace  internet  prog.  web-prog.  hardware  software  bezpečnost  magazín  disk.fórum
   

Hledání v PHP a MySQL (2.)

počet názorů: 1   poslední: 4.2.2003 0:11:58   číst názory   přidat názor   vytisknout

Před nedávnem jsem napsal článek Hledání v PHP a MySQL. Dnes doplním skripty pro administraci a další maličkosti.


Nejprve si přidáme do obou tabulek jeden sloupec, kterým je id_slova.Umožní to lepší orientaci v administraci. Upravíme tedy soubor tabulky.php:

<?
require "opendb.php";

$tabulka1 = "IF EXISTS DROB TABLE Slova
CREATE TABLE Slova(
id_slova int NOT NULL AUTO_INCREMENT,
slovo varchar(50) NOT NULL,
url varchar(100) NOT NULL,
nazev varchar(25) NOT NULL,
popis text NOT NULL,
PRIMARY KEY (id_slova)
)";

$tabulka2 = "IF EXISTS DROB TABLE HlSlova
CREATE TABLE HlSlova(
id_slova int NOT NULL AUTO_INCREMENT,
slovo varchar(50) NOT NULL,
pocet int(11) NOT NULL,
PRIMARY KEY(id_slova)
)";

$vytvor1 = mysql_query("$tabulka1");
$vytvor2 = mysql_query("$tabulka2");

if($vytvor1 && $vytvor2):
echo "Tabulky se udělaly.";
echo "<a href=index.php>Na hlavní stránku</a>";
else:
echo "Tabulky se neudělaly.";
echo "<a href=index.php>Na hlavní stránku</a>";
endif;
?>

No a teď již samotná administrace – admin.php:

<?
require "opendb.php";
?>
<html>
<head>
<title>Administrace slov</title>
</head>
<body>
<center>
<h2>Administrace slov</h2><br>
[<A href="pridej.php">Přidat slovo</a>]<br><br>
<form>
<select name="tabulka">
<option value="0">---Vyberte tabulku---</option>
<option value="1">Slova</option>
<option value="2">HlSlova</option>
</select>
<input type="submit" value="Otevři tabulku">
</form>
<?
if($tabulka=="1"):
$dotaz = Mysql_query("SELECT * FROM Slova");
echo "<a href="admin.php?action=deleteall&tabulka=Slova">Smazat vše v této tabulce</a>";
echo "<table border=1>";
echo "<tr><td>n";
echo "Slovon</td><td>n";
echo "Urln</td><td>n";
echo "Popisn</td><td>n";
echo "Volbyn</td></tr>n";
while($zaznam = Mysql_fetch_array($dotaz)):
echo "<tr><td>n";
echo $zaznam["slovo"]."n</td><td>n";
echo $zaznam["url"]."n</td><td>n";
echo $zaznam["popis"]."n</td><td>n";
echo "[<a href="admin.php?action=check&id=".$zaznam["id_slova"]."&tabulka=Slova">Upravit</a> | <a href="admin.php?action=delete&id=".$zaznam["id_slova"]."&tabulka=Slova">Smazat</a>]n</td></tr>n";
endwhile;
echo "</table>";
elseif($tabulka=="2"):
$dotaz = Mysql_query("SELECT * FROM HlSlova");
echo "<a href="admin.php?action=deleteall&tabulka=HlSlova">Smazat vše v této tabulce</a>";
echo "<table border=1>";
echo "<tr><td>n";
echo "Slovon</td><td>n";
echo "Hledánon</td><td>n";
echo "Volbyn</td></tr>n";
while($zaznam = Mysql_fetch_array($dotaz)):
echo "<tr><td>n";
echo $zaznam["slovo"]."n</td><td>n";
echo $zaznam["pocet"]."xn</td><td>n";
echo "[<a href="admin.php?action=check&id=".$zaznam["id_slova"]."&tabulka=HlSlova">Upravit</a> | <a href="admin.php?action=delete&id=".$zaznam["id_slova"]."&tabulka=HlSlova">Smazat</a>]n</td></tr>n";
endwhile;
echo "</table>";
endif;
//akce,které skoro nic nedělají - pouze se ptají
if($action=="delete"):
echo "<b>Opravdu chtete vymazat z tabulky $tabulka slovo č. $id???</b><br><br>";
?>
<form method="post">
<input type="hidden" name="action" value="smaz">
<input type="hidden" name="id" value="<?echo $id?>">
<input type="hidden" name="tabulka" value="<?echo $tabulka?>">
<input type="radio" name="volba" value="ano">Ano<br>
<input type="radio" name="volba" value="ne">Ne<br>
<input type="submit" value=" OK ">
</form>
<?
endif;
if($action=="deleteall"):
echo "<b>Opravdu chcete smazat celý obsah tabulky $tabulka???</b>";
?>
<form method="post">
<input type="hidden" name="action" value="smazvse">
<input type="hidden" name="tabulka" value="<?echo $tabulka?>">
<input type="radio" name="volba" value="ano">Ano<br>
<input type="radio" name="volba" value="ne">Ne<br>
<input type="submit" value=" OK ">
</form>
<?
endif;
if($action=="check"):
$dotaz = Mysql_query("SELECT * FROM $tabulka");
$zaznam = Mysql_fetch_array($dotaz);
if($tabulka=="Slova"):
?>
<form method="post">
<input type="hidden" name="action" value="uprav">
<input type="hidden" name="tabulka" value="Slova">
<input type="hidden" name="id" value="<?echo $id?>">
Jméno : &nbsp;<input type="text" name="jmeno" value="<?echo $zaznam["slovo"]?>"><br>
Url : &nbsp;<input type="text" name="url" value="<?echo $zaznam["url"]?>"><br>
Popis : &nbsp;<input type="text" name="popis" value="<?echo $zaznam["popis"]?>"><br>
<input type="submit" value=" OK "><br>
</form>
<?
else:
?>
<form method="post">
<input type="hidden" name="action" value="uprav">
<input type="hidden" name="tabulka" value="HlSlova">
<input type="hidden" name="id" value="<?echo $id?>">
Slovo : &nbsp;<input type="text" name="slovo" value="<?echo $zaznam["slovo"]?>"><br>
Kolikrát : &nbsp;<input type="text" name="pocet" value="<?echo $zaznam["pocet"]?>"><br>
<input type="submit" value=" OK "><br>
</form>
<?
endif;
endif;
//chvíle napětí :o) akce které již něco dělají
if($action=="smaz"):
if($volba!="ne"):
$delete = Mysql_query("DELETE FROM $tabulka WHERE id = $id");
echo "Záznam z čílsem $id byl z tabulky $tabulka smazán...";
endif;
endif;
if($action=="smazvse"):
if($volba!="ne"):
$delete = Mysql_query("DELETE FROM $tabulka");
echo "Tabulka $tabulka je vyprázdněna...";
endif;
endif;
if($action=="uprav"):
if($tabulka=="Slova"):
mysql_query("UPDATE Slova SET slovo = '$jmeno', url = '$url', nazev = '$jmeno', popis = '$popis' WHERE id_slova = '$id'");
echo "Záznam č.$id v tabulce Slova byl změněn:<br>n";
echo "Název,Slovo: $jmeno<br>n";
echo "Url: $url<br>n";
echo "Popis: $popis<br>n";
else:
mysql_query("UPDATE HlSlova SET slovo = '$slovo', pocet = '$pocet' WHERE id_slova = '$id'");
echo "Záznam č.$id v tabulce HlSlova byl změněn:<br>n";
echo "Slovo: $slovo<br>n";
echo "Hledáno: $pocet x<br>n";
endif;
endif;
?>
</center>
</body>
</html>

Ne že by to bylo něco extra, ale když něco pokazíte a potřebujete to opravit nebo potřebujete něco smazat, tak se to hodí.

Také jsem dostal takový dotaz – jak si ve vyhledávání poradit s diakritikou

Do formuláře na začátku přidáme kousek kódu:

<input type="checkbox" name="diakritika" value="true"> Ignorovat diakritiku <BR>

A za “ if($akce==”najit”) ” přidáme toto:

if($diakritika):
$slovo = strtr($slovo,"ěščřžýáíéüöäóňĚŠČŘŽÝÁÍÉÓŇÜÓŇ","escrzyaieuoaonESCRZYAIEUOAON");
endif;

Celý soubor index.php bude tedy vypadat takto:

<?
require "opendb.php";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Hledání</title>
</head>

<body>
<h2>Hledání</h2>
<form action="index.php?akce=najit" name="najdi"method="post">
<b>Zadej hledané slovo: </b> <input type="text" name="slovo"><br>
<input type="checkbox" name="diakritika" value="true"> Ignorovat diakritiku <BR>
<input type="submit" value="Najdi to!">
</form>
<hr>
<?
if($akce=="najit"):
//prohledej databazi jestli v ní je slovo $slovo
$prikaz = mysql_query("SELECT * FROM Slova WHERE slovo LIKE '$slovo%'");

if($diakritika):
$slovo = strtr($slovo,"ěščřžýáíéüöäóňĚŠČŘŽÝÁÍÉÓŇÜÓŇ","escrzyaieuoaonESCRZYAIEUOAON");
endif;

//pokud jsi v databázi našel výskyt slova $slovo tak vypiš všechno co obsahuje $slovo
$num = mysql_num_rows($prikaz);
if($num > 0):
echo "<h2>Výsledky hledání</h2>";
while($zaznam = mysql_fetch_array($prikaz)):
$url = $zaznam['url'];
$nazev = $zaznam['nazev'];
$popis = $zaznam['popis'];
echo "<a href="$url">$nazev</a> - $popis<br>n";
endwhile;
//jinak vypiš že neni možné najít slovo $slovo
else:
echo "Není možné najít slovo $slovo !!<br>n";
endif;
endif;
//prohledej tabulku HlSlova a pokud tam již takovéto slovo je,
//tak k počtu přičti 1 a pokud není tak ho vlož s počtem 1
$dotaz = mysql_query("SELECT * FROM HlSlova WHERE slovo = '$slovo'");
$pocet = Mysql_num_rows($dotaz);

if($pocet!=0) mysql_query("UPDATE HlSlova SET pocet = pocet + 1 WHERE slovo = '$slovo'");
else mysql_query("INSERT INTO HlSlova VALUES ('','$slovo', 1)");


?>

</body>
</html>

Download skriptů




Autor: David Máka, informace o autorovi
Rubrika: Programování - PHP
Čtenářů: 302     Zobrazení: 370

Související články:
Vyhledávání v databázi podle určitých kritérií
Fulltextové vyhledávání v MySQL
Hledání v PHP a MySQL

Jak hodnotíte tento článek?

lepší <-->horší
Názory: počet: 1   poslední: 4.2.2003 0:11:58   číst názory   přidat názor   vytisknout

Hodí se Vám ignorace diakritiky?
1. Ano 40%
2. Trochu 13%
3. Nemuselo být 13%
4. Ne,ale využiji to 13%
5. Vůbec ne 20%

Nadpis Autor Datum
Diakritika Jiri 04.02.2003 00:11:58
Nový příspěvek
Věc:
Jméno:
E-mail:

- nepoužívejte HTML k formátování textu příspěvku
- nepoužívejte A HREF= pro odkazy, aktivní budou automaticky
- odřádkování provádějte klávesou ENTER, nikoliv tagem <br>
zasílat odpovědi na můj e-mail








Registrace domén
Anketa
Jakou značku CD-R médií používáte?

1. Verbatim
15%

2. Multidisk
14%

3. Ritec
14%

4. Imation
14%

5. TDK
14%

6. BASF
14%

7. jinou
14%

Novinky e-mailem
Zasílání denního nebo týdenního přehledu nových článků
Novinky
27.1.2003
Opraven problém s kódováním a s obrázky v e-mailové zprávě s přehledem článků

26.1.2003
Vyskytl se problém s padáním MSIE 6.0 při načítání stránek PC Světa. Problém by již měl být odstraněn. Jedná se o chybu v MSIE, který nekorektně zpracovával hlavičku XHTML. U MSIE s posledními záplatami problém nebyl.

26.1.2003
Zbrusu nová verze redakčního systému, nová grafika, překopané rubriky, mnoho nových věcí...

5.11.2001
PC Svět obdržel registraci v mezinárodním registru publikací ISSN. Naše číslo je 1213-6042. Více o ISSN na ISSN

Nový redaktor
Chcete se stát přispivatelem pro PC Svět? info a registrace zde




ATLAS.CZ
powered by PES RedSys 3.0
© 2003 pcsvět.cz / pcsvet@pcsvet.cz