Suchmaschinenoptimierung
   
 
 

Warum registrieren?

Nur als registriertes Mitglied vom ABAKUS Forum hast Du vollen Zugriff auf alle Funktionen unserer Website. So kannst Du Deine eigenen Fragen auf einen Blick anzeigen lassen und hast die volle Übersicht über neue interessante Themen im Forum für Suchmaschinenoptimierung. Jetzt kostenlos registrieren.

 
Schnellsuche!:  

Volltextsuche php mysql

Gehe zu Seite 1, 2  Weiter
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webcoding und -Programmierung Druckversion
 Sonderzeichen Gedankenstriche :: Hintergrundmusik einbinden für FF und IE  
Autor Nachricht
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 04.02.2010, 03:49    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

CLOSED

Zuletzt bearbeitet von ben78 am 14.02.2010, 15:34, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
net(t)worker
Moderator
Moderator


Anmeldungsdatum: 13.07.2005
Beiträge: 10978
Wohnort: Nottuln

BeitragVerfasst am: 04.02.2010, 04:15    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

setz das ; ne Zeile höher...

Code:
...
...
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
...
...

_________________
Sudoku für deine Webseite (deutsch) | Sudoku for your website (english)
ich suche Kampagnen auf CPC Basis im Format 400x400px, 500 - 800 Klicks täglich, bitte per PM melden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 04.02.2010, 04:24    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

@net(t)worker...Vielen und Großen Dank. Jetzt bekomme ich mein Tabelle zu sehen.

Habe jetzt aber folgendes Problem. Mir werden nur passende Suchergebnisse angezeigt, wenn ich mit Verwendung des Sprungmenüs nach einer Marke suche. Wenn ich was in das Textfeld eingebe, wird nicht danach gesucht. Es erscheint trotzdem nur das, was im Sprungmenü ausgewählt ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mork vom Ork
PostRank 10
PostRank 10


Anmeldungsdatum: 08.07.2008
Beiträge: 2322
Wohnort: Hinterm Mond.

BeitragVerfasst am: 04.02.2010, 10:20    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

ben78 hat Folgendes geschrieben:
Mir werden nur passende Suchergebnisse angezeigt, wenn ich mit Verwendung des Sprungmenüs nach einer Marke suche. Wenn ich was in das Textfeld eingebe, wird nicht danach gesucht. Es erscheint trotzdem nur das, was im Sprungmenü ausgewählt ist.

Schau in deinen Code:
Code:
$suchwort = mysql_real_escape_string($_POST['suche']);

$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "')";

Nach wie vielen Feldern suchst du da? Nach einem, "suche". Nicht nach zweien.

Code:
<input type="text" name="suche" value="Produktfinder" />
<select name="suche">

Und hier spiele mal Browser und überlege dir, was du machst, wenn du zwei ausgefüllte Eingabefelder siehst, die denselben Namen haben. Wie übermittelst du die Daten an den Server, so dass der Server weiß, wo welches Datum herkommt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 06.02.2010, 04:11    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Meine Suma verfügt über ein Feld für die Texteingabe und ein Sprungmenü zum auswählen von Marken. Der User kann einen Suchbegriff eintippen und wenn vom User gewünscht, im Sprungmenü eine Marke zum Suchbegriff auswählen. Er soll natürlich auch nur nach Marken oder eigenem Suchbegriff suchen können.


Dazu habe ich jetzt folgenden Code in meinem PHP-Skript:

Code:

[b]LINE 40:[/b] $suchwort = mysql_real_escape_string($_POST['suche']);

[b]LINE 46:[/b] $sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";

$db_erg = mysql_query( $sql );
if ( ! $db_erg )
[b]LINE 53:[/b] if ($marke) $sql = $sql." AND Marke = $marke";

{
die('Ungültige Abfrage: ' . mysql_error());
}


Beim Testen erscheinen immer folgende Fehlermeldungen:

Notice: Undefined index: suche in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 40

Notice: Undefined variable: marke in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 46

Notice: Undefined variable: marke in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 53
Ungültige Abfrage: Can't find FULLTEXT index matching the column list


P. s.: Die Formularfelder für die Eingaben sind nicht mehr in reinem HTML gehalten, sondern mit PHP.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mork vom Ork
PostRank 10
PostRank 10


Anmeldungsdatum: 08.07.2008
Beiträge: 2322
Wohnort: Hinterm Mond.

BeitragVerfasst am: 06.02.2010, 13:12    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

ben78 hat Folgendes geschrieben:
$suchwort = mysql_real_escape_string($_POST['suche']);

Notice: Undefined index: suche in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 40

Dann wurde das Feld suche nicht vom Formular übermittelt. Du kannst mit phpinfo(INFO_VARIABLES) schauen, was PHP dir alles an Variablen zur Verfügung stellt.

Da es vorkommen kann, dass eines der Felder nicht ausgefüllt wurde, prüfe mit isset($_POST['suche']), ob die Variable existiert, bevor du auf sie zugreifst.

Zitat:
$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";

Notice: Undefined variable: marke in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 46

Du hast die Variable $marke nirgends gefüllt. Um $suchwort kümmerst du dich ja in eingangs genannter Zeile, für $marke musst du das Gleiche machen.

Zitat:
Ungültige Abfrage: Can't find FULLTEXT index matching the column list

Du hast keinen Index, der zu den angefragten Spalten Bezeichnung, Beschreibung und Marke passt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
mgutt
PostRank 10
PostRank 10


Anmeldungsdatum: 08.03.2005
Beiträge: 2946

BeitragVerfasst am: 06.02.2010, 13:51    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Hier zwei passende Funktionen, um isset() zu prüfen:
Code:
function _get($var, $else=false, $force=false) {
   if (!$force) {
      return isset($_GET[$var]) ? $_GET[$var] : $else;
   }
   else {
      $force = array_flip($force);
      return isset($_GET[$var]) && isset($force[$_GET[$var]]) ? $_GET[$var] : $else;
   }
}
function _post($var, $else=false, $force=false) {
   if (!$force) {
      return isset($_POST[$var]) ? $_POST[$var] : $else;
   }
   else {
      $force = array_flip($force);
      return isset($_POST[$var]) && isset($force[$_POST[$var]]) ? $_POST[$var] : $else;
   }
}


Anwendungsbeispiel:
Code:
$suche = _post('suche');
$marke = _post('marke');


Optionale Anwendung:
Falls z.B. keine Marke übermittelt wurde und du in dem Fall eine Marke haben willst, kannst Du z.B. auch sowas machen:
Code:
$marke = _post('marke', 'Sony');


Falls Du nicht möchtest, dass jemand fehlerhafte Marken übermittelt, so kannst Du das bei Bedarf eingrenzen:
Code:
$marke = _post('marke', 'Sony', array('Sony', 'Toshiba', 'Panasonic'));


Weiteres zum Thema:
Ich empfehle Dir weiterhin mysql_real_escape_string() immer innerhalb der SQL-Abfrage einzusetzen. Wenn man sich das einmal angewöhnt hat, vergisst man es nicht und es kommt nicht zu Problemen, wenn Du die Variable mal in einer Bedingung escapest, die dann versehentlich nicht greift.

z.B. sowas:
Code:
$submit = _post('submit');
$suche = _post('suche');
$marke = _post('marke');
// formular abgesendet
if ($submit) {
   $suche = mysql_real_escape_string($suche);
}
// suchbegriff vorhanden
if ($suche) {
   $sql = "SELECT * FROM table WHERE suche = '$suche'";
}


In dem Fall könnte ein Angreifer den Submit-Button unterdrücken und damit würde mysql_real_escape_string() nicht greifen. Wie im Beispiel wird es Dir vermutlich nicht passieren, aber bei mehreren verschachtelten Bedingungen kann man leicht was übersehen und schon hat man den Salat.

Und was soll das da:
Code:
if ( $db_link )
{
echo 'Verbindung erfolgreich: ';
echo $db_link;
}

else
{
   
// hier sollte dann später dem Programmierer eine
// E-Mail mit dem Problem zukommen gelassen werden
die('keine Verbindung möglich: ' . mysql_error());
}


Du hast die Verbindung oben im Script erstellt und nachdem Du bereits die Abfrage machst prüfst Du ob die Datenbankverbindung besteht?!
_________________
Marc Gutt Services | meine Kontaktdaten | Ankauf von Diskussionsforen, Communities und Forendomains
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 07.02.2010, 03:53    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

DANKE Leutz!

Jetzt habe ich folgenden Code im Skript. Schaut das jetzt besser aus? ich lese mich auf diversen Seiten dumm und dämlich, komme aber nicht weiter.

Code:
$suchwort = mysql_real_escape_string($_POST['suche']);
$marke = mysql_real_escape_string($_POST['hersteller']);
 
$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";
 
if ($marke) $sql = $sql." AND Marke = $marke";
 
 
$db_erg = mysql_query( $sql );


Dazu folgendes Skript mit den Formularfeldern.

Code:
$sql = "SELECT DISTINCT Marke FROM test ORDER BY Marke";

if ($db_erg = mysql_query( $sql ))
{
 echo '<form action="./mysql/search-fulltext1.php" method="post">';
 echo '<div id="search-mysql">';
 echo '<input type="text" name="suche" size="20" ';
 echo "onfocus=\"if (this.value =='Produktfinder') { this.value=''}\" ";
 echo "onblur=\"if (value == '') {value='Produktfinder'}\" value=\"Produktfinder\" />";
 echo '<select name="hersteller">';
 echo '<option value="">Marke</option>';
 while ($row = mysql_fetch_array( $db_erg))
 {
  echo '<option value="' . $row["Marke"] . '">' . $row["Marke"] . '</option>';
 }
 echo '</select>';
 echo '<input type="submit" value="GO">';
 echo '</div></FORM>'


Wenn ich aus dem Sprungmenü eine Marke auswähle und dabei das Textfeld für die Sucheingabe frei lasse, dann auf GO klicke, kommt folgende Fehlermeldung:

Ungültige Abfrage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'adidas' at line 1 Was ist denn da Syntax-technisch falsch? ich schaue schon die ganze zeit drauf... - Als Anfänger versteht sich -...und komme aber nicht drauf.

LINE 1 =
Code:
$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";


...UND

Wenn ich in das Suchfeld ein Suchbegriff eingebe und das Sprungmenü unberührt lasse, erscheint nach klicken auf GO komischer Weise folgende Meldung, obwohl ich...

Code:
ALTER TABLE test ADD FULLTEXT (Bezeichnung, Beschreibung, Marke);


...bereits ausgeführt habe.

Ungültige Abfrage: Can't find FULLTEXT index matching the column list

Was mache ich diesmal wieder falsch???

Ich vergammle schon so seit ca. 9 Std. lesend und testend vor mich hin. Ich bin Fix und Foxi...I kann nimmer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mgutt
PostRank 10
PostRank 10


Anmeldungsdatum: 08.03.2005
Beiträge: 2946

BeitragVerfasst am: 07.02.2010, 11:01    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

1.) Du prüfst immer noch nicht ob die Variable gesetzt ist:
Code:
$suchwort = mysql_real_escape_string($_POST['suche']);


Hier fehlt die Prüfung auf isset().

2.) Fulltext-Indexe funktionieren nur so wie sie gesetzt wurden. Wenn Du einen Fulltext-Index auf drei Spalten setzt, kannst Du nicht eine der Spalten separat abfragen, außer Du setzt für diese dritte Spalte einen eigenen Fulltext-Index. Hier fragst Du aber separat die eine Spalte ab:
Code:
AND MATCH Marke AGAINST ('" . $marke . "')"


3.) Bei der Bedingung nach $marke hast Du $marke in der SQL-Abfrage nicht in Anführungszeichen gesetzt. Ohne Anführungszeichen akzeptiert SQL aber keine Strings, sondern z.B. nur Zahlen oder Boolean:

Falsch:
Code:
if ($marke) $sql = $sql." AND Marke = $marke";


Richtig:
Code:
if ($marke) $sql = $sql." AND Marke = '$marke'";



4.) Die "AND MATCH Marke"-Bedingung der Marke macht keinen Sinn. Du hast ja bereits davor in allen drei Spalten gesucht.

Stattdessen macht es meiner Ansicht nach so Sinn:
Code:
$sql = "SELECT *
            FROM test
            WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke) {
   $sql .=  " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}


Ich habe nun also nur die Abfrage nach $suchwort und wenn zusätzlich $marke übermittelt wurde, dann wird eine zusätzliche Bedingung eingesetzt. Statt = habe ich LIKE mit Platzhaltern genutzt. Auf die Art würde bei der Eingabe von Adida auch Adidas gefunden werden. Wenn Du das nicht willst, dann lass die Platzhalter weg. LIKE solltest Du aber in dem Fall vor = bevorzugen weil LIKE je nach Zeichensatz bereits ähnliche Buchstaben erkennt. z.B. wird ä auch als ae gefunden.
_________________
Marc Gutt Services | meine Kontaktdaten | Ankauf von Diskussionsforen, Communities und Forendomains
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 08.02.2010, 04:05    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

@mgutt & Mork vom Ork Vilen Dank! Das hat mir wietergeholfen und ich habe wieder etwas dazu gelernt. Aber noch klappt's nicht ganz.


Ich habe mein Skript Euren Hinweisen entsprechend umgeschrieben. Ich hoffe, dass mir das weitest gehend gelungen ist. Ich hoffe ich gehe Euch mit der dummen Fragerei eines nervigen Anfängers nicht auf den Senkel.

Mein Skript sieht jetzt so aus:
Code:
// Vriablen Definieren
$suchwort = mysql_real_escape_string($_POST['suche']);
$marke = mysql_real_escape_string($_POST['hersteller']);

// Abfrage
$sql = "SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke)
{
$sql .=  " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}

$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}

$anzahl = mysql_num_rows($db_erg);
echo "Suchergebnisse: $anzahl";


Via ALTER TABLE test ADD FULLTEXT (marke) habe ich in meiner MySQL-Tabelle einen Fulltext-Index für die Spalte Marke erstellt. Und einen ALTER TABLE test ADD FULLTEXT (Bezeichnung, Beschreibung, Marke) für die Spalten Bezeichnung, Beschreibung und Marke.

Wenn ich jetzt einen Suchbegriff ins Textfeld eintippe und dabei aus dem Sprungmenü eine Marke auswähle, erhalte ich die Meldung, dass 0 Ergebnisse gefunden wurden.

Den selben Schrott habe ich auch, wenn ich NICHTS ins Textfeld getippt habe und mir nur eine Marke aus dem Sprungmenü raussuche.

Tippe ich was ins Textfeld und lasse dabei das Sprungmenü "Marke" unberührt, funtzt die Such einwandfrei.

Womit kann denn das jetzt bitte zu tun haben? Wie kann ich das Prob. lösen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mgutt
PostRank 10
PostRank 10


Anmeldungsdatum: 08.03.2005
Beiträge: 2946

BeitragVerfasst am: 08.02.2010, 09:39    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Das (die isset()-Geschichte):
Code:
// Vriablen Definieren
$suchwort = mysql_real_escape_string($_POST['suche']);
$marke = mysql_real_escape_string($_POST['hersteller']);


sollte so:
Code:
// vars
$suchwort = isset($_POST['suche']) ? trim($_POST['suche']) : '';
$marke = isset($_POST['hersteller']) ? trim($_POST['hersteller']) : '';


Erst wird mit isset() geprüft ob das post-Element gesetzt wurde und wenn ja, dann werden mit trim() Leerzeichen vor und nach dem String entfernt. Wenn nein, dann wird die Variable mit einem leerem String gefüllt.

Das ganze ist identisch zu:
Code:
// vars
if (isset($_POST['suche'])) {
   $suchwort =  trim($_POST['suche']);
else {
   $suchwort =  '';
}
if (isset($_POST['hersteller'])) {
   $marke =  trim($_POST['hersteller']);
else {
   $marke =  '';
}


Spart also im Grunde nur Schreiberei.

Zitat:
Via ALTER TABLE test ADD FULLTEXT (marke) habe ich in meiner MySQL-Tabelle einen Fulltext-Index für die Spalte Marke erstellt.

Den kannst Du wieder löschen. Bei LIKE ist kein FULLTEXT Index notwendig. Nur bei MATCH ist dieser nötig und da fragst Du bekanntlich nur die drei Spalten ab.

Zitat:
0 Ergebnisse gefunden

Zum Debugging empfehle ich Dir einfach mal die Abfrage per echo ausgeben zu lassen. Also so:
Code:
if ($marke) {
   $sql .=  " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
echo $sql;


Dann weißt Du zumindest schon mal wie die Abfrage im Ergebnis aussieht, je nachdem welche Option du ausgewählt hast. Die kannst Du dann parallel in phpmyadmin testen und optimieren. Ich vermute mal, dass Du dann selber herausfindest was da falsch läuft.

Gruß
_________________
Marc Gutt Services | meine Kontaktdaten | Ankauf von Diskussionsforen, Communities und Forendomains
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 08.02.2010, 22:54    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

@mgutt Vielen Dank!!!

Das mit isset() habe ich trotz des vielen Lesens wie z. B. im "Handbuch" immer wieder ausprobiert und es hat nie gefunzt. Und jetzt...so wie Du es mir gepostet hast, scheint mein isset() zu passen.

Zitat:
// vars
$suchwort = isset($_POST['suche']) ? trim($_POST['suche']) : '';
$marke = isset($_POST['hersteller']) ? trim($_POST['hersteller']) : '';


...und auch vielen Dank für diesen Tipp:

Zitat:
Den kannst Du wieder löschen. Bei LIKE ist kein FULLTEXT Index notwendig. Nur bei MATCH ist dieser nötig und da fragst Du bekanntlich nur die drei Spalten ab.


Das Feld Marke ist ein Sprungmenü, aus dem man sich für seine Suche eine Marke auswählen kann und kein Textfeld wo der User wie bei meiner Match-Abfrage was eintippen kann.

Dann erstelle ich also nur einmal einen Fulltext_index für die drei Spalten, die per Match abgefragt werden. Also für die Suche wo der User was eintippen kann und für das Sprungmenü (Marke auswählen) mache ich die Abfrage per LIKE. Ist eh nur eine Spalte aus der Tabelle.



Zitat:
Zum Debugging empfehle ich Dir einfach mal die Abfrage per echo ausgeben zu lassen. Also so:
[Code]:
if ($marke) {
$sql .= " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
echo $sql;


Ein echo $sql; hatte ich auch schon drinnen. Das zeigt mir dann die Querys an.
Ich erhalte als echo $sql;:
SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('Produktfinder') AND Marke = '%Treck%'Suchergebnisse: 0

Es passt ja eigentlich alles in der Query. Das einzige was nicht passt ist das blöde Sprungmenü für die Marken. Immer wenn ich mir aus dem Sprungmenü eine Marke wie z. B. "Treck" auswähle - ob ich nun einen Suchbegriff wie z. B. Bergschuhe in das Textfeld getippt habe oder nicht -, spielt dabei keine Rolle -, erhalte ich permanent 0 Ergebnisse.

Wenn ich allerdings nur Bergschuhe in das Suchfeld eintippe und das Sprungmenü (Marke auswählen) unberührt lasse, funzt alles wie gewünscht. Aber eben nur dann, wenn keine Marke aus dem Sprungmenü ausgewählt wurde und wenn doch, dann halt eben immer 0 Ergebnisse
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 08.02.2010, 23:04    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Jetzt konnte ich das Problem Dank den Tipps von mgutt um einiges aushebeln.

Jetzt kann ich zeitgleich nach einer Marke aus dem Sprungmenü und einem beliebigem Suchbegriff im Eingabefeld Suchen.

Das einzige Problem was ich jetzt noch habe ist das Wort in meiner AGAINST-Klammer "Produktfinder". Ich möchte, dass der User das Wort "Produktfinder" im Eingabefeld lesen kann aber bei der Such nicht berücksichtigt wird. Also wenn er nur nach einer Marke aus dem Sprungmenü suchen möchte. Deswegen erhalte ich höchstwahrscheinlich immer 0 Suchergebnisse, wenn ich das Textfeld bei der Suche unberührt lasse und nur nach einer Marke aus dem Sprungmenü suchen will, denn die SUMA sucht ja dann auch nach dem Wort "Produktfinder".

So sieht der Abschnitt des Codes für das Texteingabefeld aus:

Code:
echo '<form action="./mysql/search-fulltext1.php" method="post">';
 echo '<div id="search-mysql">';
 echo '<input type="text" name="suche" size="20" ';
 echo "onfocus=\"if (this.value =='Produktfinder') { this.value=''}\" ";
 echo "onblur=\"if (value == '') {value='Produktfinder'}\" value=\"Produktfinder\" />";...

Wäre hierfür die Verwendung einer Stoppwortliste das richtige oder kann man das auch anders lösen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ben78
PostRank 4
PostRank 4


Anmeldungsdatum: 30.03.2007
Beiträge: 118

BeitragVerfasst am: 09.02.2010, 11:11    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Ich habe jetzt mal meine Querey zerteilt. Aber das bringt bei unberührtem Texteingabefeld bei der der Suche trotzdem die selbe Query mit dem Wort "Produktfinder" in der Against-Klammer. Also folgende:
SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('Produktfinder') AND Marke LIKE '%Adidas%'

Zerteilung der Querey sieht so aus:
Code:
// Querey
$sql = "SELECT * FROM beauty WHERE";

if ($suchwort) $sql .= " MATCH (Bezeichnung, Beschreibung, Marke)  AGAINST('" . mysql_real_escape_string($suchwort) . "')";

if ($marke)
{
if ($suchwort) $sql .= " AND";
$sql .=  " Marke = '%" . mysql_real_escape_string($marke) . "%'";
}

// if sucheingabe
$db_erg = mysql_query( $sql );
if ( ! $db_erg )

und nicht die gewünschte Querey wie folgt, wenn nur aus dem Sprungmenü eine Marke für die Suche ausgewählt wurde und dabei das Texteingabefeld unberührt bleibt:
SELECT * FROM test WHERE Marke LIKE '%Adidas%'

War das überhaupt der richtige Ansatz???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Synonym
PostRank 8
PostRank 8


Anmeldungsdatum: 09.08.2008
Beiträge: 700

BeitragVerfasst am: 09.02.2010, 12:05    Titel: Volltextsuche php mysql Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Na dann prüfe doch einfach vor den ganzen Abfragen ob $suchwort = Produktfinder ist. Und wenn ja, dann setze die Variable zurück, so dass if ($suchwort) nicht mehr greift.

oder erweitere die if-Bedingung, damit die das mit berücksichtigt, ala "if ($suchwort AND $suchwort != 'Produktfinder')"

oder gleich bei der Übernahme
$suchwort = (isset($_POST['suche']) AND $_POST['suche'] != 'Produktfinder') ? trim($_POST['suche']) : '';
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webcoding und -Programmierung
Seite 1 von 2
Gehe zu Seite 1, 2  Weiter


 






Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Strukturierte Fehlersuche utf-8, MySQ... Andreas I. Webcoding und -Programmierung 3 11.03.2010, 12:27 Letzten Beitrag anzeigen
Keine neuen Beiträge MySQL-UPDATE table SET??? ben78 Webcoding und -Programmierung 2 24.02.2010, 22:03 Letzten Beitrag anzeigen
Keine neuen Beiträge MySql Abfrage Ice Man Webcoding und -Programmierung 6 14.02.2010, 01:12 Letzten Beitrag anzeigen
Keine neuen Beiträge Volltextsuche "PHP Script" ... ben78 Webcoding und -Programmierung 5 02.02.2010, 05:22 Letzten Beitrag anzeigen
Keine neuen Beiträge MySQL Query-Cache vs. NOW() und CURDA... Synonym Webcoding und -Programmierung 11 29.01.2010, 19:42 Letzten Beitrag anzeigen
Keine neuen Beiträge Volltextsuche mittels MySQL und PHP ben78 Webcoding und -Programmierung 2 26.01.2010, 05:17 Letzten Beitrag anzeigen
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. [S] PHP / MySQL / Memcached Programmi... dgrsh Marktplatz: Dienstleistungen 0 25.01.2010, 23:43 Letzten Beitrag anzeigen

Suchmaschinenoptimierung Angebote
Suchmaschinenoptimierung | Latent Semantische Optimierung (LSO) | SEO Blog | ABAKUS Keyword Trends | Online Tools | Suchmaschinenmarketing Angebot | Online Marketing

Impressum

Powered by phpBB © 2001, 2005 phpBB Group


Sie lesen gerade: Volltextsuche php mysql