• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fulltext Suche geht nicht!

xXxPeterPanxXx

Neues Mitglied
Hi,
ich habe nun seit mehreren Wochen Probleme mit meiner Suchfunktion. Sie sucht einfach nicht.:mrgreen:

Ihr könnt sie gerne testen. Geht einfach auf Home | little-coder.de und sucht nach if im Header.

Es wird nicht funktionieren.

Das ist der PHP Code
PHP:
   <?php

require_once 'inc/config.inc.php';

function performSearch(mysqli $db, $keywords, $category = 0, $inTitle = true,
                       $inText = true)
{
    /* Parameter validieren */

    $keywords = trim($keywords);
    $category = (int) $category;
    $inTitle  = (bool) $inTitle;
    $inText   = (bool) $inText;
    $results  = array();

    /* Abbruchbedingungen */

    if ($keywords == '') return array();

    /* WHERE-Bedingungen zusammenstellen */

    $conditions = array();

    $fields = array();
    if ($inTitle) $fields[] = 'name';
    if ($inText)  $fields[] = 'tutorial';
    if (count($fields) == 0) $fields = array('name', 'tutorial');
    $conditions[] = "MATCH (e.`" . implode("`, e.`", $fields) . "`) "
                    . "AGAINST ('" . $db->real_escape_string($keywords) . "')";

    if ($category > 0) {
        $conditions[] = "`kategorie` = '" . $db->real_escape_string($category) . "'";
    }

    $wherePart = " WHERE " . implode(' AND ', $conditions);

    /* Query zusammenbauen */

    $query = "SELECT
                    e.`id`,
                    e.`name`,
                    e.`nameurl`,
                    k.`id`   AS `category_id`,
                    k.`name` AS `category_name`,
                    k.`name_url` AS `category_name_url`
                FROM
                    `eintraege` e
                LEFT JOIN
                    `kategorien` k
                    ON
                        e.`kategorie` = k.`id`";

    if ($wherePart != '') {
        $query .= $wherePart;
    }


    $result = $db->query($query);
    while ($row = $result->fetch_assoc()) {
        $results[] = $row;
    }

    /* Rückgabe */

    return $results;
}

$title = $_POST['key'].' - Suche';
include 'inc/header.inc.php';

$_POST['key']   = (isset($_POST['key']))   ? trim($_POST['key'])    : '';
$_POST['cat']   = (isset($_POST['cat']))   ? (int) $_POST['cat']    : 0;
$_POST['titel'] = (isset($_POST['titel'])) ? (bool) $_POST['titel'] : false;
$_POST['text']  = (isset($_POST['text']))  ? (bool) $_POST['text']  : false;

$results = performSearch($db, $_POST['key'], $_POST['cat'], $_POST['titel'],
                         $_POST['text']);  

//$results = performSearch($db, $_POST['key'], 0, true, true);

if (count($results) == 0) {
    echo '<p class=\"error\">Ihre Suche erzielte leider keinen Treffer</p>';
} else {
    echo "<ul class\"ausgabe\">";
    foreach ($results as $result) {
        echo '<li class="ausgabe"><a href="' . $result['nameurl'] . '" class="ausgabe">'
     . htmlspecialchars($result['name']) . '</a></li>';  
       }
    echo "</ul>";
    
    }


include 'inc/footer.inc.php'; 
?>

Seht ihr einen Fehler?

MfG xXxPeterPanxXx
 
Sieht ja alles sehr geordnet aus :) Schön schön.
Aber mal eine Frage. Hast du schon mal deinen kompletten Query-String mitgeloggt und mal getestet, ob dieser irgend welche Fehler enthält? (zum Beispiel in phpmyadmin als sql einfügen). Solltest du Datensätze zurück bekommen, so liegt der fehler schon einmal nicht an der Datenbank :)
 
Der Query müsste stimmen.

Ich habe bei diesem Code:
Code:
[COLOR=#000000][COLOR=#DD0000]SELECT
                    e.`id`,
                    e.`name`,
                    e.`nameurl`,
                    k.`id`   AS `category_id`,
                    k.`name` AS `category_name`,
                    k.`name_url` AS `category_name_url`
                FROM
                    `eintraege` e
                LEFT JOIN
                    `kategorien` k
                    ON
                        e.`kategorie` = k.`id`"[/COLOR][/COLOR]

zwei Ergebnisse erhalten.

MfG xXxPeterPanxXx
 
Kannst du bitte mal mit dem Query arbeiten, den du ganz am Ende kriegst?
in dieser zeile:
PHP:
$result = $db->query($query);

Lass dir in phpmyadmin damit mal die Daten ausgeben.
Wenn du damit was kriegst steckt der fehler in folgenden zeilen
PHP:
while ($row = $result->fetch_assoc()) {
        $results[] = $row;
    }

Und mal ne Frage. ist das $result[] = "blub" sowas wie ein array push?
Ich mache das ganze nämlich immer über nen array push :)
 
So der Fehler muss irgentwo im Datenbank Bereich seien, denn diese Query: SELECT e.id, e.name, e.nameurl, k.id AS category_id, k.name AS category_name, k.name_url AS category_name_url FROM eintraege e LEFT JOIN kategorien k ON e.kategorie = k.id WHERE MATCH (e.name, e.tutorial) AGAINST ('faux') liefert kein Ergebniss.


Denn geneuen Grund habe ich nich leider nicht gefunden.

Mfg xXxPeterPanxXx
 
Tut mir Leid ich habe euch eine vllt wichtige Information geben. Ich arbeite mit mysqli. Ist dass den unter mysqli richtig?

Kann ich irgentwie noch Informationen geben?

MfG xXxPeterPanxXx
 
Fals es dir hilft, ich verwende meine Suche so:
PHP:
  $befehl = "SELECT `title`, `id` FROM `".$tbl."` WHERE `text` LIKE ? ORDER BY `id` DESC";
  $dbsuche = $db->prepare($befehl);
  $dbsuche->bind_param('s', $strsuche);
  $strsuche = "%".$_GET['suche']."%";
  $dbsuche->execute();
  $dbsuche->bind_result($title, $id);
Also nur LIKE %suche% und dann im while fetche ich das Ergebniss.

Mfg
 
Zurück
Oben