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 Thema bewerten
  #31 (permalink)  
Alt 11-04-2013, 19:49
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ich1d3 Beitrag anzeigen
Auch konsequent umgesetzt:
PHP-Code:
if (isset($_POST["soziales"]) and !empty($_POST["soziales"])) {

        
$x trim($_POST["soziales"]);
        
$x preg_replace("/[^0-9]/"""$x); 
        
"SELECT * FROM test WHERE soziales='".$x."'";
    }

    if (
$sql != false and $abf != false) {

        if (
$result mysqli_query($sql$abf)) {
...
... 
erhalte ich zwar keine Fehlermeldung, aber auch kein gewünschtes sortiertes Ergebnis.
Und dabei vergessen den Wert "SELECT * FROM test WHERE soziales='".$x."'"; der Variablen $abf zuzuweisen?

PHP-Code:
$abf "SELECT * FROM test WHERE soziales='".$x."'"
Habe Deine Mail beantwortet, in der steht auch noch etwas zum Thema.
Mit Zitat antworten
  #32 (permalink)  
Alt 11-04-2013, 20:58
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Es geht nur ums Verständnis für die Sprache, warum, weshalb, wieso.

Beispiel:

PHP-Code:
if (isset($_POST["soziales"]) and !empty($_POST["soziales"])) {

    
$soz trim($_POST["soziales"]);
    
$soz preg_replace("/[^0-9]/"""$soz);
    
$abf "SELECT * FROM test WHERE soziales='".$soz."'";

Mit Kommentaren:

PHP-Code:
/*
 Erste Zeile: 
 Frage ((wurde Post mit dem Parameter "soziales" übermittelt,
 befindet sich dieser als Schlüssel im Array von $_POST) 
 und (wurde dem Schlüssel "soziales" im $_POST-Array ein Wert zugeordnet?))
 Falls alles zutreffend, dann führe Code in Klammer aus.
*/
if (isset($_POST["soziales"]) and !empty($_POST["soziales"])) {

/*
 Zweite Zeile:
 Entferne eventuell vorhandene Leerzeichen am Anfang und Ende von "soziales" und 
 speichere den Wert von "soziales" in der Variablen $soz.
*/
    
$soz trim($_POST["soziales"]);
/*
 Dritte Zeile:
 Entferne alle Zeichen aus dem in $soz gespeicherten Wert, 
 welche keiner Ziffer entsprechen. 
*/        
    
$soz preg_replace("/[^0-9]/"""$soz);
/*
 Vierte Zeile:
 Füge den geprüften und gegebenenfalls bereinigten Wert von $soz der Abfrage hinzu
 und speichere die Abfrage in $abf. 
*/        
    
$abf "SELECT * FROM test WHERE soziales='".$soz."'";

Mit Zitat antworten
  #33 (permalink)  
Alt 11-04-2013, 21:45
ich1d3
 Registrierter Benutzer
Links : Onlinestatus : ich1d3 ist offline
Registriert seit: Mar 2013
Beiträge: 25
ich1d3 befindet sich auf einem aufstrebenden Ast
Standard Suche mit Eingabefeldern

Wie würde denn das aussehen, wenn ich die vorgeschlagene Lösung mit and und or einbauen würde - siehe oben?

PHP-Code:
"SELECT * FROM test WHERE ort='".$ort."' AND plz='".$plz."'";
"SELECT * FROM test WHERE ort='".$ort."' OR plz='".$plz."'"
Wie kommt das in die bisherigen Abfragen
PHP-Code:
if (isset($_POST["ort"]) and !empty($_POST["ort"])) {

        
$ort trim($_POST["ort"]);
        
$ort preg_replace("/[^a-z\s-]/i"""$ort);
        
$abf "SELECT * FROM test WHERE ort='".$ort."'";
    }
    
    if (isset(
$_POST["plz"]) and !empty($_POST["plz"])) {

        
$plz trim($_POST["plz"]);
        
$plz preg_replace("/[^0-9]/i"""$plz );
        
$abf "SELECT * FROM test WHERE plz='".$plz."'";
    }

     if (isset(
$_POST["soziales"]) and !empty($_POST["soziales"])) {
        
$x trim($_POST["soziales"]);
        
$x preg_replace("/[^0-9]/"""$x); 
        
"SELECT * FROM test WHERE soziales='".$x."'";
    } 
bzw. wie kann ich das ersetzen? Habe leider keinen richtigen Plan. Vielleicht komme ich damit der Lösung etwas näher.
Mit Zitat antworten
  #34 (permalink)  
Alt 11-04-2013, 22:09
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Ja, dazu müsstest Du aber auch wissen, was mit OR und was mit AND abgefragt werden soll oder alles nur mit OR kombinieren. Nur abgefragt und geprüft was übergeben wurde, sollte auch weiterhin werden.
Mit Zitat antworten
  #35 (permalink)  
Alt 11-04-2013, 22:20
ich1d3
 Registrierter Benutzer
Links : Onlinestatus : ich1d3 ist offline
Registriert seit: Mar 2013
Beiträge: 25
ich1d3 befindet sich auf einem aufstrebenden Ast
Standard Suche mit Eingabefeldern

Mit den Eintragungen jetzt funktioniert es, wenn man im letzten Feld eine 1 eingibt.
PHP-Code:
if (isset($_POST["ort"]) and !empty($_POST["ort"])) {

        
$ort trim($_POST["ort"]);
        
$ort preg_replace("/[^a-z\s-]/i"""$ort);
        
$abf "SELECT * FROM test WHERE ort='".$ort."'";
    }
    
    if (isset(
$_POST["plz"]) and !empty($_POST["plz"])) {

        
$plz trim($_POST["plz"]);
        
$plz preg_replace("/[^0-9]/i"""$plz );
        
$abf "SELECT * FROM test WHERE plz='".$plz."'";
    }

  if (isset(
$_POST["soziales"]) and !empty($_POST["soziales"])) {

        
$soziales trim($_POST["soziales"]);
        
$soziales preg_replace("/[^0-1]/"""$soziales );
        
$abf "SELECT * FROM test WHERE soziales='".$soziales."'";
    } 
Kleine Mängel jetzt noch im Gegensatz zu bisher:

Gebe ich Im Feld ort=Weimar ein und soziales=1 erhalte ich nicht nur Ergebnisse von Weimar, sondern ungewollt auch von Berlin, Erfurt, Jena usw., allerdings jetzt richtig alle mit sozial.

Und wie geht die angebotene obige Lösung mit „and“ und „or“? Wie kann ich das in das Script einbauen? Vielleicht die noch bessere Lösung?
In meiner wenigen Freizeit bin ich schon fleißig dran! ;-)
Mit Zitat antworten
  #36 (permalink)  
Alt 11-04-2013, 22:39
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Du müsstest erst einmal einen Plan machen, wenn das noch viel länger wird, könnte man das bisherige Listing lieber noch einmal umschreiben. Könnte mir das zum Beispiel so vorstellen, dass man $abf da nicht mehr mit hinein nimmt, sondern nur noch eine Variable für true und false und je nachdem, welche true und welche false liefern, dann erst dem Ergebnis entsprechend die WHERE-Klausel mit AND oder OR zusammen setzt.
Mit Zitat antworten
  #37 (permalink)  
Alt 12-04-2013, 08:14
ich1d3
 Registrierter Benutzer
Links : Onlinestatus : ich1d3 ist offline
Registriert seit: Mar 2013
Beiträge: 25
ich1d3 befindet sich auf einem aufstrebenden Ast
Standard Suche mit Eingabefeldern

Ja! Das Projekt ist ja unter Initiativ-Network zu sehen und die Abfrage über alles dann in Datensätze aus einer Datenbank auslesen und ausgeben.
Jetzt möchte ich die Suche anbieten, dass man zum Ort/ Gebiet suchen kann, wer sich bei Demokratie, oder Sozial oder Bildung oder Kultur Umwelt eingetragen hat, so dass sich mögliche Partner finden können.
Dabei ist es mit der jetzigen Lösung auch blöd, dass man dafür bei dem entsprechenden Feld eine 1 eingeben muss als Suchkriterium. Lieber wäre mir eine Radiobutton-Gruppe, bei der man aus den 5 Möglichkeiten eine auswählen kann.
Mit Zitat antworten
  #38 (permalink)  
Alt 12-04-2013, 10:47
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Dann sollte das in etwa so aussehen.

1. Suche nach Ort
2. Suche nach PLZ
3. Suche nach (Ort und Gebiet) oder nach (PLZ und Gebiet)

Somit wie folgt:

PHP-Code:
    if (isset($_POST["ort"]) and !empty($_POST["ort"])) {

        
$ort trim($_POST["ort"]);
        
$ort preg_replace("/[^a-z\s-]/i"""$ort);
        
$abf "SELECT * FROM test WHERE ort='".$ort."'";
    }
    
    if (isset(
$_POST["plz"]) and !empty($_POST["plz"])) {

        
$plz trim($_POST["plz"]);
        
$plz preg_replace("/[^0-9]/"""$plz );
        
$abf "SELECT * FROM test WHERE plz='".$plz."'";
    }

    if (isset(
$_POST["soziales"]) and !empty($_POST["soziales"])) {

        
$soz trim($_POST["soziales"]);
        
$soz preg_replace("/[^0-9]/"""$soz);
        
$abf "SELECT * FROM test WHERE (soziales='".$soz."' AND ort='".$ort."') OR (soziales='".$soz."' AND plz='".$plz."')";
    } 
Bei 3 könnte bei Gebiet über Radio-Buttons eine Auswahl getroffen werden.

Da von Ort und Gebiet jeweils eine leer bleiben wird, sollten beide mit einem Wert vorbelegt werden, wovon der eine überschrieben wird und der andere sich nicht störend bei der Suche nach Punkt 3 auswirkt. Müsste man mal ausprobieren, ob sich da true oder false als boolesche Werte eignen oder so etwas wie NoData besser geeignet ist.

Also, eventuell so, doch das habe ich auch noch nicht ausprobiert, was da am besten geeignet ist. Da ließen sich ja ein paar Tests machen. Warum stand da bei Dir im letzten Statement [^0-1] wenn es doch 5 mögliche Ziffern sind und nicht nur 0 und 1?

PHP-Code:
$limit 20;

    if (isset(
$_POST["ort"]) and !empty($_POST["ort"])) {

        
$ort trim($_POST["ort"]);
        
$ort preg_replace("/[^a-z\s-]/i"""$ort);
        
$abf "SELECT * FROM test WHERE ort='".$ort."' LIMIT 0, ".$limit;
    }
    else {
$ort "NoData"
    }
    
    if (isset(
$_POST["plz"]) and !empty($_POST["plz"])) {

        
$plz trim($_POST["plz"]);
        
$plz preg_replace("/[^0-9]/"""$plz );
        
$abf "SELECT * FROM test WHERE plz='".$plz."' LIMIT 0, ".$limit;
    }
    else {
$plz "NoData"
    }    

    if (isset(
$_POST["soziales"]) and !empty($_POST["soziales"])) {

        
$soz trim($_POST["soziales"]);
        
$soz preg_replace("/[^0-9]/"""$soz);
        
$abf "SELECT * FROM test WHERE (soziales='".$soz."' AND ort='".$ort."') OR (soziales='".$soz."' AND plz='".$plz."') LIMIT 0, ".$limit;
    } 

Geändert von Melewo (12-04-2013 um 11:28 Uhr)
Mit Zitat antworten
  #39 (permalink)  
Alt 12-04-2013, 11:57
ich1d3
 Registrierter Benutzer
Links : Onlinestatus : ich1d3 ist offline
Registriert seit: Mar 2013
Beiträge: 25
ich1d3 befindet sich auf einem aufstrebenden Ast
Standard Suche mit Eingabefeldern

Ja, das klappt wirklich gut, wenn ich Ort oder Plz eingebe und mit Soziales verknüpfe.
Und jetzt weiß ich auch, wie man das mit dem and und dem or macht.

Wie kann ich jetzt den Teil Demokratie, Soziales, Bildung, Umwelt usw. mit Radiobuttons abfragen?

Als Beispiel für die Eingabe hatte ich so was gefunden.
PHP-Code:
Radiobutton-Gruppe: <input type="radio" name="radiobuttongruppe" id="radiobuttongruppe_1" value="ja" /> Ja <input type="radio" name="radiobuttongruppe" id="radiobuttongruppe_2" value="nein" />Nein<br /> 
Wie bekomme ich jetzt die Abfrage zu den obigen 4 Werten in mein Script?
Mit Zitat antworten
  #40 (permalink)  
Alt 12-04-2013, 12:22
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
var_dump($_POST); 
guck dir die ausgabe an, dann kommst du schon drauf ;-)
__________________
Gruß
Uzu

private Homepage
Mit Zitat antworten
  #41 (permalink)  
Alt 12-04-2013, 12:29
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ich1d3 Beitrag anzeigen
Wie kann ich jetzt den Teil Demokratie, Soziales, Bildung, Umwelt usw. mit Radiobuttons abfragen?
Falls die unter Ziffern in der DB kategorisiert sind, zumindest habe ich Deine Aussagen bisher so verstanden, dann fügst Du die halt auch so an geeigneter Stelle ins Formular mit ein.

HTML-Code:
<form action="die_zielseite.php" method="post">
<input type="text" name="ort">
<input type="text" name="plz"><br>
<br>
<input type="radio" name="gebiet" value="1"> Soziales<br>
<input type="radio" name="gebiet" value="2"> Bildung<br>  
<input type="radio" name="gebiet" value="3"> Kultur<br>
<input type="radio" name="gebiet" value="4"> Umwelt<br>
<input type="radio" name="gebiet" value="5"> Demokratie<br>
<br>
<input type="submit" name="eintragen" value="eintragen"><br>
<br>
</form>
Zitat:
Zitat von ich1d3 Beitrag anzeigen
Wie bekomme ich jetzt die Abfrage zu den obigen 4 Werten in mein Script?
Nie und nimmer, nicht in hundert Jahren, wenn Du laufend die Elemente-Namen vom Formular und die Feldnamen von der Datenbank durcheinander würfelst und undefinierte Variablen einfach mal so platzierst, weil die da gerade gut aussehen.

Wenn Du hingegen name="Elemente-Name" vom Formular richtig mit $_POST["Elemente-Name"] abfragst und richtig einer Variablen zuordnest, wie bei $elem1 = $_POST["Elemente-Name-1"], auch die Feldnamen aus der DB richtig in die Where-Klausel einfügst, wie bei feldname/spaltenname = '".$elem1."', ja dann sollte das leicht und locker wie ein Kinderspiel von der Hand gehen.

Geändert von Melewo (12-04-2013 um 12:31 Uhr)
Mit Zitat antworten
  #42 (permalink)  
Alt 13-04-2013, 11:02
ich1d3
 Registrierter Benutzer
Links : Onlinestatus : ich1d3 ist offline
Registriert seit: Mar 2013
Beiträge: 25
ich1d3 befindet sich auf einem aufstrebenden Ast
Standard Suche mit Eingabefeldern

Jein. In der Datenbanktabelle steht jeweils nur 0 oder 1, ob das Feld Soziales angeklickt wurde oder nicht. In der Ausgabe unter Datensätze aus einer Datenbank auslesen und ausgeben kann man dann ein Ja oder ein Nein sehen.
In den Radio-Feldern oben habe ich jetzt aber die Ziffern 1 bis 5, die in PHP übergeben werden. OK bis hierhin.
Damit muss ich doch dann aber unten wieder das Script ganz anderes schreiben.

Das Bisherige
PHP-Code:
if (isset($_POST["eintragen"])) {

    
$sql mysqli_connect($db_host$db_user$db_pass$db_name
           or die(
"Die Datenbank konnte nicht erreicht werden!");
           
    

    if (isset(
$_POST["ort"]) and !empty($_POST["ort"])) {

        
$ort trim($_POST["ort"]);
        
$ort preg_replace("/[^a-z\s-]/i"""$ort);
        
$abf "SELECT * FROM test WHERE ort='".$ort."'";
    }
    
    if (isset(
$_POST["plz"]) and !empty($_POST["plz"])) {

        
$plz trim($_POST["plz"]);
        
$plz preg_replace("/[^0-9]/i"""$plz );
        
$abf "SELECT * FROM test WHERE plz='".$plz."'";
    }

      if (isset(
$_POST["soziales"]) and !empty($_POST["soziales"])) {

        
$soziales trim($_POST["soziales"]);
        
$soziales preg_replace("/[^0-1]/"""$soziales );
        
$abf "SELECT * FROM test WHERE soziales='".$soziales."'";
    }
     if (isset(
$_POST["demokratie"]) and !empty($_POST["demokratie"])) {

        
$demokratie trim($_POST["demokratie"]);
        
$demokratie preg_replace("/[^0-5]/"""$demokratie );
        
$abf "SELECT * FROM test WHERE demokratie='".$demokratie."'"
funktioniert da dann nicht mehr. Wie geht es also unten weiter?
Und in
PHP-Code:
<form action="die_zielseite.php" method="post">
<
input type="text" name="ort">
<
input type="text" name="plz"><br>
<
br>
<
input type="radio" name="gebiet" value="1"Soziales<br>
<
input type="radio" name="gebiet" value="2"Bildung<br>  
<
input type="radio" name="gebiet" value="3"Kultur<br>
<
input type="radio" name="gebiet" value="4"Umwelt<br>
<
input type="radio" name="gebiet" value="5"Demokratie<br>
<
br>
<
input type="submit" name="eintragen" value="eintragen"><br>
<
br>
</
form
habe ich 5 mal einen Radio-Button für die eingetragen Variable „gebiet“? Sollte da nicht
PHP-Code:
<input type="radio" name="soziales" value="1"Soziales<br
stehen? Mach es mir bitte nicht so schwer, sondern so, dass ich es von oben bis unten auch verstehen kann.
Danke!
Mit Zitat antworten
  #43 (permalink)  
Alt 16-04-2013, 19:22
raiguen
 Registrierter Benutzer
Links : Onlinestatus : raiguen ist offline
Registriert seit: Feb 2012
Beiträge: 8
raiguen befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
wenn ich mich da mal mit einmischen darf!?

Das Suchformular würde ich so aufbauen, dass der geneigte Besucher auswählen kann nach
Ort ODER PLZ ODER Gebiet
UND (ich nenn es mal Bereich) Demokratie, Soziales,...

Suche nach Bereich
a) NUR einer? -> Radiobutton
b) mehrere? -> Checkboxen
b1) ALLE selektierten Bereiche? -> AND-Verknüpfung
b2) beliebige Kombination? -> OR-Verküpfung

kl. Beispiel:
PHP-Code:
    //--array für mehrfachauswahl und entsprechender Ausdruck für SQL-Abfrage
    $sqlbereich=array("dem"=>' `demokratie` ',
                      "soz"=>' `soziales` ',
                      "bil"=>' `bildung` '
                      );


    if (isset($_POST["ort"]) and !empty($_POST["ort"])) {

        $ort = trim($_POST["ort"]);
        $ort = preg_replace("/[^a-z\s-]/i", "", $ort);
        $abf = "SELECT * FROM test WHERE ort='".$ort."'";
    }

    if (isset($_POST["plz"]) and !empty($_POST["plz"])) {

        $plz = trim($_POST["plz"]);
        $plz = preg_replace("/[^0-9]/", "", $plz );
        //--ist plz kleiner 5 Ziffern? dann ist es
        //--eine PLZ-Bereichsuche, z.B 10xxx
        if(strlen($plz)<5){
          $abf = "SELECT * FROM test WHERE plz LIKE'$plz%'";

        } else {
          $abf = "SELECT * FROM test WHERE plz='$plz'";
        }
    }

    if (isset($_POST["gebiet"]) and !empty($_POST["gebiet"])) {

        $gebiet = trim($_POST["gebiet"]);
        $gebiet = preg_replace("/[^a-z\s-]/i", "", $gebiet);
        $abf = "SELECT * FROM test WHERE gebiet='$gebiet'";
    }

    if (!empty($_POST['bereich'])) {
        //--temp. Array aus den selektierten Checkboxen
        foreach($_POST['bereich'] as $wahl)
        {
          $temp[] = $sqlbereich[$wahl];
        }
        //--temp.Array zu einem String mit 'Trenner' AND wenn ALLE Bereiche zutreffen müssen
        $bereichbedingung = implode(" AND ", $temp);
        /* wenn eine beliebige Kombination, dann 'Trenner' OR
         *
        $str = implode(" OR ", $temp);
        */


        //--SQL-String zusammenbauen
        //--falls vorher in den Eingabefeldern KEINE Angaben gemacht wurden
        //--ist $abf ein Leerstring, also basteln wir zunächst die Abfrage
        if (empty($abf))
        {
          $abf = "SELECT * FROM test WHERE ($bereichbedingung)";
        }
        else
        {
          $abf .= " AND ($bereichbedingung)";
        }
    }

    if (!empty($_POST['bereich1'])) {
        $bereichbedingung = $sqlbereich[$_POST['bereich1']];

        //--SQL-String zusammenbauen
        //--falls vorher in den Eingabefeldern KEINE Angaben gemacht wurden
        //--ist $abf ein Leerstring, also basteln wir zunächst die Abfrage
        if (empty($abf1))
        {
          $abf1 = "SELECT * FROM test WHERE ($bereichbedingung)";
        }
        else
        {
          $abf1 .= " AND ($bereichbedingung)";
        }
    }

    print $abf."<br />$abf1";

?>
<html><body>
<form action="<?php echo htmlentities($_SERVER['SCRIPT_NAME']); ?>" method="POST" enctype="text/html">
<input type="text" name="ort"/>Ort <br />
<input type="text" name="plz"/>PLZ <br />
<input type="text" name="gebiet"/>Gebiet <br />
<input type="checkbox" name="bereich[]" value="dem"/>Demokratie <br />
<input type="checkbox" name="bereich[]" value="soz"/>Soziales <br />
<input type="checkbox" name="bereich[]" value="bil"/>Bildung <br /> <br />
<input type="radio" name="bereich1" value="dem"/>Demokratie <br />
<input type="radio" name="bereich1" value="soz"/>Soziales <br />
<input type="radio" name="bereich1" value="bil"/>Bildung <br />


<input type="submit" value="Auswahl" name="absenden"/>
</form>
</body></html>
Erklärung(en):
HTML-Code:
<input type="checkbox" name="bereich[]" value="dem"/>Demokratie <br />
<input type="checkbox" name="bereich[]" value="soz"/>Soziales <br />
<input type="checkbox" name="bereich[]" value="bil"/>Bildung <br /> <br />
Checkboxen zur Mehrfachauswahl eines Bereiches; da mehrere Checboxen angeklickst sein können, muss der name bereich[] als Array notiert werden!

Alle möglichen Bereiche bzw value-Werte dienen als Schlüssel in diesem Array:
PHP-Code:
    //--array für mehrfachauswahl und entsprechender Ausdruck für SQL-Abfrage
    
$sqlbereich=array("dem"=>' `demokratie` ',
                      
"soz"=>' `soziales` ',
                      
"bil"=>' `bildung` '
                      
); 
welches zur Bildung des SQL-Statements für die entsprechenden Tabellenfelder benötigt wird.

Zusammenbau des Abfragestrings für den/die selektierten Bereich(e):
PHP-Code:
    if (!empty($_POST['bereich'])) {
        
//--temp. Array aus den selektierten Checkboxen
        
foreach($_POST['bereich'] as $wahl)
        {
          
$temp[] = $sqlbereich[$wahl];
        }
        
//--temp.Array zu einem String mit 'Trenner' AND wenn ALLE Bereiche zutreffen müssen
        
$bereichbedingung implode(" AND "$temp);
        
/* wenn eine beliebige Kombination, dann 'Trenner' OR
         *
        $str = implode(" OR ", $temp);
        */


        //--SQL-String zusammenbauen
        //--falls vorher in den Eingabefeldern KEINE Angaben gemacht wurden
        //--ist $abf ein Leerstring, also basteln wir zunächst die Abfrage
        
if (empty($abf))
        {
          
$abf "SELECT * FROM test WHERE ($bereichbedingung)";
        }
        else
        {
          
$abf .= " AND ($bereichbedingung)";
        }
    } 
Aus den im POST-Array bereich enthaltenen Checkbox-Values werden aus dem Array $sqlbereich die entsprechenden Tabellenfelder zu dem String $bereichsbedingung mit AND bzw OR zusammengefügt, z.B.:
Code:
( `demokratie`  AND  `soziales` )
Ein mögliches SQL-Statement könnte dann bspw. so aussehen:
Code:
SELECT * FROM `test` WHERE `plz` LIKE '10%' AND ( `soziales`  AND  `bildung` )
Zur Abfragesyntax: bei MySql können 'boolsche' Felder (Typ tinInt) auf 3 Arten notiert werden:
---> SELECT * FROM blubb WHERE boolfeld=true
---> SELECT * FROM blubb WHERE boolfeld=1
---> SELECT * FROM blubb WHERE boolfeld


Beispiel mit Radiobuttons, wenn NUR ein Bereich ausgewählt werden soll. Da NUR ein value möglich ist (was ja Sinn einer Radiogroup ist) muss für die POST-Variable kein Array bereitgestellt werden:
PHP-Code:
<input type="radio" name="bereich1" value="dem"/>Demokratie <br />
<
input type="radio" name="bereich1" value="soz"/>Soziales <br />
<
input type="radio" name="bereich1" value="bil"/>Bildung <br /> 
Tipp: für die PLZ-Suche nicht unbedingt auf Exactheit abfragen, sondern auch auf alle möglichen PLZ beginnend mit dem Suchmuster:
PHP-Code:
        //--ist plz kleiner 5 Ziffern? dann ist es
        //--eine PLZ-Bereichsuche, z.B 10xxx
        
if(strlen($plz)<5){
          
$abf "SELECT * FROM test WHERE plz LIKE '$plz%'";

        } else {
          
$abf "SELECT * FROM test WHERE plz='$plz'";
        } 
Mit Zitat antworten
  #44 (permalink)  
Alt 20-04-2013, 16:12
Guenni61
 Registrierter Benutzer
Links : Onlinestatus : Guenni61 ist offline
Registriert seit: Nov 2011
Ort: Viersen
Beiträge: 128
Guenni61 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von raiguen Beitrag anzeigen
Hallo,
wenn ich mich da mal mit einmischen darf!?
Na ja, wenn sich sonst keiner "mischt" . . .
Hi raiguen,
. . . dann mach' ich das auch mal.
Wenn ich im Endeffekt nur eine Sache suche (PLZ oder Ort), dann würde ich auch nur ein Textfeld verwenden.
Zwei Textfelder könnten Benutzer verwirren, die dann glauben, man müsse auch beide Textfelder ausfüllen,
was natürlich Humbug ist (m.M. nach).
Die Auswahl, nach was jemand sucht, kann ich doch über Radio-Buttons steuern.
Die RBs heißen spalte, die RB-Valueparameter jeweils plz, ort.
Code:
<form action="" method="post">
<p>Suche nach PLZ <input type="radio" name="spalte" value="plz" /> 
Ort <input type="radio" name="spalte" value="ort" checked />
<input type="text" name="suchfeld" /></p>
<p><input type="submit" name="cmd" value="Suchen" />
Nach Senden des Form's . . .
PHP-Code:
if(isset($_POST['cmd'])){ //Wurde der Submit-Button geklickt?
 
 
$spalte=$_POST['spalte']; // $_POST['spalte'] enthält entweder "plz" oder "ort"
 
 
$query='select * from tabelle where '.$spalte.' like "'.$_POST['suchfeld'].'%"';
 
. . . 
usw
Und die ganze Prüferei mit isset, empty kann ich mir auch noch sparen, in dem ich generell mit Wildcard vergleiche,
und dem Benutzer einfach mitteile, wie er das Formular zur Suche nutzen kann:

- vollen Ortsnamen eingeben, oder einen oder mehr Buchstaben
- volle PLZ eingeben, oder ein oder mehr Zahlen als PLZ-Bereich
- nichts eingeben, um die ganze Tabelle abzurufen

Ich finde, macht die Sache wesentlich kürzer und weniger kompliziert.

Gruß
Günni
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
Suche in einer Datenbank über ein fomular mit 2 eingabefeldern darklord9579 PHP Developer Forum 8 07-12-2011 15:29
Automatisches Erzeugen von Eingabefeldern Apgunner PHP Developer Forum 7 10-02-2008 01:43
Nur a-z und 0-9 in Eingabefeldern zulassen Screw Driver PHP Developer Forum 4 22-09-2006 16:59
ändern von eingabefeldern value Crank Yanker HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 8 08-11-2004 21:53
Textgröße in eingabefeldern verändern? bappo HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 2 29-09-2003 20:13

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 09:02 Uhr.