Slettet bruger
22. januar 2007 - 21:03
Der er
12 kommentarer og 1 løsning
Søgefunktion med flere rækker
Hvordan laver jeg et script hvori jeg kan vælge, at søge blandt ALLE tilgængelige rækker, men også blot nogle af dem? Jeg vil have de mulige kategorier i et array. $possibleRows = array( "film", "billeder", "spil", "brugere" );
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
22. januar 2007 - 21:35
#1
Hvad vil du søge igennem og efter hvad?
22. januar 2007 - 21:45
#2
Noget i stil med: <?php $possibleRows = array( "film", "billeder", "spil", "brugere" ); if ( !empty( $_GET['doit'] ) ) { $srch = array(); if ( !empty( $_GET['srch'] ) && is_array( $_GET['srch'] ) && count( $_GET['srch'] ) > 0 ) { $searchFor = mysql_escape_string( $_GET['q'] ); foreach ( $possibleRows as $row ) { if ( in_array( $row, $_GET['srch'] ) ) { $srch[] = "$row LIKE '%$searchFor%'"; } } $srch = implode( " OR ", $srch ); echo $sql = "SELECT * FROM tabel WHERE $srch"; $qh = mysql_query( $sql ) or die( mysql_error() ); while ( $row = mysql_fetch_assoc( $qh ) ) { var_dump( $row ); } } } echo '<form method="get"> Search for: <input type="text" name="q"><br> Search in categories:<br> '; foreach ( $possibleRows as $row ) { echo "<input type=\"checkbox\" name=\"srch[]\" value=\"$row\"> $row<br>"; } echo '<input type="hidden" name="doit" value="1"><input type="submit" name="sbmit" value="Search"></form>'; ?> ?
Slettet bruger
23. januar 2007 - 12:40
#3
Undskyld min ukorrekthed. Den skal søge over flere tabeller. Men ellers ser det rigtigt nok ud, coderdk! Men hvis der ikke er valgt en tabel, så skal den søge i allesammen! - og under resultaterne skal den jo så fortælle hvilken tabel det pågældende resultat kommer fra.
Slettet bruger
23. januar 2007 - 12:48
#4
Og hvordan kan jeg fikse så jeg kan fortælle hvilke felter den må søge i, og så den ikke melder fejl hvis et felt ikke eksisterer i en tabel?
23. januar 2007 - 13:08
#5
<?php $possibleRows = array( "film" => array( "felt1", "felt2" ) ,"billeder" => array( "felt3", "felt4" ) ,"spil" => array( "felt5", "felt6" ) ,"brugere" => array( "felt7", "felt8" ) ); if ( !empty( $_GET['doit'] ) ) { $srch = array(); $targ = ( empty( $_GET['srch'] ) || !is_array( $_GET['srch'] ) || count( $_GET['srch'] ) == 0 ? $_GET['srch'] : array_keys( $possibleRows ) ); $searchFor = mysql_escape_string( $_GET['q'] ); foreach ( $possibleRows as $table => $fields ) { if ( in_array( $table, $targ ) ) { foreach ( $fields as $field ) { $srch[] = "$table.$field LIKE '%$searchFor%'"; } } } $srch = implode( " OR ", $srch ); $sql = "SELECT * FROM tabel WHERE $srch"; $qh = mysql_query( $sql ) or die( mysql_error() ); while ( $row = mysql_fetch_assoc( $qh ) ) { var_dump( $row ); } } echo '<form method="get"> Search for: <input type="text" name="q"><br> Search in categories:<br> '; foreach ( $possibleRows as $row => $dummy ) { echo "<input type=\"checkbox\" name=\"srch[]\" value=\"$row\"> $row<br>"; } echo '<input type="hidden" name="doit" value="1"><input type="submit" name="sbmit" value="Search"></form>'; ?>
Slettet bruger
23. januar 2007 - 13:19
#6
Det ser godt ud, men hvad skal 'tabel' byttes ud med? $sql = "SELECT * FROM tabel WHERE $srch";
23. januar 2007 - 13:19
#7
En af de andre tabeller burde gøre det...
Slettet bruger
23. januar 2007 - 13:27
#8
Kan man gøre så et af angivne felter bliver DÈT felt som der udskrives med? Det er fordi jeg skal bruge det til både at søge blandt brugere og nyheder. Så hvis nu det er et resultat fra brugerne skal det være 'brugernavn' og hvis det er fra nyhederne skal det være 'titel'.
23. januar 2007 - 13:28
#9
Du kan vel bare undersøge hvad der er i den række der bliver hentet ud - Evt. behandle hver tabel forskelligt.
Slettet bruger
23. januar 2007 - 13:29
#10
Hvordan? Og hvordan får jeg udskrevet hvilken tabel mit resultat kom fra?
23. januar 2007 - 14:05
#11
Hvis brugertabellen har feltet brugerid så er det vel ikke null hvis det er et resultat fra den ;)
Slettet bruger
28. januar 2007 - 23:38
#12
Hvordan sørger jeg for at den søger i alle de mulige tabeller hvis ingen specielle er krydset af?
28. januar 2007 - 23:46
#13
Det troede jeg min sidste kode gjorde, men ret: $targ = ( empty( $_GET['srch'] ) || !is_array( $_GET['srch'] ) || count( $_GET['srch'] ) == 0 ? $_GET['srch'] : array_keys( $possibleRows ) ); til: $targ = ( empty( $_GET['srch'] ) || !is_array( $_GET['srch'] ) || count( $_GET['srch'] ) == 0 ? array_keys( $possibleRows ) : $_GET['srch'] ); Så burde det virke
Vi tilbyder markedets bedste kurser inden for webudvikling