Avatar billede mike2002 Nybegynder
22. september 2007 - 08:50 Der er 6 kommentarer og
1 løsning

Søgning med checkboxes

Jeg prøver at lave en side, hvor man kan vælge hvilke kolonner i en tabel, der skal vises... Men jeg har et problem med min query - tror jeg nok.

Der 51 kolonner i tabellen, og på min side kan man vælge mellem 51 checkboxe, som alle har navnet på en kolonne i min tabel. Vha. en form og POST sender jeg navnene videre til advvislaerer.php, men resultater bliver bare, at jeg får vist kolonnenavnene på de kolonner jeg har checket og ikke hvad de indeholder... Her er lidt kode:

checkboxsiden: (uddrag)

      <form id="form1" name="form1" method="post" action="advvislaerer.php">
        <table width="100%" border="1">
          <tr>
            <td width="9%" align="center"><a href="#" onclick="FillLin1()"><img src="Images/checkall1.gif" alt="Klik her for at vælge alle felter" width="30" height="30" /></a></td>
            <td width="10%" align="center"><a href="#" onclick="UnFillLin1()"><img src="Images/uncheckall.jpg" alt="Klik her for at fjerne markering i alle felter" width="30" height="30" /></a></td>
            <td width="11%">Linjefag 1
            <input name="linjefag1" type="checkbox" id="linjefag1" value="linjefag1" /></td>
            <td width="14%">Erfaring i faget
            <input name="erflin1" type="checkbox" id="erflin1" value="erflin1" /></td>
            <td width="20%">Erfaring med klassetrin
            <input name="klaslin1" type="checkbox" id="klaslin1" value="klaslin1" /></td>
            <td width="21%">Senest undervist i faget
            <input name="senestlin1" type="checkbox" id="senestlin1" value="senestlin1" /></td>
            <td width="15%">Interesse i faget
            <input name="interesselin1" type="checkbox" id="interesselin1" value="interesselin1" /></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>Linjefag 2
              <input name="linjefag2" type="checkbox" id="linjefag2" value="linjefag2" /></td>
            <td>Erfaring i faget
              <input name="erflin2" type="checkbox" id="erflin2" value="erflin2" /></td>
            <td>Erfaring med klassetrin
              <input name="klaslin2" type="checkbox" id="klaslin2" value="klaslin2" /></td>
            <td>Senest undervist i faget
              <input name="senestlin2" type="checkbox" id="senestlin2" value="senestlin2" /></td>
            <td>Interesse i faget
              <input name="interesselin2" type="checkbox" id="interesselin2" value="interesselin2" /></td>
          </tr>

og "resultatsiden" (uddrag):

$cn1_rsAdvis = "-1";
if (isset($_POST['linjefag1'])) {
  $cn1_rsAdvis = $_POST['linjefag1'];
}
$cn2_rsAdvis = "-1";
if (isset($_POST['erflin1'])) {
  $cn2_rsAdvis = $_POST['erflin1'];
}
$cn3_rsAdvis = "-1";
if (isset($_POST['klaslin1'])) {
  $cn3_rsAdvis = $_POST['klaslin1'];
}
$cn4_rsAdvis = "-1";
if (isset($_POST['senestlin1'])) {
  $cn4_rsAdvis = $_POST['senestlin1'];
}
$cn5_rsAdvis = "-1";
if (isset($_POST['interesselin1'])) {
  $cn5_rsAdvis = $_POST['interesselin1'];
}
mysql_select_db($database_SG, $SG);
$query_rsAdvis = sprintf("SELECT navn, initialer, %s, %s, %s, %s, %s FROM laerere ORDER BY initialer ASC", GetSQLValueString($cn1_rsAdvis, "text"),GetSQLValueString($cn2_rsAdvis, "text"),GetSQLValueString($cn3_rsAdvis, "text"),GetSQLValueString($cn4_rsAdvis, "text"),GetSQLValueString($cn5_rsAdvis, "text"));
$rsAdvis = mysql_query($query_rsAdvis, $SG) or die(mysql_error());
$row_rsAdvis = mysql_fetch_assoc($rsAdvis);
$totalRows_rsAdvis = mysql_num_rows($rsAdvis);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php do { ?>
  <table width="100%" border="1">
    <tr>
      <td><?php echo $row_rsAdvis['navn']; ?></td>
      <td><?php echo $row_rsAdvis['initialer']; ?></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><?php echo $row_rsAdvis['linjefag1']; ?></td>
      <td><?php echo $row_rsAdvis['erflin1']; ?></td>
      <td><?php echo $row_rsAdvis['klaslin1']; ?></td>
      <td><?php echo $row_rsAdvis['senestlin1']; ?></td>
      <td><?php echo $row_rsAdvis['interesselin1']; ?></td>
    </tr>

Jeg tror problemet ligger i min query, men når jeg skifter variablerne ud med statiske navne på kolonnenavnene, er der ikke noget problem... Hvad gør jeg forkert...?

Tillægsspørgsmål: hvis min query skal se nogenlunde ud, som jeg har lavet den, er det måske lidt meget med 51 variabler i query'en. Kan den laves anderledes (kortere/hurtigere/bedre?)?
Avatar billede showsource Seniormester
22. september 2007 - 09:30 #1
<input type="checkbox" name="search[]" value="Kolonnenavn_1">
<input type="checkbox" name="search[]" value="Kolonnenavn_2">

så får du et array, $_POST["search"] og ud fra det bygger du din sql op

$sql = "";
foreach($_POST["search"] as $value) {
$sql .= $value;
}

echo $sql;
Avatar billede mike2002 Nybegynder
22. september 2007 - 22:49 #2
Tak for det - det blev min query meget bedre af!

Men jeg har nok brug for lidt mere hjælp... Nu hedder $sql f.eks. linjefag1klas4fag3interesse3, hvis der er sat check i de fire kasser, hvor den jo gerne skulle hedde "linjefag1, klas4, fag3, interesse3". Jeg er sikker på dette kan ordnes - sikkert med explode() eller noget, men jeg er ikke helt sikker på hvordan...?

Men ellers er det vel meningen, at jeg sætter ind i min query a la:

"SELECT navn, initialer, %s
FROM tabel
ORDER BY initialer ASC", GetSQLValueString($min_nye_variabel, "text");

Hvor $min_nye_variabel er noget i retning af

$min_nye_variabel = explode(',', $sql);

Men som det står i øjeblikket får jeg kun printet Array, hvis jeg laver en echo $min_nye_variabel - så hvad mon jeg gør forkert...?
Avatar billede mike2002 Nybegynder
23. september 2007 - 00:02 #3
Hey showsource - håber du stadig er med mig... Nu har jeg fundet ud af noget... Jeg har fået søgeordene adskilt af komma og fjernet det første komma sådan her:

if(isset($_POST["search"])) {
foreach($_POST["search"] as $value) {
$cn_rsAdvis .= ','.$value;
}
}

$mnv = substr($cn_rsAdvis, 1);

echo $mnv;

Og sidste linje viser fint, hvad der er blevet tjekket, men... desværre så får jeg ingen resultater vist på siden... Kan du se hvad der er galt???

siden ser sådan ud nu:

mysql_select_db($database_SG, $SG);
$query_rsAdvis = sprintf("SELECT navn,initialer,%s FROM laerere ORDER BY initialer ASC", GetSQLValueString($mnv, "text"));
$rsAdvis = mysql_query($query_rsAdvis, $SG) or die(mysql_error());
$row_rsAdvis = mysql_fetch_assoc($rsAdvis);
$totalRows_rsAdvis = mysql_num_rows($rsAdvis);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php do { ?>
  <table width="100%" border="1">
    <tr>
      <td><?php echo $row_rsAdvis['navn']; ?></td>
      <td><?php echo $row_rsAdvis['initialer']; ?></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><?php echo $row_rsAdvis['linjefag1']; ?></td>
      <td><?php echo $row_rsAdvis['erflin1']; ?></td>
      <td><?php echo $row_rsAdvis['klaslin1']; ?></td>
      <td><?php echo $row_rsAdvis['senestlin1']; ?></td>
      <td><?php echo $row_rsAdvis['interesselin1']; ?></td>
    </tr>

Mvh Michael
Avatar billede showsource Seniormester
23. september 2007 - 06:46 #4
Et lille eks. på hvordan du kan lave en sql alt efter hvilken checkbox som er markeret

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<?php
for($i = 1; $i < 6; $i++) {
?>
<input type="checkbox" name="vis[]" value="Checkbox_<?php echo $i; ?>">Checkbox_<?php echo $i; ?><br />
<?php
}
?>

<input type="submit" value="vis query">
</form>

<?php
if(isset($_POST["vis"]) && is_array($_POST["vis"])) {

$sql = "SELECT ". implode(",", $_POST["vis"]) ." FROM tabel";
echo $sql;

}
?>
Avatar billede mike2002 Nybegynder
23. september 2007 - 16:35 #5
Det var super fedt - nu virker det!!! Jeg har godt nok ikke lavet en automatisk nummerering af mine checkboxe - det var ikke nødvendigt... Det var implode, der gjorde forskellen - den funktion har jeg aldrig brugt før...

Læg et svar for points
Avatar billede showsource Seniormester
23. september 2007 - 22:23 #6
ingen point, ellers tak
Avatar billede mike2002 Nybegynder
24. september 2007 - 09:45 #7
Så bare tak for hjælpen!!!
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