In Datenbank nach einem 'Suchbegriff' suchen

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

In Datenbank nach einem 'Suchbegriff' suchen

Postby cjanischek » 02. September 2006 03:29

habe ein suchproblem ... keine fehlermeldung aber auch keine gewünschte ausgabe

hier der code

Code: Select all
<?php
   if (isset($_POST['submit']) && isset($_POST['Suchbegriff'])){
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','root','', 'Kontakte');
      echo 'Verbindung offen.<br />';
      $sql=
     ('SELECT * MATCH (kontaktEmail,anrede,kontaktName,kontaktVorname,kontaktTelefon,kontaktFax,kontaktMobil,kontaktStrasse,kontaktOrt,kontaktLand,kontaktTyp,kontaktUrl,zahlungsmittel,kreditfirma,kontaktcomment)AGAINST (".$Suchbegriff.") as score FROM Kontakt WHERE MATCH (kontaktEmail,anrede,kontaktName,kontaktVorname,kontaktTelefon,kontaktFax,kontaktMobil,kontaktStrasse,kontaktOrt,kontaktLand,kontaktTyp,kontaktUrl,zahlungsmittel,kreditfirma,kontaktcomment) AGAINST (".$Suchbegriff.") ORDER BY score DESC ');   
   echo 'erledigt.'  //kommt scheinbar bis hier aber eine ausgabe erfolgt nicht!!
      $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            '<A href="details.php">details</A>');      
      }
      echo'SQL geschickt. <br/>';
      $db->close();
//       echo 'Verbindung zu. <br />';
//       // Datenbankverbindung wieder schließen
//       } catch (Exception $e) {
//       echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
//       }
      
   }
}
?>

Bei exakter eingabe eines vorhandenen suchbegriffs kommt er bis 'erledigt.' --> scheint zumindest so ... die gewollte ausgabe tätigt er nicht.

ps. in der details.php würde ich gerne den datensatz in der formularansicht angezeigt bekommen... das wäre dann der nächste schritt....

muss man wirklich alle textfelder einzeln matchen oder gibt es sowas wie MATCH (*) WHERE type=varchar OR type=text FROM Kontakte...

zur ergänzung der code für die DB:
Code: Select all
CREATE TABLE `Kontakte` (
  `kontaktno` INT NOT NULL auto_increment,
  `kontaktEmail` varchar(255) NOT NULL,
  `anrede` varchar(40) NOT NULL,
  `kontaktName` varchar(255) default NULL,
  `kontaktVorname` varchar(255) NOT NULL,
  `kontaktTelefon` varchar(12) default NULL,
  `kontaktFax` varchar(12) default NULL,
  `kontaktGeburtstag` date NOT NULL,
  `kontaktMobil` varchar(12) default NULL,
  `kontaktStrasse` varchar(60) default NULL,
  `kontaktPlz` int(11) default NULL,
  `kontaktOrt` varchar(25) default NULL,
  `kontaktLand` varchar(40) default NULL,
  `kontaktTyp` varchar(40) default NULL,
  `kontaktUrl` varchar(40) default NULL,
  `infoFlag` boolean default NULL,
  `mediumFlag` boolean default NULL,
  `customerFlag` boolean default NULL,
  `artistFlag` boolean default NULL,
  `infono` boolean default NULL,
  `zahlungsmittel` varchar(20) NOT NULL,   
  `kreditfirma` varchar(255) default NULL,
  `kontaktcomment` varchar(400) default NULL,
  `submit` boolean default NULL,   
  PRIMARY KEY  (`kontaktno`),
  FULLTEXT (kontaktEmail,anrede,kontaktName,kontaktVorname,kontaktTelefon,kontaktFax,kontaktMobil,kontaktStrasse,kontaktOrt,kontaktLand,kontaktTyp,kontaktUrl,zahlungsmittel,kreditfirma,kontaktcomment)
 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



würde mich whnsinnig über einen tip freuen die ganzen verweise auf die volltextsuche haben mich nicht wirklich weitergebracht...++

liebe grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Re: In Datenbank nach einem 'Suchbegriff' suchen

Postby cjanischek » 02. September 2006 19:51

habe die Select abfrage modifiziert und auf der konsole ausgeführt imer noch kein brauchbares ergebnis.... schnief ... könnt ihr damit was anfangen?

Code: Select all
mysql> SELECT * FROM Kontakte where MATCH (kontaktVorname) against('Christine'); ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list
mysql> SELECT kontaktVorname FROM Kontakte where MATCH (kontaktVorname) against('Christine'); ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list


liebe grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 02. September 2006 20:27

CREATE TABLE `Kontakte` (
...
FULLTEXT(
kontaktEmail, anrede, kontaktName, kontaktVorname,
kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse,
kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl,
zahlungsmittel, kreditfirma, kontaktcomment
)
)

vs.
SELECT
kontaktVorname
FROM
Kontakte
WHERE
MATCH (kontaktVorname) against('Christine')

Laut dem MySQL-Manual müssen bei einer "natural language" - Suche im MATCH die selben Spalten angegeben werden, wie beim Tabellenanlegen in FULLTEXT.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby cjanischek » 03. September 2006 15:56

lieben dank für den tip mit dieser abfrage:
Code: Select all
SELECT * FROM Kontakte WHERE MATCH (kontaktEmail,anrede,kontaktName,kontaktVorname,kontaktTelefon,kontaktFax,kontaktMobil,kontaktStrasse,kontaktOrt,kontaktLand,kontaktTyp,kontaktUrl,zahlungsmittel,kreditfirma,kontaktcomment) AGAINST ("Christine");

klappt das auch auf der konsole ABER wenn ich die abfrage in meine suchausgabe kopiere und mit der variable $suchbegriff ausstatte:
Code: Select all
SELECT * FROM Kontakte WHERE MATCH (kontaktEmail,anrede,kontaktName,kontaktVorname,kontaktTelefon,kontaktFax,kontaktMobil,kontaktStrasse,kontaktOrt,kontaktLand,kontaktTyp,kontaktUrl,zahlungsmittel,kreditfirma,kontaktcomment) AGAINST (".$suchbegriff.")

gehts nicht :( , die fehlermeldung ist
==> Parse error: syntax error, unexpected T_STRING in /srv/www/htdocs/suche.php on line 11

hier die suchausgabe-datei (hinter dem include suche.php steckt die o.g. sql abfrage):
Code: Select all
<?php
   if (isset($_POST['submit']) && isset($_POST['Suchbegriff'])){
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','root','','Kontakte');
      echo 'Verbindung offen.<br />';
      $sql= @include(suche.php);
      $suchbegriff=$_POST['Suchbegriff'];
      $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            '<A href="details.php">details</A>');      
      }
      echo'SQL geschickt. <br/>';
      $db->close();
//       echo 'Verbindung zu. <br />';
//       // Datenbankverbindung wieder schließen
//       } catch (Exception $e) {
//       echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
//       }
      
   }
}
?>

sollte das eigendlich bis montag hinbekommen... verflixt das kann doch nicht so schwer sein... bin etwas depremiert...umpf...

liebe grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 03. September 2006 16:04

Lass doch einfach den "seltsamen" include() bei "sql =" weg.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Fehler im sql Part

Postby cjanischek » 04. September 2006 13:13

habe auf deine Empfehlung hin das include beseitigt... aber scheinbar ist immer noch ein Fehler im SQL Skript ...zumindest meldet er :
Code: Select all
Parse error: syntax error, unexpected T_STRING in /srv/www/htdocs/sucheausgabe.php on line 22

der aktuelle Code der sucheaausgabe.php ist:
Code: Select all
<?php
   if (isset($_POST['submit']) && isset($_POST['Suchbegriff'])){
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','root','','Kontakte');
      echo 'Verbindung offen.<br />';
      $suchbegriff=$_POST['suchbegriff'];
      $sql =
     (SELECT * FROM Kontakte WHERE MATCH (kontaktEmail,anrede,kontaktName,kontaktVorname,kontaktTelefon,kontaktFax,kontaktMobil,kontaktStrasse,kontaktOrt,kontaktLand,kontaktTyp,kontaktUrl,zahlungsmittel,kreditfirma,kontaktcomment) AGAINST (".$suchbegriff."));   //hier muss der Fehler liegen
      echo 'erledigt.';
      
      $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            '<A href="details.php">details</A>');      
      }
      echo'SQL geschickt. <br/>';
      $db->close();
//       echo 'Verbindung zu. <br />';
//       // Datenbankverbindung wieder schließen
//       } catch (Exception $e) {
//       echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
//       }
      
   }
}
?>


hier noch das form:
Code: Select all
<FORM action="sucheausgabe.php" method="POST" target="_parent">
   Stichwort eingeben: <br><INPUT type="text" name="suchbegriff" size="50" maxlength="200">
   <INPUT type="submit" name="suche" value="suche" class="submit">
      
</FORM>


kann man eigentlich generell sagen welche Fehlerquellen hinter der exception "unexpected T_STRING" zu vermuten sind ?

liebe Grüße und dankeschön für deine Gedult

Tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 04. September 2006 13:53

$sql =
(SELECT * FROM Kontakte WHERE MATCH (kontaktEmail, anrede, kontaktName, kontaktVorname, kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse, kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl, zahlungsmittel, kreditfirma, kontaktcomment) AGAINST (".$suchbegriff.")); //hier muss der Fehler liegen

Ein String, wie du ihn hier in die Variable $sql packen willst, wird immer mit Quotes eingeschlossen und nicht mit Klammern:
Code: Select all
$sql = "
    SELECT *
    FROM Kontakte
    WHERE MATCH(
        kontaktEmail, anrede, kontaktName, kontaktVorname,
        kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse,
        kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl,
        zahlungsmittel, kreditfirma, kontaktcomment
    ) AGAINST (
        '{$suchbegriff}'
    )
";


BTW:
Ab und zu ein Leerzeichen nach einem Satzzeichen, wie ein Komma, einzufügen, hat noch niemand geschadet. Auch nicht innerhalb von Programmcode. ;-)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Fehler bei der Übergabe der Formularvariablen an SELECT...

Postby cjanischek » 04. September 2006 15:03

lieben dank erst mal.
zumindest bekomme ich jetzt keine fehlermeldung mehr (weder im browser noch auf der konsole)...er zeigt jetzt auch den TabellenKopf an...allerdings kein ergebnis...umpf... ach wäre das schön wenn ich hier mal zu pötte kommen würde.

Der Fehler scheint bei der Übergabe der Variablen $suchbegriff zu liegen,... denn wenn ich in der sql abfrage einen suchbegriff eingebe funktioniert alles...

liebe Grüße tine

aktueller code sucheausgabe.php
Code: Select all
<?php
   if (isset($_POST['submit']) && isset($_POST['Suchbegriff'])){
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','root','','Kontakte');
      echo 'Verbindung offen.<br />';
      $suchbegriff=$_POST['suchbegriff'];
      $sql = "
      SELECT *
      FROM Kontakte
      WHERE MATCH(
         kontaktEmail, anrede, kontaktName, kontaktVorname,
         kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse,
         kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl,
         zahlungsmittel, kreditfirma, kontaktcomment
      ) AGAINST (
         '{$suchbegriff}'
      )
      ";   
      echo 'erledigt.';// hier kommt er nicht an... zumindest wird die meldung nicht angezeigt. wobei ...der tabellen kopf allerdings schon... ähhh???
   
      $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            '<A href="details.php">details</A>');      
      }
      echo'SQL geschickt. <br/>';
      $db->close();
      echo 'Verbindung zu. <br />';
      // Datenbankverbindung wieder schließen
      } catch (Exception $e) {
      echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
      }
      
   }

?>

aktueller code für Form:
Code: Select all
<FORM action="sucheausgabe.php" method="POST" target="_parent">
   Stichwort eingeben: <br><INPUT type="text" name="suchbegriff" size="50" maxlength="200">
   <INPUT type="submit" name="suche" value="suche" class="submit">
      
</FORM>


die aussagen zur einbettung der variablen sind im netz sind so vielfältig das ich mich hier dumm und dusselig probiere...ein Helferlein wäre superfenomenal..

liebe Grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 04. September 2006 15:37

Der Fehler scheint bei der Übergabe der Variablen $suchbegriff zu liegen,...
Code: Select all
if (isset($_POST['submit']) && isset($_POST['Suchbegriff'])){
...
$sql = "
...
      ) AGAINST (
         '{$suchbegriff}'
...

Na wenn der Wert über "$_POST['Suchbegriff']" ins Script kommt, dann musst du auch "$_POST['Suchbegriff']" im Query benutzen.
--> Woher soll den PHP plötzlich die Variable "$suchbegriff" kennen?

die aussagen zur einbettung der variablen sind im netz sind so vielfältig das ich mich hier dumm und dusselig probiere

Falsch.
Es gibt genau 1 PHP-Manual, wo das für dich hier Wissenswerte über Variablen auf zwei Seiten genau und präzise beschrieben wird. Was das Benutzen von Variablen usw. in Strings angeht, gibt es eine weitere Seite.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

ier noch keine ausgabe

Postby cjanischek » 04. September 2006 19:14

lieben dank für deine hilfe...solangsam ist das ziemlich mühsam...

habe den falschen variablen Namen verbessert :

Code: Select all
isset($_POST['suchbegriff']


fehlermeldungen:
sind gleich null

siehst du da noch ne fehlerquelle... verzweifel hier nen bissl... muss immernoch an der variablenübergabe liegen.

meine recherchengalten einer funktionierenden volltextsuche (php/sql) und die habe ich nicht gefunden, zum vergleichen wäre sowas super....


sonst sind alle code elemente gleich geblieben

wäre über ein kleines helferlein sehr dankbar

liebe Grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 04. September 2006 19:19

habe den falschen variablen Namen verbessert :
Code: Select all
isset($_POST['suchbegriff']

Abgesehen von der Gross/Kleinschreibung beim "if" (hatte ich gar nicht gesehen), hast du jetzt auch im Query die richtige Variable benutzt?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

jup query geandert

Postby cjanischek » 04. September 2006 19:52

vielen dank für deine gedult...ja die query ist geandert , war ja schon richtig gesetzt...

was meinst du mit klein/Großschreibung bei if klein oder Groß... du hast es wie ich klein geschrieben...

aktueller code:
Code: Select all
<?php
   if (isset($_POST['submit']) && isset($_POST['suchbegriff'])){
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','root','','Kontakte');
      echo 'Verbindung offen.<br />';
      $suchbegriff=$_POST['suchbegriff'];
      $sql = "
      SELECT *
      FROM Kontakte
      WHERE MATCH(
         kontaktEmail, anrede, kontaktName, kontaktVorname,
         kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse,
         kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl,
         zahlungsmittel, kreditfirma, kontaktcomment
      ) AGAINST (
         '{$suchbegriff}'
      )
      ";   
      echo 'erledigt.';// kommt immer noch nicht bisher
   
      $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            '<A href="details.php">details</A>');     
      }
      echo'SQL geschickt. <br/>';
      $db->close();
      echo 'Verbindung zu. <br />';
      // Datenbankverbindung wieder schließen
      } catch (Exception $e) {
      echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
      }
     
   }

?>


das aktuelle formular:

Code: Select all
<FORM action="sucheausgabe.php" method="POST" target="_parent">
   Stichwort eingeben: <br><INPUT type="text" name="suchbegriff" size="50" maxlength="200">
   <INPUT type="submit" name="suche" value="suche" class="submit">
      
</FORM>


liebe grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 04. September 2006 20:07

was meinst du mit klein/Großschreibung bei if klein oder Groß... du hast es wie ich klein geschrieben...

Falsch:
Du hattest erst immer $_POST['Suchbegriff'] und ich hatte das auch so übernommen. Erst in deinem letzten Post hast du doch den Fehler bemerkt das es $_POST['suchbegriff'] im isset() sein muss.

ja die query ist geandert , war ja schon richtig gesetzt...

2x falsch:
Wie schon geschrieben muss es im Query ($sql) auch $_POST['suchbegriff'] sein wie du es im if (isset(...)) benutzt und nicht $suchbegriff (da PHP $suchbegriff nicht kennt):
Code: Select all
if (isset($_POST['submit']) && isset($_POST['suchbegriff'])){
....
$sql = "
    SELECT *
    FROM Kontakte
    WHERE MATCH(
        kontaktEmail, anrede, kontaktName, kontaktVorname,
        kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse,
        kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl,
        zahlungsmittel, kreditfirma, kontaktcomment
    ) AGAINST (
        '{$_POST['suchbegriff']}'
    )
";
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

schrittweise..

Postby cjanischek » 04. September 2006 21:18

ich sehe schon wir nähern uns schrittweise... dankeschön ...habe die änderungen durchgeführt... keine veränderungen in der ausgabe...

aktueller formularcode:



Code: Select all
<?php
   if (isset($_POST['submit']) && isset($_POST['suchbegriff'])){
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','root','','Kontakte');
      echo 'Verbindung offen.<br />';
      $suchbegriff=$_POST['suchbegriff'];
      $sql = "
      SELECT *
      FROM Kontakte
      WHERE MATCH(
         kontaktEmail, anrede, kontaktName, kontaktVorname,
         kontaktTelefon, kontaktFax, kontaktMobil, kontaktStrasse,
         kontaktOrt, kontaktLand, kontaktTyp, kontaktUrl,
         zahlungsmittel, kreditfirma, kontaktcomment
      ) AGAINST (
         '{$_POST['suchbegriff']}'
      )";
   echo 'erledigt.';
   $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            '<A href="details.php">details</A>');     
      }
      echo'SQL geschickt. <br/>';
      $db->close();
      echo 'Verbindung zu. <br />';
      // Datenbankverbindung wieder schließen
      } catch (Exception $e) {
      echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
      }
     
   }

?>


aktueller formularcode unverändert:

Code: Select all
<FORM action="sucheausgabe.php" method="POST" target="_parent">
   Stichwort eingeben: <br><INPUT type="text" name="suchbegriff" size="50" maxlength="200">
   <INPUT type="submit" name="suche" value="suche" class="submit">
      
</FORM>


liebe grüße tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 04. September 2006 21:41

Schätzungsweise wird der Code nicht ausgeführt, da diese Bedingung nicht zutrifft:
Code: Select all
if (isset($_POST['submit']) && isset($_POST['suchbegriff'])){
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Next

Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 12 guests