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 28-07-2009, 00: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 01:27 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 28-07-2009, 00: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, 01: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 01:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 28-07-2009, 01: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, 11: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, 11: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 11:20 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 28-07-2009, 12: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, 12:43
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.608
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 12:48 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 01-08-2009, 14: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 14:00
Brauche Hilfe bzgl. Umbau eines Gästebuchs: u.A. Suchscript einbauen dime Projekthilfe 1 16-08-2006 09:48
Suchscript php/mysql Spin PHP Developer Forum 3 30-06-2005 00:20
Hilfe!! Hab Probleme mit meinem Suchscript nussschale PHP Developer Forum 2 09-07-2003 20:17
benötige Hilfe beim Suchscript andyleery PHP Developer Forum 4 03-08-2002 00: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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

ModuleStudio ansehen ModuleStudio

Modellgetriebene Entwicklung von Erweiterungen für das Open Source Framework Zikula.

15.01.2019 Guite | Kategorie: PHP ENTWICKLUNGSUMGEBUNG
FAQ Script PHP ansehen FAQ Script PHP

FAQ Script PHP is a simple knowledgebase script and you could use it as a Frequently Asked Question section on your website. It is written in PHP and MySQL.

14.01.2019 nevenov | Kategorie: PHP/ FAQ
Admidio Mitgliederverwaltung

Admidio ist eine kostenlose Online-Mitgliederverwaltung, die für Vereine, Gruppen und Organisationen optimiert ist. Sie besteht neben der Mitgliederverwaltung aus einer Vielzahl an Modulen (Foto-, Download-, Terminverwaltung), die in eine neue oder besteh

08.01.2019 webmaster52@ | Kategorie: PHP/ Groupware
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:52 Uhr.