erweiterte Datenbank Suche (MySQL)

sugar

Erfahrenes Mitglied
Hallo zusammen,

habe ein kleines Problem: ich möchte eine MySQL Datenbank Suche machen. Jetzt möchte ich aber nicht nur nach einem Begriff suchen können sondern der User soll auch eine Checkbox anklicken können womit ein Wert (irgendeinwert) die Suche weiter filtert. Nach meiner jetztigen Lösung (siehe unten) kann es natürlich gar nicht gehen da die Variable "searchstring" nur einmal verwendet werden kann oder? Hat jemand vielleicht einen Lösungsvorschlag?

PHP:
if ($searchstring)
{
$sql="SELECT * FROM inhalt WHERE $searchtype LIKE '%$searchstring%' ORDER BY name ASC";
(...)
<form>
<input name="searchtype" type="text" value="news" size="28">
<input name="searchstring" type="text" id="searchstring">
<input name="searchstring" type="checkbox" id="searchstring" value="irgendeinwert">
(...)
</form>
 
Zuletzt bearbeitet:
Hallo

Du bist doch schon auf dem richtigen Weg

Deinem Code entnehme ich aber, das dein Feldname mit $ anfängt. Das solltest du nicht tun, da in PHP das $-Zeichen als Variablenerkennung dient.

Ich benenne für mein Beispiel dein Feld "$searchstring" in "Rechnungsnummer" um.
Ich füge deiner Tabelle das Feld "Status" hinzu.
Die Tabelle sleber heisst "Inhalt"

Jetzt mache ich eine Abfrage auf die Tabelle:

"SELECT * from inhalt where Rechnungsnummer LIKE '%$searchstring%' order by Name"

Auf dieser Abfrage bekomme ich alle Datensätze die in der Rechnungsnummer deiner LIKE Angabe entsprechen. Soweit so gut.

Jetzt möchte ich aber die Suche weiter eingrenzen. Dafür frage ich das Feld 'Status' mit ab.

Die CheckBox wird geklickt und der Wert "unerledigt" soll die suche weiter eingrenzen

Dann sieht das so aus:

....where Rechnungsnummer like '%searchstring%' and status = 'unerledigt' order by Name"

Jetzt bekommst du nur die Datensätze angezeigt, die deinem Suchstring entsprechen UND unerledigt sind.


Ist es das was du gesucht hast
 
Danke für deine Antwort! Ich denke die Art und Weise ist genau das was ich gesucht habe, problematisch ist nur das es eine ganze Reihe von Checkboxen gibt. Wird die Abfrage dabei nicht zu lang? Wie kann man das Verknüpfen immer mit "and"?
 
Jau, die Abrage wird immer mit "and" weitergeführt. Das dabei eine ellenlange SQL-Syntax entsteht ist normal ;-)
 
Einen kleinen Zusatz noch:

Du musst natürlich das betreffende Feld mit angeben:

.....where Feld1 = '$variableCheckbox1' AND Feld2 = '$variableCheckbox2' AND Feld3 = '$variableCheckbox3' usw....

Du kannst auch die gleiche Abfrage mit OR oder LIKE machen
 
jetzt muss irgendwo ein fehler drin sein glaub ich, jetzt geht es gar nicht mehr. :(

$sql="SELECT * FROM inhalt WHERE $searchtype LIKE '%$searchstring%' WHERE feld1 = '$akupunktur' AND feld2 = '$solarium' AND feld3 = '$fitness' ORDER BY name ASC";

vorher
$sql="SELECT * FROM inhalt WHERE $searchtype LIKE '%$searchstring%' ORDER BY name ASC";

hat es funktioniert?
 
sugar hat gesagt.:
Code:
$sql="SELECT * FROM inhalt WHERE $searchtype LIKE '%$searchstring%' WHERE feld1 = '$akupunktur' AND feld2 = '$solarium' AND feld3 = '$fitness' ORDER BY name ASC";
Code:
$sql="SELECT * FROM inhalt WHERE $searchtype LIKE '%$searchstring%' AND WHERE feld1 = '$akupunktur' AND feld2 = '$solarium' AND feld3 = '$fitness' ORDER BY name ASC";

Ich denke so müsstes gehen...
 
Ehrlich gesagt funktioniert das ganze immer noch nicht obwohl ich alle Ratschläge befolgt habe. Jetzt stehe ich komplett auf der Leitung und poste mal einfach den ganzen Code.

PHP:
<table width="100%" border="0" align="center" cellpadding="5" cellspacing="0">
        <tr> 
          <td height="100">

            <?php 


    if ($searchstring)
    {

        $sql="SELECT * FROM inhalt WHERE news LIKE '%$searchstring%' AND WHERE news = '$check1' ORDER BY name ASC";

        $db = mysql_connect("****", "*****", "*****");
        mysql_select_db("******",$db);

        $result = mysql_query($sql,$db);
        $checked = mysql_num_rows($result);    // Ist ein Eintrag vorhanden?
           if ($checked == 0){
               print "<Table width=\"100%\"><TR><TD class=\"error\"><b>Keine Einträge gefunden!</b></TD></TR></table>";
           }

while($myrow = mysql_fetch_array($result)) 
{ 
echo "<table width=\"96%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>
    <td><img src=\"box.gif\" width=\"548\" height=\"5\"></td>
  </tr><tr><td>";
echo "<TABLE BORDER=0 width='98%' align='center' cellpadding='3' cellspacing='0'>"; 
echo "<TR><TD class='text' width='60%'><b>".$myrow["subjekt"]."</b></TD></TR>";
echo "<tr><TD>".$myrow["adresse"]."</td></tr>";
echo "<tr><TD align=\"right\"><a href='index.php?option=news&aktion=newslang&ID=$myrow[ID]'>mehr Informationen</a>";

echo "</TD></TR></TABLE>"; 
echo "</td></tr><tr><td><img src=\"box.gif\" width=\"548\" height=\"7\"></td>
</tr></table>"; } 
}
else
{
?>
<form method="POST" action="<?php $PHP_SELF ?>">
<table width="60%" border="0" cellpadding="2" cellspacing="0">
<tr>
  <td class="heading">Detailsuche</td>
</tr>
<tr>
<td>
  <input name="searchstring" type="text" id="searchstring"></td>
</tr>
<tr>
  <td><table cellSpacing="0" cellPadding="0" width="98%" border="0">
      <tr>
        <td valign="top" class="text">
          <p>
  <input name="check1" type="checkbox" value="akupunktur"> Akupunktur<br>
            <input name="check2" type="checkbox" value="solarium"> Solarium</p>
          <p>etc...<br>
              </p></td>
        </tr>
    </table></td>
  </tr>
</table>
<p><input type="submit" value="Submit" name="B1" class="button">&nbsp;<input type="reset" value="Reset" name="B2" class="button"></p>
</form>
<?php
}
?>
         </td>
  </tr>
</table>
    
</html>

Ich hoffe jemand kann mir helfen! :rolleyes:
 
ich klinke mich hier mal ein, da ich fast das gleiche Problem habe.

Hat niemand eine Idee?

Ich denke es muss an der Auslesung der Checkboxen liegen.

Habe nach 24 Stunden herumprobieren leider immer noch keine Ahnung wie ich es anstellen muss :-(
 
PHP:
        $sql="SELECT * FROM inhalt WHERE news LIKE '%$searchstring%' AND WHERE news = '$check1' ORDER BY name ASC";
Ich denke rein sql technisch, dass das zweite where unnötig ist. Sonst gib mal die Fehlermeldung, welche das System ausspuckt..
 

Neue Beiträge

Zurück