PHP egyszerű kereső

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>

6 HOZZÁSZÓLÁS

  1. Egy kis kiegészítés a kódhoz, hogy minimális védelem is legyen benne:

    $query = mysqli_query($dbh,"SELECT * FROM `users` WHERE `username` LIKE '%".mysqli_real_escape_string($dbh, $keres)."%' ");

    A kis kiegészítésem lényege az alábbi függvény:

    mysqli_real_escape_string();

    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).

  2. 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)

  3. é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.

  4. Szia,

    A mysqli_connectnek így kell kinéznie: mysqli_connect(“host”,”felhasznalo”,”jelszo”,”adatbazis”)

  5. Í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

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét