Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:10 Der er 24 kommentarer og
2 løsninger

Lave SQL søgening

Hej.

Hvordan ville I lave et simpelt PHP script som søgede efter ord i angivet MySql tabel?

Har tænkt meget over det, og søgt på Google, men kan sku ingenting finde :S

Tak for hjælpen

/Bente Fiber
Avatar billede jaw Nybegynder
15. september 2005 - 21:12 #1
meget simpelt, så lav en form der hedder "search" og send den som f.eks. GET.

<?

//connect
$q = mysql_query("SELECT * FROM tabel WHERE tekst LIKE '%".$_GET['search']."' ORDER BY id DESC") or die(mysql_error());

while($row = mysql_fetch_array($q)) {
  echo $row['tekst'];
}

?>
Avatar billede horsmark Nybegynder
15. september 2005 - 21:13 #2
$sWord = "nisse";

$sql = "SELECT * FROM mit_tabel_navn WHERE mit_kollonne_navn LIKE '%".$sWord."%'";
$query = ...osv
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:15 #3
Cool... jeg siger tak mange gange... #JAW vil du ikke have nogle point??
Avatar billede jaw Nybegynder
15. september 2005 - 21:17 #4
Det vil jeg da selvfølgelig gerne :) Og jeg bliver nu ikke sur, hvis du tager lidt af det tilbage igen - 200 er meget!

Og selv mange tak...
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:20 #5
Point er ingenting for mig herinde... :)

Igen, tak :)
Avatar billede horsmark Nybegynder
15. september 2005 - 21:22 #6
thx
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:29 #7
Kan ikke helt få den til at virke,den viser bare dem jeg har i rækken.
Søgningen har slet ingen påvirkning

echo '<table align="center" width="80%" class="tabel"><form method="post" action="?do=search">
<td width="15%"><td width="100">Søgeord: </td><td width="200"><input type="text" name="search"></td><td><input type="submit" value="Søg"></td><td width="15%"></td></form></table>';

if($_GET['do'] == search) {

$hostname = "localhost";
    $user = "enetonline";
    $pass = "123456";
    $database = "bites";
    $connection = "localhost";
   
    $connection = mysql_connect($hostname, $user, $pass)
    or die(mysql_error());
    $db = mysql_select_db($database, $connection)
            or die(mysql_error());

//connect
$q = mysql_query("SELECT * FROM varer WHERE navn LIKE '%".$_GET['search']."' ORDER BY id DESC") or die(mysql_error());

while($row = mysql_fetch_array($q)) {
  echo '<table align="center" width="80%" class="tabel"><td>'.$row['navn'].'</td></table>';
}
}
Avatar billede jaw Nybegynder
15. september 2005 - 21:30 #8
Skift $_GET['search'] ud med $_POST['search']
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:31 #9
Cool.. jeg takker :)
Avatar billede jaw Nybegynder
15. september 2005 - 21:31 #10
Selv tak. Og så bør man jo ikke acceptere svaret, før man har fået hvad man vil :) Og hvis jeg virkelig skal pive lidt, så bør det også gives til den løsning der er først og meste korret, eller den du bruger...
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:36 #11
Sorry mester, er ikke så meget in- mht det med point - bruger kun forummet til at få hjælp :)

Men det skal jeg huske, og igen.. TAK! Hehe..
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:43 #12
Hvad gør man hvis den ikke skal søge på 1 tabel, men søge på ALLE tabellerne?
Avatar billede horsmark Nybegynder
15. september 2005 - 21:46 #13
vær lige opmærksom på at sqlinjection kan forekomme her eller en ondsindet bruger kan nappe følsomme oplysninger om dit miljø ved at tvinge fejl igennem.

Du bør noget ala følgende...

function _GET( $sVar ){
$returnVal = !empty($_GET[$sVar]) ? htmlspecialchars($_GET[$sVar], ENT_QUOTES) : null;
return $returnVal;
}

for at sikre at der ikke sendes farlige tegn med ned i db´en
Avatar billede horsmark Nybegynder
15. september 2005 - 21:46 #14
SELECT * FROM varer, min_kollonne2, min_kollonne3, min_kollonne4
Avatar billede horsmark Nybegynder
15. september 2005 - 21:47 #15
nårh nej se lige bort fra den sidste *sorry*
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:49 #16
#horsmark

Kan man bruge * varer, kolonne2 osv ?
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:50 #17
#hormark

Kan heller ej få din anti injection script til at virke...
Avatar billede horsmark Nybegynder
15. september 2005 - 21:56 #18
mht til anti injection script så istedet for at skrive $_GET['search'] skriver du _GET('search')
Avatar billede bente_fiber Nybegynder
15. september 2005 - 21:58 #19
Har lavet min lille egen: Men er den sikker nok?

$search = addslashes($_POST['search']);

//connect
$q = mysql_query("SELECT * FROM varer WHERE navn LIKE '%$search' ORDER BY id DESC") or die(mysql_error());
Avatar billede jaw Nybegynder
15. september 2005 - 21:59 #20
mysql_real_escape_string($_POST['search']);
Avatar billede horsmark Nybegynder
15. september 2005 - 21:59 #21
mht til søgning over flere kollonner så ja.

SELECT * FROM
tabel
WHERE
(kollonne1 LIKE '%kriterie%') OR
(kollonne2 LIKE '%kriterie%') OR
(kollonne3 LIKE '%kriterie%')
ORDER BY
min_tabels_unikke_id ASC
Avatar billede horsmark Nybegynder
15. september 2005 - 22:01 #22
jaw>> mht til post værdier så er det også relevant mange andre steder feks. iforb med form input
Avatar billede bente_fiber Nybegynder
15. september 2005 - 22:02 #23
#Jaw

Hvad er forskellen på
$search = addslashes($_POST['search']);

og

$search = mysql_real_escape_string($_POST['search']);

---
#Horsmak

Mange mange tak, jeg skylder jer virkelig en kold bajer ;)
Avatar billede jaw Nybegynder
15. september 2005 - 22:06 #24
Det forstod jeg ikke lige horsmark?!

Og bete_fiber, hvis du vil søge i flere tabeller, så kan det f.eks. være således:

SELECT tabel1.*, tabel2.*
FROM tabel1, tabel2
WHERE tabel1.tekst LIKE '%".$search."%' OR tabel2 LIKE '%".$search."%'
ORDER BY id DESC

Måske fucker det, er rimelig træt :)
Avatar billede jaw Nybegynder
15. september 2005 - 22:08 #25
Selvf.:
WHERE tabel1.tekst LIKE '%".$search."%' OR tabel2.tekst LIKE '%".$search."%'
Avatar billede bente_fiber Nybegynder
15. september 2005 - 22:08 #26
#Jaw..

Takker, har fået det til at virke :) Mange tak..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester