php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.05.2008, 15:13  
Benutzer
 
Registriert seit: 25.05.2008
Beiträge: 50
binäri
Standard SuFu mit mehreren Eingabefeldern?

Hi
Ich versuche gerade eine kleine Suchfunktion zu schreiben.
Das Formular besteht aus 3 Eingabefeldern, je eines für eine entsprechende Spalte in der DB.

Doch da gibt es ein Problem. Die Suchfunktion soll auch laufen, wenn ein oder zwei Felder nicht ausgefüllt sind. Wie kann ich das realisieren? (und zwar möglichst geshickt und dennoch verständlich )

Ich habe 2 Ansätze gefunden:
1) Durch 6 if-Abfragen die Variablen ermitteln, die einen Wert haben und dann suchen. Das braucht aber jede Menge Code.
2) Leere Variablen mit einem unsinnigen Strng überschreiben, z.B. xyzxyz. So wird bei der Suche nach %$var% sicher nichts gefunden, wie erwünscht. Doch es gibt sicher noch was praktischereres, oder?
binäri ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.05.2008, 15:28  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo binäri,

ich würde das in einem SQL-Statement lösen, das die drei eingegebenen Suchbegriffe über die entsprechenden Spalten sucht. Noch einfacher ist es jedoch nur ein Suchfeld zu verwenden, dann ergibt das nur 3 OR im Statement und du solltest immer noch das finden, was du auch suchst. Für die Aufbereitung der Suche würde ich bestimmte Zeichen filtern und mehrere wörter nach leerzeichen trennen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 25.05.2008, 15:40  
Benutzer
 
Registriert seit: 25.05.2008
Beiträge: 50
binäri
Standard

Nur ein Suchfeld hat natürlich auch Nachteile. Zum einem soll der Autor eines Beitrages gesucht werden, außerdem soll man nach Beiträgen suchen, die vor einem eingegebenen Datum geschreiben wurden und das dritte Feld soll dann eine Volltextsuche mit OR und AND enthalten.
Es macht doch keinen Sinn, diese 3 Werte in ein Feld einzutragen

Wie würde denn das SQL Statement aussehen?
So doch sicher nicht, oder?
Code:
$sql="SELECT * FROM tabelle WHERE spalte1, spalte2, spalte3 LIKE % . $spalte1 . %, % . $spalte2 . %, % . $spalte3 . % ORDER BY id DESC";
$result=mysql_query($sql);
Immerhin wird hier nicht berücksichtigt, ob die Variablen leer sind und dann alle Einträge angezeigt werden würden.

Worauf ich hinaus will: Die leeren Variablen sollen einfach ignoriert werden.
binäri ist offline  
Alt 25.05.2008, 20:55  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
So doch sicher nicht, oder?
->
Code:
SELECT * FROM table where foo LIKE '%bar%' OR baz LIKE '%bla%' OR ...
Zitat:
Worauf ich hinaus will: Die leeren Variablen sollen einfach ignoriert werden.
Das meinte ich mit

Zitat:
Für die Aufbereitung der Suche würde ich bestimmte Zeichen filtern und mehrere wörter nach leerzeichen trennen.
Das musst du mit PHP entsprechend aufbereiten.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 27.05.2008, 09:01  
Erfahrener Benutzer
 
Registriert seit: 03.11.2004
Beiträge: 289
rbs_phoenix
rbs_phoenix eine Nachricht über ICQ schicken
Standard

kannst du nicht einfach 3 if-abfragen machen?? so in der art wie:
PHP-Code:
$sql "SELECT * FROM tabelle WHERE ";
$f 0;

if(
$textfeld1 != ""){
   
$sql .= "spalte1 LIKE %".$textfeld1."%";
   
$f=1;
}

if(
$textfeld2 != ""){
   if(
$f == 0$sql .= "spalte2 LIKE %".$textfeld2."%";
   else 
$sql .= " OR spalte2 LIKE %".$textfeld2."%";
   
$f=1;
}

if(
$textfeld3 != ""){
   if(
$f == 0$sql .= "spalte3 LIKE %".$textfeld3."%";
   else 
$sql .= " OR spalte3 LIKE %".$textfeld3."%";
   
$f=1;
}

$sql .= " ORDER BY id DESC"
if(
$f==1$result=mysql_fetch_array(mysql_query($sql));
else{
// Error bzw kein Feld ausgefüllt!

nicht getestet und auch bestimmt verbesserungswürdig aber so vom prinzip müsste das doch gehen.
__________________
Homepage: http://www.rbs-page.de
rbs_phoenix ist offline  
Alt 03.06.2008, 16:02  
Benutzer
 
Registriert seit: 25.05.2008
Beiträge: 50
binäri
Standard

@ rbs_phoenix
Dein Script muss einen logischen Fehler haben. Es funktioniert nur, wenn alle Felder ausgefüllt sind, was ja nicht erwünscht ist.

@dr.e.
Eine Trennung der Wörter nach Leerzeichen bekomm ich hin. Ich kann ebenso herausfinden, ob nur ein Leereichen eingegeben wurde usw. Trotzdem habe ich nach mehrmaligen probieren keinen Weg gefunden, das SELECT-Statement so durch if-Abfragen zusammenzubauen, dass eben nur die Spalten ausgewählt werden, zu denen etwas im Formular eingegeben wurde.
Mit einem OR als Verknüpfung wird leider kein brauchbares Ergebnis erzielt. Es werden einfach alle Ergebnisse angezeigt.
binäri ist offline  
Alt 03.06.2008, 22:56  
Erfahrener Benutzer
 
Registriert seit: 03.11.2004
Beiträge: 289
rbs_phoenix
rbs_phoenix eine Nachricht über ICQ schicken
Standard

soweit ich das beurteilen kann, is da keiner drinne. Meinetwegen ist dort textfeld 1 nicht gesetzt und 2 und 3 aber. dann überspringt er die erste if und geht zur zweiten ($f ist zu dem Zeitpunkt immer noch 0 und somit fängt er ohne das OR an)
__________________
Homepage: http://www.rbs-page.de
rbs_phoenix ist offline  
Alt 04.06.2008, 09:54  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von rbs_phoenix
soweit ich das beurteilen kann, is da keiner drinne.
Zitat:
Zitat von binäri
Dein Script muss einen logischen Fehler haben
Da ist nicht ein Fehler drin, sondern mehrere und einige Unschönheiten zusätzlich.
  1. Die Abfrage funktioniert nur wenn das erste Feld ausgefüllt ist, sonst lautet die Where-Klausel «WHERE OR ....»
  2. Die Strings in der Abfrage stehen nicht in Anführungszeichen
  3. Es wird kein mysql_error() abgefragt
  4. mysql_fetch_array() ohne Angabe des Ergebnistyps macht nur Sinn, wenn man die nummerischen und die assoziativen Indizes benötigt (was vermutlich selten der Fall ist)
Wenn man all das berücksichtigt, würde es dann etwa so aussehen:
PHP-Code:
<?php 
$where 
= array();
if(!empty(
$textfeld1){
   
$where[] = "spalte1 LIKE '%$textfeld1%'";
}

if(
$textfeld2 != ""){
   
$where[] = "spalte2 LIKE '%$textfeld2%'";
}

if(
$textfeld3 != ""){
   
$where[] = "spalte3 LIKE '%$textfeld3%'";
}

if (
count($where) > 0){
    
$sql "
        SELECT
            attr_1,
            attr_2,
            ...
        FROM 
            tabelle 
        WHERE " 
.
            
implode(' OR '$where) . "
        ORDER BY 
            id DESC"

    
$res mysql_query($sql) or exit(mysql_error());
    while(
$row mysql_fetch_assoc($res)){
    ...
    }
}
?>
__________________
Gruss
L
lazydog ist offline  
Alt 04.06.2008, 10:08  
Erfahrener Benutzer
 
Registriert seit: 03.11.2004
Beiträge: 289
rbs_phoenix
rbs_phoenix eine Nachricht über ICQ schicken
Standard

ja aber ich mein es 1. nur von der art her (hab ja gesagt, das es nich so schön ist, nur halt zum verständnis) und 2. ist kein "WHERE OR" möglich. er macht erst ein OR davor, wenn $f = 1 ist (was erst der Fall ist, wenn ein Statement schon vorhanden ist).

Aber deine Möglichkeit ist logischerweise schöner^^
__________________
Homepage: http://www.rbs-page.de
rbs_phoenix ist offline  
Alt 04.06.2008, 10:17  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von rbs_phoenix
ist kein "WHERE OR" möglich. er macht erst ein OR davor, wenn $f = 1 ist (was erst der Fall ist, wenn ein Statement schon vorhanden ist).
Sorry, da hast du natürlich recht, habe ich übersehen
__________________
Gruss
L
lazydog ist offline  
 


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
Array nach mehreren Feldern sortieren Marcel1 PHP Tipps 2008 4 04.06.2008 05:09
[MATCH...AGAINST] mit mehreren Tabellen und Datensätzen? becks123 Datenbanken 6 20.06.2007 12:17
if abfrage mit mehreren möglchkeiten kein elseif() PHP Tipps 2007 18 16.01.2007 15:16
Datei in mehreren Teilen uploaden und wieder zusammensetzen? nicobischof PHP Tipps 2006 6 08.08.2006 08:46
Verständnisfrage: Aufruf von mehreren Usern vegeta PHP Tipps 2006 2 02.06.2006 15:39
Linkliste mit mehreren Rubriken chr Datenbanken 4 02.03.2006 20:38
nicht formatierten Text in mehreren Spalten darstellen PHP-Fortgeschrittene 4 17.02.2006 10:55
abfrage von mehreren werten auf einmal faultier PHP Tipps 2005-2 5 23.08.2005 19:09
[Erledigt] MySQL Abfrage aus mehreren Tabellen Datenbanken 1 12.04.2005 17:53
GROUP BY mit mehreren Argumenten? suendesizer Datenbanken 3 18.03.2005 09:51
[Erledigt] Nach mehreren Variablen in DB suchen Datenbanken 5 28.01.2005 09:41
[Erledigt] div auf mehreren Seiten HTML, Usability und Barrierefreiheit 0 25.11.2004 19:10
PHP-Datei mit mehreren Parametern aufrufen HTML, Usability und Barrierefreiheit 2 15.11.2004 22:03
Suche in mehreren Feldern PHP Tipps 2004-2 1 08.11.2004 09:31
letztes Datum aus mehreren Tabellen wizzardxx PHP Tipps 2004 6 05.07.2004 23:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql suchfeld, formular mit leeren eingabefeldern

Alle Zeitangaben in WEZ +2. Es ist jetzt 19: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.