Avatar billede dhunters Nybegynder
16. august 2004 - 11:51 Der er 28 kommentarer og
1 løsning

Søg efter værdi i db med checkboxe

Hej alle.

Så er det nu jeg spørger om nogle kloge hoveder herinde har leget med søgning og checkboxe før? - for så kan de sikkert hjælpe nu...

Jeg har ét tekst felt i en MySQL-database. Jeg har seks checkboxe. Hvis alle checkboxe er "hakket af" og bare én af værdierne passer med teksten i MySQl-databasen, skal posten vises på søgeresultatsiden. Godt nok forklaret? ellers spørg igen!

På forhånd tak for hjælpen,
/dhunters
Avatar billede fennec Nybegynder
16. august 2004 - 11:55 #1
det lyder som noget like....

"select * from DinTabel where (DitFelt like '%"& Checkbox1Værdi &"%' or DitFelt like '%"& Checkbox2Værdi &"%' or...)"
Avatar billede morteeart Nybegynder
16. august 2004 - 11:55 #2
SELECT * FROM dintabel WHERE ting='$check1' OR ting='$check2' OR ting='$check3' OR ting='$check4' OR ting='$check5' OR ting='$check6'

cirka noget i den stil.
Avatar billede morteeart Nybegynder
16. august 2004 - 12:01 #3
lidt forklaring

LIKE tager en cirka-værdi.

uden like, tager den kun en værdi som er Nøjagtig magen til værdien af checkboxen.
Avatar billede dhunters Nybegynder
16. august 2004 - 12:07 #4
hum... efter din forklaring morteeart, brugte jeg dit forslag, men den viser et tomt søgeresultat... har brugt POST
Avatar billede fennec Nybegynder
16. august 2004 - 12:07 #5
Da flere af værdierne kan passe, gik jeg ud fra at feltet i databasen vil se ca sådan ud med data:

"rød,blå,grøn"
"rød,gul"
"hvid"

Dette eks. kunne f.eks passe på de farver man kan fåe en trøje i. OgSå du bliver nød til at bruge like. Det kunne være dhunters kunne forklare hvordan data ser ud i feltet????

ps. Like er ikke en ca. værdi. Det er en præcis værdi, med mulighed for wildcard uden om.
Avatar billede morteeart Nybegynder
16. august 2004 - 12:14 #6
1. Har du rettet $check1 osv. til de rigtigt værdier som du angav i <input type="checkbox" name=""> , i name="" ... ?

2. Har du husket at fetche infoen før du udskriver den ?
Avatar billede jakoba Nybegynder
16. august 2004 - 12:18 #7
$sogekriterier = array();

if ( $checkbox1_sat ) { $sogekriterier[] = "tabelfelt_navn = '$formfelt1_verdi'"; }
if ( $checkbox2_sat ) { $sogekriterier[] = "tabelfelt_navn = '$formfelt2_verdi'"; }
if ( $checkbox3_sat ) { $sogekriterier[] = "tabelfelt_navn = '$formfelt3_verdi'"; }
if ( $checkbox4_sat ) { $sogekriterier[] = "tabelfelt_navn = '$formfelt4_verdi'"; }
if ( $checkbox5_sat ) { $sogekriterier[] = "tabelfelt_navn = '$formfelt5_verdi'"; }
if ( $checkbox6_sat ) { $sogekriterier[] = "tabelfelt_navn = '$formfelt6_verdi'"; }
                          // ovenfor gætter keg på at:
                          // 1) der skal ledes efter strenge
                          // 2) det er en enkelt kolonne i din tabel der skal sammenlignes med

if ( count( $sogekriterier ) == 0 ) {

    echo "FEJL: Du skal vælge mindst een ting at søge efter.<br>";

} else {

    $where_betingelse = implode( " OR ", $sogekriterier );

    $SQL_kommando = "
        SELECT *
        FROM    dintabel
        WHERE " . $where_betingelse . "
        ORDER BY tabelfelt_navn
    ";

    $resultatset = mysql_query( $SQL_kommando )
        or die ( "Fejl i søgningen:<br>" .nltobr($SQL_kommando) .mysql_error() );

    //... og her bruger du så resultatet

}

mvh JakobA
Avatar billede dhunters Nybegynder
16. august 2004 - 12:19 #8
I tekst feltet kan der stå 6 forskellige ting f.eks.: bil, cykel, bus, tog, taxa, gåben.
Der er så en checkbox til hver, altså et til bil, et til cykel osv... Hvis man hakker bil og cykel af, og der kun findes bil i databasen, skal den bare viser alle med bil. Hvis alle felter hakkes af, skal den selvfølgelig vise alt i databasen...
Avatar billede morteeart Nybegynder
16. august 2004 - 12:21 #9
prøv at vise os din html-kode og et dump af din database
Avatar billede dhunters Nybegynder
16. august 2004 - 12:22 #10
I checkboxfelterne er value og name ens... altså ved bil hedder både value og name bil... gør det noget?
Avatar billede dhunters Nybegynder
16. august 2004 - 12:30 #11
<html>
<body>

<?php
if (isset($_POST['submit'])) {
?>
<table>
<?php
connect...
    $res = mysql_query("SELECT * FROM `transport` WHERE type='$_POST[bil]' OR type='$_POST[boligtype2]' OR type='$_POST[boligtype3]' OR type='$_POST[boligtype4]' OR type='$_POST[boligtype5]' OR type='$_POST[boligtype6]'") or die (mysql_error());
    echo "<p>Forekomst(er) fundet: " . mysql_num_rows($res);
    while ($row = mysql_fetch_assoc($res)) {

    echo "<tr>";
    echo "<td>$row[type]</td>";
    echo "</tr>";

    }
?>
</table>

<?php
} else {
?>
<form method="post" name="<?php echo $_SERVER['PHP_SELF']?>">
<table>
<tr><td colspan="3"><b>Boligtype:</b></td></tr>
<tr><td width="33%"><input type=checkbox value=Bil name=Bil checked> Bil</td><td width="33%"><input type=checkbox value=Cykel name=Cykel> Cykel</td><td width="33%"><input type=checkbox value=Bus name=Fritidhus> Bus</td></tr>
<tr><td width="33%"><input type=checkbox value=Tog name=Tog> Tog</td><td width="33%"><input type=checkbox value=Cykel name=Taxa> Taxa</td><td width="33%"><input type=checkbox value=Gåben name=Gåben> Gåben</td></tr>
<tr><td colspan="3"><input type="submit" name="submit" id="submit" value="  S&oslash;g  " /></td></tr>
</table>
</form>

<?php
}
?>

</body>
</html>
Avatar billede dhunters Nybegynder
16. august 2004 - 12:32 #12
blandede lige to sammen! ny her:
<html>
<body>

<?php
if (isset($_POST['submit'])) {
?>
<table>
<?php
connect...
    $res = mysql_query("SELECT * FROM `transport` WHERE type='$_POST[bil]' OR type='$_POST[cykel]' OR type='$_POST[bus]' OR type='$_POST[tog]' OR type='$_POST[taxa]' OR type='$_POST[gåben]'") or die (mysql_error());
    echo "<p>Forekomst(er) fundet: " . mysql_num_rows($res);
    while ($row = mysql_fetch_assoc($res)) {

    echo "<tr>";
    echo "<td>$row[type]</td>";
    echo "</tr>";

    }
?>
</table>

<?php
} else {
?>
<form method="post" name="<?php echo $_SERVER['PHP_SELF']?>">
<table>
<tr><td colspan="3"><b>Transporttype:</b></td></tr>
<tr><td width="33%"><input type=checkbox value=Bil name=Bil checked> Bil</td><td width="33%"><input type=checkbox value=Cykel name=Cykel> Cykel</td><td width="33%"><input type=checkbox value=Bus name=Fritidhus> Bus</td></tr>
<tr><td width="33%"><input type=checkbox value=Tog name=Tog> Tog</td><td width="33%"><input type=checkbox value=Cykel name=Taxa> Taxa</td><td width="33%"><input type=checkbox value=Gåben name=Gåben> Gåben</td></tr>
<tr><td colspan="3"><input type="submit" name="submit" id="submit" value="  S&oslash;g  " /></td></tr>
</table>
</form>

<?php
}
?>

</body>
</html>
Avatar billede morteeart Nybegynder
16. august 2004 - 12:33 #13
og et sql dump ville også være nice.
Avatar billede dhunters Nybegynder
16. august 2004 - 12:34 #14
to sek
Avatar billede dhunters Nybegynder
16. august 2004 - 12:36 #15
DROP TABLE IF EXISTS transport;
CREATE TABLE transport (
  type text NOT NULL
) TYPE=MyISAM;
Avatar billede fennec Nybegynder
16. august 2004 - 12:38 #16
echo "SELECT * FROM `transport` WHERE type='$_POST[bil]' OR type='$_POST[cykel]' OR type='$_POST[bus]' OR type='$_POST[tog]' OR type='$_POST[taxa]' OR type='$_POST[gåben]'"
Avatar billede fennec Nybegynder
16. august 2004 - 12:40 #17
Det kan jo være nogle af variablerne mangler eller er forkerte. Det er altid nemmere at se, hvis SQL-sætningen bliver skrev ud.
Avatar billede dhunters Nybegynder
16. august 2004 - 12:45 #18
Den skriver bare: "Forekomst(er) fundet: 0" - også med ovenstående indsat
Avatar billede morteeart Nybegynder
16. august 2004 - 12:48 #19
lol

du kan ikk echo en query

$query = ("SELECT * FROM `transport` WHERE type='$_POST[bil]' OR type='$_POST[cykel]' OR type='$_POST[bus]' OR type='$_POST[tog]' OR type='$_POST[taxa]' OR type='$_POST[gåben]'")
echo mysql_result($query,0);
Avatar billede dhunters Nybegynder
16. august 2004 - 12:51 #20
hehe... morteeart -> okay ;) men den viser stadig ingenting :)
Avatar billede morteeart Nybegynder
16. august 2004 - 12:51 #21
rettelse:

$query = mysql_query("SELECT * FROM `transport` WHERE type='$_POST[bil]' OR type='$_POST[cykel]' OR type='$_POST[bus]' OR type='$_POST[tog]' OR type='$_POST[taxa]' OR type='$_POST[gåben]'")
Avatar billede dhunters Nybegynder
16. august 2004 - 12:54 #22
Stadig kun "Forekomst(er) fundet: 0"
Avatar billede morteeart Nybegynder
16. august 2004 - 12:56 #23
tror du skal bruge LIKE istedet, medmindre type i din database kun inderholder order: bil (eller hvad dit $_GET[] nu indeholder)
Avatar billede dhunters Nybegynder
16. august 2004 - 13:00 #24
Den indeholder kun "bil" eller "taxa" eller noget i den stil - intet andet
Avatar billede sostack Nybegynder
16. august 2004 - 13:12 #25
Når du sender checkbox værdier i $_REQUEST, $_GET eller $_POST, kommer de med som:
$_REQUEST["checkboxnavn"]=on, hvis der er hak i, ellers kommer de slet ikke med. $_GET["checkboxnavn"]=on, hvis der er hak i, ellers kommer de slet ikke med.
$_POST["checkboxnavn"]=on, hvis der er hak i, ellers kommer de slet ikke med.

Så du skal nok ud i neget med:
foreach($_POST as $key => $value)
{
  if($value == 'on')
  {
    $qry_vals[] = "`type`='$key';
  }
}
$qryvals = implode(" OR ", $qry_vals);
$forespoergsel = "SELECT * FROM `transport` WHERE " $qryvals;
$result = mysql_query($forespoergsel) OR DIE(mysql_error());

//sostack
Avatar billede dhunters Nybegynder
17. august 2004 - 11:46 #26
okay... sostack - nu har jeg prøvet det du har skrevet her... men jeg kan ikke lige umiddelbart hitte ud af det! Kan du evt. skrive lidt mere?
Avatar billede dhunters Nybegynder
17. august 2004 - 12:54 #27
YES! fandt ud af det med nogle if-else-sætninger... Smid et svar så får i point for indsatsen..!
Avatar billede morteeart Nybegynder
17. august 2004 - 13:41 #28
nej tak
Avatar billede dhunters Nybegynder
18. august 2004 - 15:48 #29
the end...
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