Suche in Datei, eingrenzung mittels Checkboxen
Wilsonn
- php
Ich habe folgenden codeschnipsel:
if(!empty($_GET)) extract($_GET);
if(!empty($_POST)) extract($_POST);
$datei = file("adressen1.csv");
$wort = split("[ ,;!]+", $suchbegriffe);
if ($suchbegriffe == ""){print "Geben Sie bitte einen Suchbegriff ein <br /> <br />";}
if ($suchbegriffe !== ""){
print "Sie haben gesucht nach: <b>";
foreach($wort as $z) {
print " $z ";
}
print "</b><br><br>";
foreach($datei as $zeile) {
$w=0;
for ($o=0; $o<count($wort); $o++) {
if(stristr($zeile, $wort[$o])) {
$w=1;
}
}
if ($w == 1){ $teil=split(";",$zeile); print "<table width=75% border=0> <tr><td width=57%><strong>".$teil[0]."</strong> </td><td width=43%> </td></tr>
<tr><td>".$teil[1]."</td>
<td><a href=http://".$teil[6]." target=_blank>".$teil[6]."</a></td></tr>
<tr><td>".$teil[2]."</td>
<td><a href=mailto:".$teil[5].">".$teil[5]."</a></td></tr>
<tr><td>".$teil[3]."</td>
<td>".$teil[4]."</td></tr></table>
<br />
<br />
<table width=75% border=0>
<tr><td>".$teil[7]."</td>";}
Dies funktioniert soweit so gut. Die suche liefert mir auch richtige Ergebnisse. Nun möchte ich durch checkboxen die Suche irgendwie eingrenzen bzw. erweitern damit neben der Sucheingabe auch der Wert der checkbox gefunden wird.
Am Beispiel von ~~~html
<input type="checkbox" name="kategorie" value="religion" id="religion" />
<label for="religion">Religon<br />
</label>
möchte ich zum Beispiel die value "religion" finden. Jedoch wenn ich im code selbst
~~~php
$kat=0;
for ($i=0;$i<count($kategorie);$i++) {
if(strstr($zeile, $kategorie[$i])) {
$kat=1;
}
}
einfüge und versuche dies in der Datei zu finden:
if ($w == 1 or $kat ==1){ $teil=split(";",$zeile);...
gibt er mir grundsätzlich alles aus und begrenzt dies nicht auf Religion wie erwünscht. Wie kann ich das auf Religion in diesen Beispiel eingrenzen?
Bzw. mache ich grundsätzlich was falsch?
hi,
gibt er mir grundsätzlich alles aus und begrenzt dies nicht auf Religion wie erwünscht. Wie kann ich das auf Religion in diesen Beispiel eingrenzen?
Für eine Suche brauchst Du die Datenquelle in "Feldern". Wenn die Datenquelle eine CSV-Datei ist, erzeugst Du diese Felder mit explode() oder split() und je nach Checkbox-Auswahl wendest Du die Suche auf die entsprechenden Felder an.
Bzw. mache ich grundsätzlich was falsch?
Dein Code ist schwer lesbar. Eine Strukturierung in die einzelnen Aufgabenstellungen (Formular erzeugen, Parameterabfrage, Suchergebis darstellen) ist nicht erkennbar. Kommentare fehlen gänzlich.
Hotti
Hi, vielen Dank für deine Antwort.
Die Kommentare wurden von mir entfernt um den Code auf hier übersichtlicher darstellen zu lassen.
Zu den PHP code:
#setze Variable auf Null
$kat=0;
#zähle die Elemente von $kategorie
#setze Zähler auf Null, erhöhe Zähler in jedem Durchgang um Eins
#soviele Durchgänge, wie Zähler kleiner Anzahl Elemente
for ($i=0;$i<count($kategorie);$i++) {
#wenn ein Element von $kategorie in $zeile vorkommt
if(strstr($zeile, $kategorie[$i])) {
#setze die Variable auf Eins
$kat=1;
}
}
in so fern verändern, dass er bei strstr(..) nicht die Zeile ($Zeile) durchsucht, sondern alle einzelnen Felder der Zeile? Wobei er ja grundsätzlich durch strstr auch Teilwörter finden kann.
hi,
in so fern verändern, dass er bei strstr(..) nicht die Zeile ($Zeile) durchsucht, sondern alle einzelnen Felder der Zeile?
Ja, genau. Mal angenommen, Du hast je Zeile drei Felder ($name, $vname, $alter). Wenn in allen Feldern gesucht werden soll, hängst du die einfach aneinander mit dem Verkettungsoperator:
Je nach Kundenwunsch (Checkbox), suche in allen Feldern:
$xzeile = $name.$vname.$alter;
Suche nur in Namen:
$xzeile = $name;
Suche in Namen und Vornamen:
$xzeile = $name.$vname;
Hotti