php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 27-07-2009, 23:00
dieter_koen
 Registrierter Benutzer
Links : Onlinestatus : dieter_koen ist offline
Registriert seit: Jul 2009
Beiträge: 8
dieter_koen befindet sich auf einem aufstrebenden Ast
Standard Hilfe bei Suchscript in MySQL-DB

Einen wunderschönen guten Abend,


Ich habe vor, bzw. Script steht schon, eine Suche via Formular durchzuführen, die anschließend die Daten mit der MySQL-Datenbank abgleicht und sie in einer Tabelle ausgibt.

Das Formular besteht aus 5 Feldern, die alle in der Suche berücksichtigt werden sollen. Ist ein Feld leer, sollen alle Werte der Spalte in der DB ausgegeben werden.

Allgemein sieht die Abfrage ja dann so aus:

PHP-Code:
$sql "SELECT * FROM 'table' WHERE objekt1 = 'eingabe_suche1' AND WHERE objekt2 = 'eingabe_suche2' [...]"
]Das Problem besteht ja nun darin, dass sobald ein Feld in dem Formular nicht gesetzt wurde (soll auch keine Pflicht sein), der String in der Where-Clause (objekt1 = " " ) leer ist und schließlich keinen "leeren" Eintrag in der DB findet und es nicht zur Ausgabe kommt.
Ich weiß leider nicht, wie ich dieses Problem umgehen kann oder ob es irgendetwas Ähnliches wie das * beim SELECT auch für die WHERE x = - Anweisung gibt.

Ich hoffe ihr könnt mir irgendwie helfen, Google konnte es nicht (oder ich bin zu dumm zum Suchen).
Und ja, dass Script soll auf dem Formular basieren!

Vielen Dank schon mal für jede Antwort!

Mit freundlichen Grüßen

der Dieter

Geändert von dieter_koen (28-07-2009 um 00:27 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 27-07-2009, 23:31
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo Dieter,

du kannst doch PHP prüfen lassen, ob der Wert leer ist und nur wenn nicht, die Bedingung in die where-Klausel übernehmen, also den String $sql konditional füllen, statt fest vorzugeben.

Edit: das Schlüsselwort "WHERE" kommt dabei nur einmal vor, nicht nach jedem "AND".

Gruß,

Anja
Mit Zitat antworten
  #3 (permalink)  
Alt 28-07-2009, 00:23
dieter_koen
 Registrierter Benutzer
Links : Onlinestatus : dieter_koen ist offline
Registriert seit: Jul 2009
Beiträge: 8
dieter_koen befindet sich auf einem aufstrebenden Ast
Standard

Erstmal danke für deine Antwort AmicaNoctis.
Die gleiche Überlegung wie du hatte ich auch schon, doch dort tritt ein weiteres Problem auf:

Wenn ich die Variablen wie folgt vergebe und die $sql konditionell fülle, sehe das ja beispielsweise so aus[stark vereinfacht]:
PHP-Code:
if isset ($eingabe) {
  
$where_clause_kon "WHERE objekt = eingabe1_suche AND"
}
//[...] (für jedes Statement durch) 
Dann kommt die
PHP-Code:
$sql "SELECT * FROM <table> $where_clause_kon [...]" 
Nun müsste ich irgendwie noch die AND 's setzen.
Würde jetzt z.B. nur das erste Feld ausgefüllt, würde die $sql ausgeschrieben so aussehen:

PHP-Code:
$sql "SELECT * FROM <table> WHERE objekt = eingabe1_suche AND" 
Dies würde einen Fehler hervorrufen, da AND nicht alleine stehen darf.
Ich müsste also immer vorraussetzen, dass immer ganz bestimmte Felder ausgefüllt werden, was aber nicht Sinn der Sache ist.

Ich hoffe ich habe dich nicht falsch verstanden , wenn doch dann versuch es mir bitte zu erklären
Auf jeden Fall Dankeschön

Mit freundlichen Grüßen

der Dieter

Geändert von dieter_koen (28-07-2009 um 00:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 28-07-2009, 00:34
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Das lässt sich recht einfach beheben, indem du

a) nach der schleife "1=1" einfügst, um nach dem letzten and eine Tautologie einzufügen, die das Statement semantisch nicht verändert.

b) die Bedingungen in einem Array sammelst und dieses nach der Schleife mit " and " implodierst:
PHP-Code:
$sql .= implode(" and "$einzelbedingungen); 
Gruß,

Anja
Mit Zitat antworten
  #5 (permalink)  
Alt 28-07-2009, 10:05
Wurzel
 Master
Links : Onlinestatus : Wurzel ist offline
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
Wurzel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

du solltest bei der prüfung nicht mit isset() sondern mit empty() und/oder einen weiteren logik arbeiten. formulardaten sind immer "set", wenn die felder einen namen haben.

mysql_real_escape_string ist auch nie verkehrt ;-)
__________________
Kissolino.com
Mit Zitat antworten
  #6 (permalink)  
Alt 28-07-2009, 10:18
dieter_koen
 Registrierter Benutzer
Links : Onlinestatus : dieter_koen ist offline
Registriert seit: Jul 2009
Beiträge: 8
dieter_koen befindet sich auf einem aufstrebenden Ast
Standard

Hey,

danke nochmals für die Antworten
Mit empty ist es wirklich besser, dann kann man sich das "blöde" && != " " sparen ;D, hatte ich ganz vergessen

Mit dem Implodieren habe ich es versucht, jedoch gelingt es mir nicht so richtig.
Ich weiß nicht, wie ich die Bedingung am besten setze.
Folglich kommt auch der Fehler:
[...] the right syntax to use near 'AND AND AND AND AND' at line 1

Weil er ja wieder, sobald die Felder leer sind, eben 5x hintereinander die AND 's schreibt.
Mein Code sieht also so aus:
PHP-Code:
$array = array($suche1$suche2$suche3$suche4$suche5$suche6);
$mysuche .= implode(" AND " $array);
$sql = ("SELECT * from anmeldungen WHERE $mysuche"); 
Vielen Dank schon einmal im Vorraus.


MfG

Geändert von dieter_koen (28-07-2009 um 10:20 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 28-07-2009, 11:23
dieter_koen
 Registrierter Benutzer
Links : Onlinestatus : dieter_koen ist offline
Registriert seit: Jul 2009
Beiträge: 8
dieter_koen befindet sich auf einem aufstrebenden Ast
Standard

Soo, also nochmals Vielen Dank für die Antworten, hat mir wirklich sehr geholfen.

Ich habe es jetzt mit array_push gelöst, indem ich in jeder If-Abfrage das Array mit meinen Werten fülle.
Die SQL-Abfrage baue ich mit implode zusammen.
Falls jemand auch dieses Problem hat, hier der Code in vereinfacht:
PHP-Code:
$array = array();
//anstatt isset geht natürlich auch empty
if(isset($_POST['eingabe1']) && $_POST['eingabe1'] != "") {
  
$suche1 "<spaltenname> = '" "$_POST[eingabe1]'";
  
array_push($array$suche1); 
  } 
[...] 
//für jedes Formularfeld die Bedingungen durchgehen

//Teil der SQL-Abfrage aus Array zusammensetzen
$mysuche .= implode(" AND " $array);
//SQL-Abfrage durchführen
$sql = ("SELECT * from anmeldungen WHERE $mysuche");
[...] 
Daten und Array ausgeben

Klappt alles perfekt!

Vielen Dank nochmal!

Mit freundlichen Grüßen

Dieter.
Mit Zitat antworten
  #8 (permalink)  
Alt 28-07-2009, 11:43
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dieter_koen Beitrag anzeigen
Soo, also nochmals Vielen Dank für die Antworten, hat mir wirklich sehr geholfen.

Ich habe es jetzt mit array_push gelöst, indem ich in jeder If-Abfrage das Array mit meinen Werten fülle.
Wozu brauchst du array_push???

PHP-Code:
$where = array("1");
$where[] = "spalte1 = 'wert1'";
$where[] = "spalte2 = 'wert2'";

$sql "SELECT * FROM tabelle WHERE " implode(" AND "$where); 
Und du brauchst nicht für jedes Formularfeld ein eigenes if. Warum unnötige Tipparbeit machen, wenn das PHP für dich erledigen kann?

PHP-Code:
$suchfelder = array(
    
'feld1' => 'spalte1',
    
'feld2' => 'spalte2',
    
'feld3' => 'spalte3',
    
'feld4' => 'spalte4'
);

$where = array("1");

foreach (
$suchfelder as $feld => $spalte) {
    if (isset(
$_POST[$feld]) && $_POST[$feld] != '') {
        
$where[] = sprintf("`%s` = '%s'"$spaltemysql_real_escape_string($_POST[$feld]));
    }
}

$sql "SELECT * FROM tabelle WHERE " implode(" AND "$where); 

Geändert von h3ll (28-07-2009 um 11:48 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 01-08-2009, 13:05
piratos
 Guest
piratos
Beiträge: n/a
Standard

Ich hätte das so gelöst:
PHP-Code:
<?php
$array
=array();
$sql='';
foreach (array(
'spalte1','spalte2','spalte3') as $spalte)
 
$test=!empty($_POST[$spalte]) ?$array[]=$spalte."='".mysql_real_escape_string($_POST[$spalte])."'":'';
if (
count($array)>0)
  
$sql "SELECT * from anmeldungen WHERE ".implode(" AND " $array);
if (
$sql)
// Abfrage
else
// fehlermeldung
?>
Prüfung über empty ist besser da isset darauf reagiert ob die Variable überhaupt existiert und nicht darauf ob diese leer ist.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP MYSQL Suchscript worldwideweb12 Projekthilfe 0 12-05-2008 13:00
Brauche Hilfe bzgl. Umbau eines Gästebuchs: u.A. Suchscript einbauen dime Projekthilfe 1 16-08-2006 08:48
Suchscript php/mysql Spin PHP Developer Forum 3 29-06-2005 23:20
Hilfe!! Hab Probleme mit meinem Suchscript nussschale PHP Developer Forum 2 09-07-2003 19:17
benötige Hilfe beim Suchscript andyleery PHP Developer Forum 4 02-08-2002 23:09

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:31 Uhr.