Ez a tutorial a PHP Tutorial videó sorozatnál feltett kérésre készül. A posztban bemutatott kereső felhasználók között keres, természetesen a logika alapján MYSQL-ben tárolt oldalakban, vagy tartalmakban is kereshet. A kereső tesztelése miatt hozzunk létre egy adatbázis, illetve táblát a következő struktúrával:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`user` varchar(30) NOT NULL,
`password` varchar(42) NOT NULL,
PRIMARY KEY (`id`),
KEY `user` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Készítsünk egy kereso.html fájlt a keresőnek (az űrlapot meglévő oldalba is lehet illeszteni):
<html>
<head></head>
<body>
<form action="search.php" method="GET">
<input type="text" name="keres" />
<input type="submit" />
</form>
</body>
</html>
Hozzuk létre a search.php fájlt ami végzi a keresést:
<html>
<head>
</head>
<body>
<?php
#mysqli kapcsolódás
$dbh = mysqli_connect();
if(isset($_GET['keres'])){
# az isset függvény segítségével megvizsgáljuk,hogy létezik-e a GET tömbben lévő 'keres' kulcs
$keres = $_GET['keres'];
if(!empty($keres)){
# ellenőrizzük nem-e üres a kapott változó
$keres = trim($keres); # eltávolítjuk a szóközt az elejéről és végéről
$query = mysqli_query($dbh,"SELECT * FROM `users` WHERE `username` LIKE '%$keres%' ");
if(mysqli_affected_rows($dbh) > 0){
#amennyiben van találat kiírjuk
echo 'Találatok:';
while($sor = mysqli_fetch_assoc($query)){
echo $sor['username'];
echo '<br/>';
}
}else{
echo 'Nincs találat';
}
}else{
echo 'Üres keresőmező';
# esetleg visszairányítás:
//header('Location: kereso.html');
}
}else{
echo 'Közvetlen meghívás nem engedélyezett!';
}
?>
</body>
</html>
Egy kis kiegészítés a kódhoz, hogy minimális védelem is legyen benne:
A kis kiegészítésem lényege az alábbi függvény:
Ez gyakorlatilag 7 speciális karaktert semlegesít a felhasználóktól beolvasott szövegben (így kisebb valószínűséggel tudnak nem kívánt sql utasításokat lefuttatni az adatbázisunkon). Ezek rendre a NUL (ASCII 0), \n (soremelés), \r (kocsi vissza), \ (backslash, vagyis karakter feloldó), ‘ (aposztróf), ” (idézőjel), and Control-Z (vagyis visszavonás (SUB, ASCII 26) karakter).
A < /pre> véletlenül rossz helyre került az előző kommentemben :D Harder, légyszíves ha tudod, akkor javítsd :) (Ezt a hozzászólást pedig törölheted)
én nem tettem volna bele ennyi elágazást.
Rögtön az első változó vizsgálatnál nem isset, hanem if ($keres != ”) { …
És nem iratnék ki üzenetet arra, hogy közvetlen hívás. Hiszen ha üres a $keres értéke, illetve nincs is, úgy is a másik ág fut le. És célszerű egy iframe keretet beilleszteni a form alá és oda meghívni a php-t. Nem navigálja el a user böngészőjét, nem kell újra rajzolnia az oldalt.
Üdv! a : $dbh = mysqli_connect(); véletlen nincs el írva?
csak mert nem működik..
Szia,
A mysqli_connectnek így kell kinéznie: mysqli_connect(„host”,”felhasznalo”,”jelszo”,”adatbazis”)
Így van! Az utolsó kommentelőnek Gábor van igaza, ha már egyszer Szerveroldali dinamikus webalkalmazást készítünk PHP nyelven, akkor legalább a szintaxis, amivel dolgozunk legyen helyes!
Üdv: :)
Egy matematikus