Such Code funktioniert nicht. Was mache ich falsch?

Alt 23.06.2011, 19:08   # 1
ddimi1
 
Registriert seit: 16.03.2009
Beiträge: 47
Hallo, in meinem Such Code funktioniert nicht.

PHP-Code:
<?php
    $partialStates 
"<?php mystp_get_terms(1); ?>"// Suchbegriff!!
     
    
mysql_connect("localhost""web1""123") or die(mysql_error());
    
mysql_select_db("usr_web1") or die(mysql_error());

    
$strs explode(' 'preg_quote(mysql_real_escape_string($partialStates)));
$query mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(" implode("|"$strs) . ")' LIMIT 5");
    echo 
"SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(" implode("|"$strs) . ")' LIMIT 5"
    while (
$state mysql_fetch_assoc($states)) {
        echo 
" " $state['sterm'] . ",";
    }

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

?>

Fehlermeldung:
SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(\<\?php|mystp_get_terms\(1\);|\?\>)' LIMIT 5
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource


Was mache ich falsch?
  Mit Zitat antworten
Alt 23.06.2011, 20:23   # 2
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Hallo ddimi1,

das liegt vermutlich an den Backslashes im REGEXP in Deiner Query. Diese müssen nochmal escaped werden. Aus einem Backslash werden also zwei.

Viele Grüße
  Mit Zitat antworten
Alt 24.06.2011, 00:30   # 3
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Wie mache ich das?
  Mit Zitat antworten
Alt 24.06.2011, 07:55   # 4
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Mit der Funktion str_replace.

Grüße
  Mit Zitat antworten
Alt 24.06.2011, 10:44   # 5
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
leider, ich bin nicht gut in php. kannst du für mir das schreiben.
  Mit Zitat antworten
Alt 24.06.2011, 11:42   # 6
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Versuch mal das hier:

PHP-Code:
<?php
    $partialStates 
"<?php mystp_get_terms(1); ?>"// Suchbegriff!!
    
    
mysql_connect("localhost""web1""123") or die(mysql_error());
    
mysql_select_db("usr_web1") or die(mysql_error());

        
$strs preg_quote(mysql_real_escape_string($partialStates);
    
$strs str_replace('\\''\\\\'$strs));
    
$strs explode(' '$strs));
        
        
$query mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(" implode("|"$strs) . ")' LIMIT 5");
    echo 
"SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(" implode("|"$strs) . ")' LIMIT 5";
        
    while (
$state mysql_fetch_assoc($states)) {
            echo 
" " $state['sterm'] . ",";
    }

    
$query sprintf("SELECT sterm FROM wp_mysearchterms WHERE name='%s'",
    
mysql_real_escape_string($partialStates));
?>
  Mit Zitat antworten
Alt 24.06.2011, 11:49   # 7
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Fehler:
Parse error: syntax error, unexpected ';' in archive.php on line 20

Zeile 20:
$strs = preg_quote(mysql_real_escape_string($partialStates );
  Mit Zitat antworten
Alt 24.06.2011, 11:52   # 8
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Ups, eine Klammer zu viel kopiert:

PHP-Code:
<?php
    $partialStates 
"<?php mystp_get_terms(1); ?>"// Suchbegriff!!
    
    
mysql_connect("localhost""web1""123") or die(mysql_error());
    
mysql_select_db("usr_web1") or die(mysql_error());

        
$strs preg_quote(mysql_real_escape_string($partialStates));
    
$strs str_replace('\\''\\\\'$strs);
    
$strs explode(' '$strs);
        
        
$query mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(" implode("|"$strs) . ")' LIMIT 5");
    echo 
"SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(" implode("|"$strs) . ")' LIMIT 5";
        
    while (
$state mysql_fetch_assoc($states)) {
            echo 
" " $state['sterm'] . ",";
    }

    
$query sprintf("SELECT sterm FROM wp_mysearchterms WHERE name='%s'",
    
mysql_real_escape_string($partialStates));
?>
  Mit Zitat antworten
Alt 24.06.2011, 11:56   # 9
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Fehler:
SELECT sterm FROM wp_mysearchterms WHERE sterm REGEXP '(google)' LIMIT 5
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in archive.php on line 27

Zeile 27:
PHP-Code:
while ($state mysql_fetch_assoc($states)) { 


---------- Doppelpost zusammengeführt ----------

Warum kommt Fehler?
  Mit Zitat antworten
Alt 24.06.2011, 12:05   # 10
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Musst du an dieser Stelle mit REGEXP arbeiten oder was hast du vor?

Es wäre vielleicht sinnvoll wenn du erst mal erklärst, was du möchtest. Ich vermute die DB-Abfrage hast du dir irgendwo kopiert?

Grüße
  Mit Zitat antworten
Alt 24.06.2011, 12:14   # 11
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Es kann was anderes statt REGEXP sein.
Ich will Funktion "Ähnliche Themen" haben. Die Inhalte liegen in der Tabelle "stern".

Die Code hat für mich geschrieben wurde, hat aber nicht funktioniert. Der man der das geschrieben hat keine Zeit mehr.
  Mit Zitat antworten
Alt 24.06.2011, 12:23   # 12
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Ohne die Hintergründe zu kennen, würde ich dir zu LIKE oder MATCH AGAINST raten.

MATCH AGAINST würde dir da bessere Ergebnisse liefern, musst dafür aber den gesamten Text (Artikel) zum Vergleich nehmen, nicht nur ein Keyword.

Ist das ein Wordpress was du da benutzt?
  Mit Zitat antworten
Alt 24.06.2011, 12:31   # 13
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Ich benutze Wordpress.

Ich will im Wordpress zum WP-Titel oder WP-Tags änliche Inhalte aus meinem Job-Portal und Forum anzeigen.
  Mit Zitat antworten
Alt 24.06.2011, 14:42   # 14
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Neue Code:

So funktioniert es
Code:
$partialStates = usa; // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!
So funktioniert es nicht
Code:
$partialStates = the_title(); // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!
Ganze Code.
Code:
<?php
    $partialStates = the_title(); // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!
     
    mysql_connect("localhost", "web123", "123456") or die(mysql_error());
    mysql_select_db("usr_web112_3") or die(mysql_error());

    $states = mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm LIKE '%$partialStates%' LIMIT 5");
    while ($state = mysql_fetch_array($states)) {
        echo "<div>" . $state['sterm'] . "</div>";
    }
?>
Wenn ich the_title() einfüge, dann werden nicht änliche Datensätze ausgegeben. Weißt du warum?
  Mit Zitat antworten
Alt 24.06.2011, 14:53   # 15
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Ich schätze mal das liegt daran, weil du zu der Zeit die Umgebung von Wordpress nicht greifbar hast. Ist das als Plugin realisiert oder wie führst du das Script aus?
  Mit Zitat antworten
Alt 24.06.2011, 14:57   # 16
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Das ist nicht als Plugin realisiert. Ich habe das Script einfach in single.php (Artikel-Seite) eingefügt.
Was soll ich jetzt machen?

---------- Doppelpost zusammengeführt ----------

Hast du keine Idee?
  Mit Zitat antworten
Alt 24.06.2011, 15:21   # 17
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Versuch es mal so:

PHP-Code:
<?php
        mysql_connect
("localhost""web123""123456") or die(mysql_error());
        
mysql_select_db("usr_web112_3") or die(mysql_error());

        if (
have_posts()) : while (have_posts()) : the_post();
            
$partialStates mysql_real_escape_string(get_the_title()); // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!

            
$states mysql_query("SELECT sterm FROM wp_mysearchterms WHERE sterm LIKE '%$partialStates%' LIMIT 5");
            while (
$state mysql_fetch_array($states)) {
                    echo 
"<div>" $state['sterm'] . "</div>";
            }
        endwhile; endif;
?>
  Mit Zitat antworten
Alt 24.06.2011, 15:44   # 18
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
deine Lösung war gut. Das geht jetzt. Danke für deine Mühe.

Ich habe noch eine Frage.
Es wird nur nach reinfolge gesucht.

Gesucht nach "web immobilien" = liefert kein Ergebnise
Gesucht nach "immobilien web" = liefert Ergebnise

Leider wird es zum Suchbegriff "web immobilien" keine Ergebnise ausgegeben. Warum?

Es wäre gut wenn das gesplitert werden könnte und nach jedem Wort "web" und "immobilien" abgefragt würde. So würde viel mehr Ergebnisen ausgegeben.
  Mit Zitat antworten
Alt 24.06.2011, 15:51   # 19
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Weil ein LIKE immer nach den gesuchten Zeichen und in gleicher Reihenfolge sucht. Das heißt du wirst wohl einen Artikel mit der Kombination "immobilien web" haben aber nicht umgekehrt. "web immobilien" kommt also niemals so im Text vor.

Deshalb habe ich auch zu MATCH AGAINST geraten. Hier ist die Reihenfolge ziemlich egal, es zählt die Übereinstimmung.

Deine Query würde dann so aussehen:
SELECT sterm, MATCH(sterm) AGAINST('" . $partialStates . "') AS rank FROM wp_mysearchterms WHERE MATCH(sterm) AGAINST('" . $partialStates . "') ORDER BY rank DESC LIMIT 5

Grüße
  Mit Zitat antworten
Alt 24.06.2011, 16:00   # 20
ddimi1
Threadstarter
 
Registriert seit: 16.03.2009
Beiträge: 47
Kommt Fehler
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in single.php on line 25

Line 25
PHP-Code:
while ($state mysql_fetch_array($states)) { 

PHP-Code:
<?php
        mysql_connect
("localhost""web123""123456") or die(mysql_error());
        
mysql_select_db("usr_web112_3") or die(mysql_error());

        if (
have_posts()) : while (have_posts()) : the_post();
            
$partialStates mysql_real_escape_string(get_the_title()); // Hier die variable mit dem ähnlichen Suchbegriff eintragen!!

            
$states mysql_query("SELECT sterm, MATCH(sterm) AGAINST('" $partialStates "') AS rank FROM wp_mysearchterms WHERE MATCH(sterm) AGAINST('" $partialStates "') ORDER BY rank DESC LIMIT 5");
            while (
$state mysql_fetch_array($states)) {
                    echo 
"<div>" $state['sterm'] . "</div>";
            }
        endwhile; endif;
     
?>
  Mit Zitat antworten

Alt 28.05.2012, 21:08 # --
News Flash
 
Benutzerbild von News Flash
 
 
 
   
Antwort
Themen-Optionen



Alle Zeitangaben in WEZ +2. Es ist jetzt 21:08 Uhr.