php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.03.2005, 14:45  
Gast
 
Beiträge: n/a
Standard Problem bei mehreren Suchbegriffen in meiner Suchmaschine

Hallo zusammen,

ich lerne seit einer Weile PHP (naja, ich versuch es) und baue an einer Bilddatenbank mit Suchmaschine. Soweit klappt auch schon alles ganz gut, nur an einem Punkt verzweifle ich seit ein paar Tagen:

Ich kann mit meinem Suchformular z.B. nach (Bild-) Titel, Kategorie usw suchen, und bekomme dann auch entsprechend richtige Ergebnisse angezeigt. Nur bei dem Feld mit Suchworten kann ich maximal einen Begriff angeben, sobald ich 2 oder mehr Begriffe suchen lassen will bekomme ich eine Fehlermeldung.

Folgendes Scriptfragment zur Suchanfrage:
PHP-Code:
<?php
if($_POST[sent]==1// WENN DAS FORMULAR ABGESCHICKT WURDE...
        
{
        
        
// DAMIT LEERE FELDER IGNORIERT WERDEN WERDEN DIESE MIT abc123 AUFGEFÜLLT (EINSTWEILIGE LÖSUNG)
        
$sw1 = ($_POST[suchwort]=="") ? "abc123" $_POST[suchwort];
        
$sw2 = ($_POST[titel]=="") ? "abc123" $_POST[titel];
        
$sw3 = ($_POST[dvd]=="") ? "abc123" $_POST[dvd];
        
$sw4 = ($_POST[kategorie]=="") ? "abc123" $_POST[kategorie];
        
        
// ...VERBINDE ZUR DB UND SUCHE NACH DEN ANGABEN AUS DEM POST-FORMULAR...
        
$tabellenname="pix";
        
$sql "SELECT ID, datum, dvd, kategorie, titel, datei, suchwort FROM ".$tabellenname." WHERE suchwort LIKE '%".$sw1."%' OR titel LIKE '%".$sw2."%' OR dvd LIKE '%".$sw3."%' OR kategorie LIKE '%".$sw4."%';";
        
$linkmysql_connect("localhost""xxx""xxx");
        
mysql_select_db("vault_pix"$link);
        
$result=mysql_query($sql$link);
?>
Die IF-Abfrage die zur Fehlermeldung führt (keine Ergebnisse gefunden):
PHP-Code:
<?php
if(($_POST[sent]==1) AND (!$ergebnis)) // FORMULAR WURDE GESENDET ABER KEINE SUCHERGEBNISSE GEFUNDEN
        
{
         
//hier dann eben der Text zur Fehlermeldung
         
}
?>
Wenn ich also einen Suchbegriff habe, dann geht alles wunderbar, ab 2 Begriffen kommts zur Fehlermeldung.
Wer kann helfen, ich steh wie gesagt seit ein paar Tagen auf dem Schlauch, wurde auch aus dem Tutorial hier nicht so richtig schlau (fehlt halt noch einw enig an PHP Erfahrung)

Danke für Eure Zeit das zu lesen und sich vlt damit zu befassen (uund mir zu helfen)

PS: Ich weiss dass die Lösung mit den leergelassenen Feldern sehr holprig ist. Soll auch nur eine vorübergehende Lösung sein bis ich die ganze Struktur der If-Abfragen dahingehend ausgetüftelt habe.

Edit: Die Suchbegriffe in der Spalte "suchwort" sind beim Anlegen der Daten nur mit Leerzeichen getrennt, also z.B. "horror artwork 3D".
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.03.2005, 16:52  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

1. immer error_reporting(E_ALL); in der ersten zeile eines scripts oder am einfachsten in der config die überall includet wird.
2. immer mysql_error() verwenden.
-> $result=mysql_query($sql, $link) or die (mysql_error());
3.
wenn ein query nicht funktioniert hat das einen grund, sprich ein fehler der vorhanden ist, den findest du mit mysql_error() heraus.
4. lager dein mysql_connect aus, dann kannst du es in jeder datei nutzen.
5. querys einrücken, dann sagt dir php sogar in welcher zeile (des querys) der fehler ist
z.b. so:
PHP-Code:
<?php
        $sql 
"
SELECT
    ID, datum, dvd, kategorie, titel, datei, suchwort
FROM 
    "
.$tabellenname.
WHERE 
    suchwort LIKE '%"
.$sw1."%' OR 
    titel LIKE '%"
.$sw2."%' OR 
    dvd LIKE '%"
.$sw3."%' OR 
    kategorie LIKE '%"
.$sw4."%';
"
;
?>
6. mal ein kleiner ansatz wie man sowas löst:
dein anfrage-query (was du über das formular bekommst) mittels explode (' ',$var); // explodet an jeder leer-stelle.
in die einzelnen teile teilen, dann diesen teil des querys:
Code:
    suchwort LIKE '%".$sw1."%' OR 
    titel LIKE '%".$sw2."%' OR 
    dvd LIKE '%".$sw3."%' OR 
    kategorie LIKE '%".$sw4."%';
mittels einer foreach-schleife, für jeden teil des arrays an dein query anfügen, jeweils das AND bzw OR je nach wunsch zwischen den teilen nicht vergessen, dann richtig um die einzelnen teile vieleicht klammern setzen und fertig ist die suche. :P
robo47 ist offline  
Alt 21.03.2005, 20:41  
Gast
 
Beiträge: n/a
Standard

Danke Robo, probier ich morgen gleich aus!
 
Alt 29.03.2005, 09:33  
Gast
 
Beiträge: n/a
Standard

Ich weiss der Thread ist nun schon ein wenig älter, aber ich dachte vielleicht interessiert ja den einen oder anderen die -evtl immer noch etwas holprige?- Lösung:

PHP-Code:
<?php
// HIERMIT WERDEN MEHRERE SUCHWORTE IN DER FORMULAREINGABE MÖGLICH
        
$swneu "";
        
$swform $_POST['suchwort'];
        
$swexplo explode" "$swform );
        foreach( 
$swexplo as $element )
          {
          
$swneu $swneu."suchwort LIKE '%".$element."%' OR ";
          }
        
$suchstr $swneu;
        
        
// DAMIT LEERE FELDER IGNORIERT WERDEN WERDEN DIESE MIT abc123 AUFGEFÜLLT (EINSTWEILIGE LÖSUNG)
        
$sw1 = ($suchstr=="") ? "abc123" $suchstr;
        
$sw2 = ($_POST['titel']=="") ? "abc123" $_POST['titel'];
        
$sw3 = ($_POST['dvd']=="") ? "abc123" $_POST['dvd'];
        
$sw4 = ($_POST['kategorie']=="") ? "abc123" $_POST['kategorie'];
        
        
// SUCHE IN DER DB NACH DEN ANGABEN AUS DEM POST-FORMULAR...
        
$tabellenname="pix";
        
$sql "
          SELECT
              ID, datum, dvd, kategorie, titel, datei, suchwort
          FROM
              "
.$tabellenname."
          WHERE "
.$sw1." titel LIKE '%".$sw2."%' OR dvd LIKE '%".$sw3."%' OR kategorie LIKE '%".$sw4."%';";
?>
Jetzt klappt es so wie ich's geplant hatte, man kann sowohl mehrere Suchbegriffe im Formularfeld eingeben, kann mit Radiobuttons Kategorien wählen, und noch andere Suchkriterien synchron dazu anwenden.

Und schliessen kann man den Thread dann wohl auch Danke nochmal für die Hilfe!
 
Alt 29.03.2005, 09:51  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Noch etwas einfacher:
PHP-Code:
<?php
     $swneu 
= array();
     
$swexplo explode" "$_POST['suchwort'] );
     foreach( 
$swexplo as $element )
     {
       
$swneu[] = "suchwort LIKE '%$element%'";
     }
     if (!empty(
$_POST['titel']){
            
$swneu[] = "titel like '%" $_POST['titel'] . "%'";
        }
     if (!empty(
$_POST['dvd']){
            
$swneu[] = "dvd like '%" $_POST['dvd'] . "%'";
        }
     if (!empty(
$_POST['kategorie']){
            
$swneu[] = "kategorie like '%" $_POST['kategorie'] . "%'";
        }
        
$where implode(' OR '$swneu);

     
// SUCHE IN DER DB NACH DEN ANGABEN AUS DEM POST-FORMULAR...
     
$tabellenname="pix";
     
$sql "
       SELECT
           ID, datum, dvd, kategorie, titel, datei, suchwort
       FROM
           $tabellenname
       WHERE
          $where"
;
?>
__________________
Gruss
L
lazydog ist offline  
Alt 29.03.2005, 11:00  
Gast
 
Beiträge: n/a
Standard

Hm, hast ein paar Klammern zu schliessen vergessen, aber das ist mal wirklich hübsch Danke sehr!

Mit den Klammern:
PHP-Code:
<?php
$swneu 
= array(); 
        
$swexplo explode" "$_POST['suchwort'] ); 
        foreach( 
$swexplo as $element 
          { 
          
$swneu[] = "suchwort LIKE '%$element%'"
          } 
        if (!empty(
$_POST['titel']))
          { 
          
$swneu[] = "titel like '%" $_POST['titel'] . "%'"
          } 
        if (!empty(
$_POST['dvd']))
          { 
          
$swneu[] = "dvd like '%" $_POST['dvd'] . "%'"
          } 
        if (!empty(
$_POST['kategorie']))
          { 
          
$swneu[] = "kategorie like '%" $_POST['kategorie'] . "%'"
          } 
        
$where implode(' OR '$swneu); 
?>
Jetzt hab ich grad noch bemerkt dass wenn ich nur eine Kategorie anzeigen lassen will (als Beispiel "Foto"), dann wirft er mir den Inhalt der kompletten DB hin, also auch die anderen Kategorien. Dasselbe passiert wenn ich nur einen Bildtitel angebe, auch da spuckt er die komplette DB aus.
Beim Suchformular werden Kategorien mit Radiobuttons angegeben... hab wohl irgendwas übersehen aber komm nicht so recht drauf. Kann da nochmal jemand helfen, bitte? *Haare rauf*
 
Alt 29.03.2005, 11:09  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Lass dir mal die übergebenen Werte anzeigen, oder gib mal die fertige Abfrage mit
PHP-Code:
<?php
echo "$sql
"
;
?>
aus
__________________
Gruss
L
lazydog ist offline  
Alt 29.03.2005, 11:20  
Gast
 
Beiträge: n/a
Standard

Hmm, also bei
PHP-Code:
<?php
echo "$sql
"

?>
gibt er folgendes aus:
Code:
SELECT ID, datum, dvd, kategorie, titel, datei, suchwort FROM pix WHERE suchwort LIKE '%%' OR kategorie like '%Logo%'
Ich denke mal das "LIKE" bei der Kategorie ist zu unscharf, sollte ja eine genaue Abfrage/Angabe sein (weil die Kategorien ja vorgegeben sind).
Wenn ich die entsprechende Zeile aber in
PHP-Code:
<?php
$swneu
[] = "kategorie = '" $_POST['kategorie'] . "'";  // dachte mit "=" wird eine exakte Übereinstimmung erwartet
?>
ändere, passiert auch dasselbe und ich bekomme den kompletten DB-Inhalt gezeigt. Dasselbe ist bei Verwendung von "IS" anstelle von "LIKE"... bin jetzt doch ein wenig verwirrt (oder liegts am bunten Ostertreiben? ).
 
Alt 29.03.2005, 12:51  
Gast
 
Beiträge: n/a
Standard

Manchmal steckt man im eigenen Script so tief drin, dass man nix mehr sieht

Die Lösungs des Problems lag einfach darin dass die Abfrage nach dem Suchwort nicht in eine IF-Abfrage gebunden war. Wenn der Code so geschrieben ist:
PHP-Code:
<?php
$swneu 
= array();
// ohne dieses IF funkts nicht so recht weil er dann den ganzen DB Inhalt angibt (weil ja keine Unterscheidung da ist ob beim Suchwort überhaupt eine Angabe gemacht wurde

        
if (!empty($_POST['suchwort']))           {
          
$swexplo explode" "$_POST['suchwort'] ); 
          foreach( 
$swexplo as $element 
            { 
            
$swneu[] = "suchwort LIKE '%$element%'"
            }
          } 
        if (!empty(
$_POST['titel']))
          { 
          
$swneu[] = "titel LIKE '%" $_POST['titel'] . "%'"
          } 
        if (!empty(
$_POST['dvd']))
          { 
          
$swneu[] = "dvd LIKE '%" $_POST['dvd'] . "%'"
          } 
        if (!empty(
$_POST['kategorie']))
          { 
          
$swneu[] = "kategorie = '" $_POST['kategorie'] . "'"
          } 
        
$where implode(' OR '$swneu); 

        
// SUCHE IN DER DB NACH DEN ANGABEN AUS DEM POST-FORMULAR... 
        
$tabellenname="pix"
        
$sql 
          SELECT 
              ID, datum, dvd, kategorie, titel, datei, suchwort 
          FROM 
              $tabellenname 
          WHERE 
              $where"
;
?>
dann klappt es wieder prima. Jetzt kann man egal welches Suchkriterium angeben und er findet exakt die entsprechenden Einträge!
Vielen Dank Robo für's in die richtige Richtung schubbsen und Lazydog für den Code (so kurz wie er jetzt ist gefällt er mir gut ), klappt jetzt wunderbar.

Auf zum nächsten Teil :wink:
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Session Problem mit mehreren Seiten DJmension PHP Tipps 2008 1 08.05.2008 19:33
Timestamp problem phrain PHP Tipps 2008 2 04.04.2008 09:41
MATCH .... AGAINST ... Problem Denise Datenbanken 4 21.03.2007 20:05
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Delete aus mehreren Tabellen - Problem Datenbanken 4 16.09.2005 15:24
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Cookie / localhost / Problem gelöst PHP-Fortgeschrittene 11 02.11.2004 22:41
Problem mit Sessions in mehreren Frames Chr!s PHP Tipps 2004 10 30.10.2004 18:52
benötige suchmaschine Beitragsarchiv 3 26.10.2004 00:35
Suche mit mehreren Suchbegriffen PHP Tipps 2004 10 18.08.2004 14:04
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
Problem beim Upload mehrerer Dateien per Script PHP Tipps 2004 1 04.08.2004 16:26

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
bildtitel für suchmaschinen php, php suche nach mehreren suchworten, suchmaschine mit sql datenbank automatisch

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:23 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.