Suchformular: Wort1 oder Wort2

D2587

Mitglied
Hi, ich habe ein code für interne Suche. Leider funktioniert es nicht so wie ich wollte.
Wenn ich 2 oder 4 Worte in Suchfeld eingebe, dann wird es gesucht genau nach diese reinfolge von Wortern (Wort1 und Wort2). Ich will, dass die Suche funktioniert wie im Wordpress Blogs( Wort1 oder Wort2).
Beispiel: _http://bodenfrost.wordpress.com/?s=Bei+R%C3%A4umung+Blockade

Was muss ich im Code ändern?

Meine Code
PHP:
$states = mysql_query("SELECT sterm FROM wp_mysearch WHERE sterm LIKE '%$partialStates%' LIMIT 10");
 
Du willst es in die einzelnen Wörter splitten und dann jedes Wort abfragen
PHP:
$or = array();
//Eingabe zerlegen und aus jedem Teil ein OR machen
foreach(explode(' ',$partialStates) as $word){
    $or[] = "sterm LIKE '%".trim($word)."%'";
}
$where = '('.implode(' OR ', $or).')';

$sql = "SELECT sterm FROM wp_mysearch WHERE {$where} LIMIT 10";
echo $sql;
 
Ja, ich will einzelnen Wörter splitten und dann jedes Wort abfragen.

PHP:
<?php
    $partialStates = Suchbegriff; // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!
     
    mysql_connect("localhost", "web18", "12345") or die(mysql_error());
    mysql_select_db("usr_web18") or die(mysql_error());

    $or = array();
//Eingabe zerlegen und aus jedem Teil ein OR machen
foreach(explode(' ',$partialStates) as $word){
    $or[] = "sterm LIKE '%".trim($word)."%'";
}
$where = '('.implode(' OR ', $or).')';

$sql = "SELECT sterm FROM wp_mysearchterms WHERE {$where} LIMIT 10";
echo $sql;

	$states = mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm LIKE '%$partialStates%' LIMIT 50");
    while ($state = mysql_fetch_array($states)) {
        echo " " . $state['sterm'] . ",";
    }

    $query = sprintf("SELECT sterm FROM wp_mysearchterms WHERE name='%s'",
        mysql_real_escape_string($partialStates));

?>

Die Ausgabe funktioniert.

Leider im Ergebnis erscheint noch das: SELECT sterm FROM wp_mysearchterms WHERE (sterm LIKE '%web%') LIMIT 10
 
Könnte es sein, dass du einfach mein Code kopiert hast ohne dir zu überlegen was du da kopierst? Ich glaube nächstes mal baue ich noch ein wenig Schadcode mit ein......

Versuchs doch einfach mal ohne das echo, das ich zu Testzwecken im Code hatte.
 
Die Ausgabe funktioniert.

Leider im Ergebnis erscheint noch das: SELECT sterm FROM wp_mysearchterms WHERE (sterm LIKE '%web%') LIMIT 10

ich habe echo $sql; gelöscht.

PHP:
echo $sql;

Funktioniert trotzdem nicht.

Warum?

Was jetzt. Funktioniert es oder funktioniert es nicht? Und überleg dir bevor du schreibst. Wir müssen in diesen Thread nicht in ein Chat verwandeln wie dein anderen Thread.

Erst analysieren, dann schreiben. Und das ganze mit möglichst vielen Hinweisen. 'funktioniert nicht' sagt gar nix, aber wirklich überhaubt nix aus. Kommt eine Fehlermeldung? Kommt ein weiser Bildschirm? Was hast du zur Fehlerbehebung schon getan?
 
1. Als erstes Wort wird Suchwort ausgegeben. Was schon komisch ist.
2. Nach dem ersten Wort werden Datensätze ausgegeben, jedoch nicht relevante.

Suche nach Lösung.
 
Wundert dich das?
Ja, ich will einzelnen Wörter splitten und dann jedes Wort abfragen.

PHP:
<?php
    $partialStates = Suchbegriff; // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!
     
    mysql_connect("localhost", "web18", "12345") or die(mysql_error());
    mysql_select_db("usr_web18") or die(mysql_error());

    $or = array();
//Eingabe zerlegen und aus jedem Teil ein OR machen
foreach(explode(' ',$partialStates) as $word){
    $or[] = "sterm LIKE '%".trim($word)."%'";
}
$where = '('.implode(' OR ', $or).')';

$sql = "SELECT sterm FROM wp_mysearchterms WHERE {$where} LIMIT 10";
echo $sql;

	$states = mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm LIKE '%$partialStates%' LIMIT 50");
    while ($state = mysql_fetch_array($states)) {
        echo " " . $state['sterm'] . ",";
    }

    $query = sprintf("SELECT sterm FROM wp_mysearchterms WHERE name='%s'",
        mysql_real_escape_string($partialStates));

?>
]


Du hast einfach mein Code kopiert. Mein Code setzt ein SQL-Query zusammen. Aber gegen die Datenbank verwendest du nicht das neue Query, sondern immer noch dein altes.
PHP:
	$states = mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm LIKE '%$partialStates%' LIMIT 50");
//ersetzen mit
	$states = mysql_query($sql);

Zudem, was sollen eigentlich die 2 folgenden Zeilen am schluss bewirken?
PHP:
//wozu?
    $query = sprintf("SELECT sterm FROM wp_mysearchterms WHERE name='%s'",
        mysql_real_escape_string($partialStates));
 
PHP:
//wozu?
    $query = sprintf("SELECT sterm FROM wp_mysearchterms WHERE name='%s'",
        mysql_real_escape_string($partialStates));

Leider ich weiß es nicht genau, was sollen diese 2 Zeilen bewirken.
Ich habe die jetzt gelöscht.

So sieht es jetzt, nach allen Änderungen aus. Wenn ich das richtig gemacht habe.

PHP:
<?php
    $partialStates = single_tag_title(''); // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!
     
    mysql_connect("localhost", "web18", "12345") or die(mysql_error());
    mysql_select_db("usr_web18") or die(mysql_error());

    $or = array();
//Eingabe zerlegen und aus jedem Teil ein OR machen
foreach(explode(' ',$partialStates) as $word){
    $or[] = "sterm LIKE '%".trim($word)."%'";
}
$where = '('.implode(' OR ', $or).')';

$sql = "SELECT sterm FROM wp_mysearchterms WHERE {$where} LIMIT 10";


	$states = mysql_query($sql); 
    while ($state = mysql_fetch_array($states)) {
        echo " " . $state['sterm'] . ",";
    }


?>

Im Ergebnis sehe ich keine Änderung. Alles so ist, wie ich schon im letzten Post geschrieben habe.
 
Zurück