MySQL-Datenbank mit php durchsuchen.

Danke an sheel und matze202. Ich habe mir das Suchscript jetzt so umgestrickt, wie ich es haben wollte. Ich wollte mir ein Online Adressbuch erstellen, dass alle möglichen Daten meiner Dienstleister beinhaltet. Nun habe ich folgendes Problem, wenn ich z .B. nach meinem Steuerberater suche und zusätzlich die PLZ eingebe erhalte ich alle anderen Dienstleister mit der selben PLZ auch. Wie kann ich das dahingehend ändern, sodass ich nur den Steuerberater oder alle Daten erhalte, die auch irgendwo Stuerberater drinstehen haben?
PHP:
<?php
                    if(isset($_GET["search"])) {
                        $suchwort = $_GET["search"];
                        $suchwort = explode(" ", $suchwort);
                        $abfrage2 = "";
                        $abfrage3 = "";
                        $abfrage4 = "";
                        $abfrage5 = "";
                        $abfrage6 = "";
                        $abfrage7 = "";
                        $abfrage8 = "";
                        $abfrage9 = "";
                        $abfrage10 = "";
                        $abfrage11 = "";
                        $abfrage12 = "";
                        $abfrage13 = "";
                        for($i = 0; $i < sizeof($suchwort); $i++)
                        {
                            $abfrage2 .= "`name` LIKE '%".$suchwort[$i]."%'";
                            $abfrage3 .= "`beschreibung` LIKE '%".$suchwort[$i]."%'";
                            $abfrage4 .= "`strasse` LIKE '%".$suchwort[$i]."%'";
                            $abfrage5 .= "`hausnummer` LIKE '%".$suchwort[$i]."%'";
                            $abfrage6 .= "`plz` LIKE '%".$suchwort[$i]."%'";
                            $abfrage7 .= "`ort` LIKE '%".$suchwort[$i]."%'";
                            $abfrage8 .= "`web` LIKE '%".$suchwort[$i]."%'";
                            $abfrage9 .= "`telefoneins` LIKE '%".$suchwort[$i]."%'";
                            $abfrage10 .= "`telefonzwei` LIKE '%".$suchwort[$i]."%'";
                            $abfrage11 .= "`fax` LIKE '%".$suchwort[$i]."%'";
                            $abfrage12 .= "`mail` LIKE '%".$suchwort[$i]."%'";
                            $abfrage13 .= "`socialmedia` LIKE '%".$suchwort[$i]."%'";
                            if($i < (sizeof($suchwort) - 1)) {
                                $abfrage2 .= "OR";
                                $abfrage3 .= "OR";
                                $abfrage4 .= "OR";
                                $abfrage5 .= "OR";
                                $abfrage6 .= "OR";
                                $abfrage7 .= "OR";
                                $abfrage8 .= "OR";
                                $abfrage9 .= "OR";
                                $abfrage10 .= "OR";
                                $abfrage11 .= "OR";
                                $abfrage12 .= "OR";
                                $abfrage13 .= "OR";
                            }
                        }
                        
                        $host_name  = "DBHost";
                        $database   = "DBName";
                        $user_name  = "DBUser";
                        $password   = "DBPass";
                       

                        $db = mysqli_connect($host_name, $user_name, $password, $database);
                       
                        
                        if(mysqli_connect_errno() == 0)
                        {
                           $sql = "SELECT * FROM `indexcompanies` WHERE " . $abfrage2 . "OR" . $abfrage3 . "OR" . $abfrage4 . "OR" . $abfrage5 . "OR" . $abfrage6 . "OR" . $abfrage7 . "OR" . $abfrage8 . "OR" . $abfrage9 . "OR" . $abfrage10 . "OR" . $abfrage11 . "OR" . $abfrage12;
                            $ergebnis = $db->query($sql);
                               
                            while($zeile = $ergebnis->fetch_object())
                            {
                                //Div class url
                                echo "<div class='url'>";
                               
                                //Firmenname
                                echo "<a href='http://$zeile->web/'><h3>";
                                echo $zeile->name;
                                echo "</h3></a>";
                               
                                //Adresse
                                echo "<a href='https://www.google.de/maps/place/$zeile->strasse+$zeile->hausnummer+$zeile->plz+$zeile->ort' target='_blank'>";
                                echo $zeile->strasse;
                                echo "&nbsp;";
                                echo $zeile->hausnummer;
                                echo ",&nbsp";
                                echo $zeile->plz;
                                echo "&nbsp;";
                                echo $zeile->ort;
                                echo "</a><br>";
                               
                                //Rufnummern
                                    //Telefon 1 z.B. Festnetz
                                echo "<a href='tel:$zeile->telefoneins'>Tel.:&nbsp;";
                                echo $zeile->telefoneins;
                                echo "</a>&nbsp;|&nbsp;";
                                    //Telefon 2 z.B. Mobil
                                echo "<a href='tel:$zeile->telefonzwei'>Mobil:&nbsp;";
                                echo $zeile->telefonzwei;
                                echo "</a><br>";
                               
                                //Fax
                                echo "<a href='fax:$zeile->fax'>Fax:&nbsp;";
                                echo $zeile->fax;
                                echo "</a><br>";
                               
                                //URL
                                echo "<a href='http://$zeile->web/'>";
                                echo $zeile->web;
                                echo "<br>";
                               
                                //E-Mail
                                echo "<a href='mailto:$zeile->mail'>";
                                echo $zeile->mail;
                                echo "</a>";
                               
                                //Social Media
                                echo "<br>";
                                echo $zeile->socialmedia;
                               
                                //Div class url
                                echo "</div>";
                            }
                        }
                        $db->close();
                    }
                ?>
 
PHP:
    $sql = "SELECT * FROM `indexcompanies` WHERE " . $abfrage2 . "OR" . $abfrage3 . "OR" . $abfrage4 . "OR" . $abfrage5 . "OR" . $abfrage6 . "OR" . $abfrage7 . "OR" . $abfrage8 . "OR" . $abfrage9 . "OR" . $abfrage10 . "OR" . $abfrage11 . "OR" . $abfrage12;
sollte eher "AND" statt "OR" haben.

Btw., ein Array und Schleifen würden die viel Wiederholungen im Code ersparen.
 
PHP:
    $sql = "SELECT * FROM `indexcompanies` WHERE " . $abfrage2 . "OR" . $abfrage3 . "OR" . $abfrage4 . "OR" . $abfrage5 . "OR" . $abfrage6 . "OR" . $abfrage7 . "OR" . $abfrage8 . "OR" . $abfrage9 . "OR" . $abfrage10 . "OR" . $abfrage11 . "OR" . $abfrage12;
sollte eher "AND" statt "OR" haben.

Btw., ein Array und Schleifen würden die viel Wiederholungen im Code ersparen.

Vielen Dank, ja darüber werde ich nachdenken, funktionieren tut es aufjedenfall schonmal. Eigentlich funktioniert das Kontaktverzeichniss nun so, wie ich es mir vorgestellt habe, also könnte dieses Thema rein theoretisch geschlossen werden. Muss ich das machen, bzw. wenn ja, wie mache ich das ?
 
PHP:
 if($i < (sizeof($suchwort) - 1)) {
                                $abfrage2 .= "OR";
                                $abfrage3 .= "AND";
                                $abfrage4 .= "OR";
                                $abfrage5 .= "OR";
                                $abfrage6 .= "AND";
                                $abfrage7 .= "OR";
                                $abfrage8 .= "OR";
                                $abfrage9 .= "OR";
                                $abfrage10 .= "OR";
                                $abfrage11 .= "OR";
                                $abfrage12 .= "OR";
                                $abfrage13 .= "OR";
                            }
                        }
Ok, ich habe jetzt wieder ein problem, wenn ich z.b. einen der Elektriker aus dem Adressbuch suche (drei vorhanden) und zusätzlich die postleitzahl z.b. 12345 eingebe, erhalte ich schlichtweg alle elektriker, auch die, die die postleitzahl 22222 besitzen, ich möchte aber nur die Elektriker ausgeschmissen bekommen, die die PLZ besitzen, die ich eingegeben habe :) Mein Ansatz, war so, dass ich die Beschreibung = "AND" setzen muss und die PLZ ="AND" setzen muss. Dann erhalte ich aber gar keine Ausgabe mehr :(
 
Zuletzt bearbeitet:
Eigentlich meinte ich die AND nur im Select..., nicht in dem gezeigten Block.
(und beim Select alle OR zu AND ändern, nicht nur ein paar davon)
 
Dies kannst du aber auch ohne Array schon stark vereinfachen und jetzt ist alles auf AND:
PHP:
<?php
                    if(isset($_GET["search"])) {
                        $suchwort = $_GET["search"];
                        $suchwort = explode(" ", $suchwort);
                        $abfrage = "";
                        for($i = 0; $i < sizeof($suchwort); $i++)
                        {
                            $abfrage .= "`name` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`beschreibung` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`strasse` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`hausnummer` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`plz` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`ort` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`web` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`telefoneins` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`telefonzwei` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`fax` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`mail` LIKE '%".$suchwort[$i]."%' AND ";
                            $abfrage .= "`socialmedia` LIKE '%".$suchwort[$i]."%'";
                            if($i < (sizeof($suchwort) - 1)) {
                                $abfrage .= " AND ";
                            }
                        }
                     
                        $host_name  = "DBHost";
                        $database   = "DBName";
                        $user_name  = "DBUser";
                        $password   = "DBPass";
                    

                        $db = mysqli_connect($host_name, $user_name, $password, $database);
                    
                     
                        if(mysqli_connect_errno() == 0)
                        {
                           $sql = "SELECT * FROM `indexcompanies` WHERE " . $abfrage;
                            $ergebnis = $db->query($sql);
                            
                            while($zeile = $ergebnis->fetch_object())
                            {
                                //Div class url
                                echo "<div class='url'>";
                            
                                //Firmenname
                                echo "<a href='http://$zeile->web/'><h3>";
                                echo $zeile->name;
                                echo "</h3></a>";
                            
                                //Adresse
                                echo "<a href='https://www.google.de/maps/place/$zeile->strasse+$zeile->hausnummer+$zeile->plz+$zeile->ort' target='_blank'>";
                                echo $zeile->strasse;
                                echo "&nbsp;";
                                echo $zeile->hausnummer;
                                echo ",&nbsp";
                                echo $zeile->plz;
                                echo "&nbsp;";
                                echo $zeile->ort;
                                echo "</a><br>";
                            
                                //Rufnummern
                                    //Telefon 1 z.B. Festnetz
                                echo "<a href='tel:$zeile->telefoneins'>Tel.:&nbsp;";
                                echo $zeile->telefoneins;
                                echo "</a>&nbsp;|&nbsp;";
                                    //Telefon 2 z.B. Mobil
                                echo "<a href='tel:$zeile->telefonzwei'>Mobil:&nbsp;";
                                echo $zeile->telefonzwei;
                                echo "</a><br>";
                            
                                //Fax
                                echo "<a href='fax:$zeile->fax'>Fax:&nbsp;";
                                echo $zeile->fax;
                                echo "</a><br>";
                            
                                //URL
                                echo "<a href='http://$zeile->web/'>";
                                echo $zeile->web;
                                echo "<br>";
                            
                                //E-Mail
                                echo "<a href='mailto:$zeile->mail'>";
                                echo $zeile->mail;
                                echo "</a>";
                            
                                //Social Media
                                echo "<br>";
                                echo $zeile->socialmedia;
                            
                                //Div class url
                                echo "</div>";
                            }
                        }
                        $db->close();
                    }
                ?>
mit Array ist es aber auch kein Hit:
PHP:
<?php
                    if(isset($_GET["search"])) {
                        $suchwort = $_GET["search"];
                        $suchwort = explode(" ", $suchwort);
                        $abfrage = "";
                        $a = array('name', 'beschreibung', 'strasse', 'hausnummer', 'plz', 'ort', 'web');
                        for($i = 0; $i < sizeof($suchwort); $i++)
                        {
                            for($ii = 0; $ii < sizeof($a); $ii++)
                            {
                            $abfrage .= "`".$a[$ii]."` LIKE '%".$suchwort[$i]."%'";
                                if($ii < (sizeof($a) - 1)) {
                                    $abfrage .= " AND ";
                                }
                            if($i < (sizeof($suchwort) - 1)) {
                                $abfrage .= " AND ";
                            }
                        }
                     
                        $host_name  = "DBHost";
                        $database   = "DBName";
                        $user_name  = "DBUser";
                        $password   = "DBPass";
                    

                        $db = mysqli_connect($host_name, $user_name, $password, $database);
                    
                     
                        if(mysqli_connect_errno() == 0)
                        {
                           $sql = "SELECT * FROM `indexcompanies` WHERE " . $abfrage;
                            $ergebnis = $db->query($sql);
                            
                            while($zeile = $ergebnis->fetch_object())
                            {
                                //Div class url
                                echo "<div class='url'>";
                            
                                //Firmenname
                                echo "<a href='http://$zeile->web/'><h3>";
                                echo $zeile->name;
                                echo "</h3></a>";
                            
                                //Adresse
                                echo "<a href='https://www.google.de/maps/place/$zeile->strasse+$zeile->hausnummer+$zeile->plz+$zeile->ort' target='_blank'>";
                                echo $zeile->strasse;
                                echo "&nbsp;";
                                echo $zeile->hausnummer;
                                echo ",&nbsp";
                                echo $zeile->plz;
                                echo "&nbsp;";
                                echo $zeile->ort;
                                echo "</a><br>";
                            
                                //Rufnummern
                                    //Telefon 1 z.B. Festnetz
                                echo "<a href='tel:$zeile->telefoneins'>Tel.:&nbsp;";
                                echo $zeile->telefoneins;
                                echo "</a>&nbsp;|&nbsp;";
                                    //Telefon 2 z.B. Mobil
                                echo "<a href='tel:$zeile->telefonzwei'>Mobil:&nbsp;";
                                echo $zeile->telefonzwei;
                                echo "</a><br>";
                            
                                //Fax
                                echo "<a href='fax:$zeile->fax'>Fax:&nbsp;";
                                echo $zeile->fax;
                                echo "</a><br>";
                            
                                //URL
                                echo "<a href='http://$zeile->web/'>";
                                echo $zeile->web;
                                echo "<br>";
                            
                                //E-Mail
                                echo "<a href='mailto:$zeile->mail'>";
                                echo $zeile->mail;
                                echo "</a>";
                            
                                //Social Media
                                echo "<br>";
                                echo $zeile->socialmedia;
                            
                                //Div class url
                                echo "</div>";
                            }
                        }
                        $db->close();
                    }
                ?>
 
Zuletzt bearbeitet:
mmmh... :( auch wenn ich das so mache, wie ihr mir das sagt, dann bekomme ich z.B. bei Elektro 12345 gar keine Ausgabe mehr, ändere ich jetzt bei plz auf "AND" und bei allen anderen auf "OR", dann bekomme ich zwar alle Elektriker, aber nicht mehr die Steuerberater mit der PLZ 12345 etc. . Ändere ich danach auch beschreibung auf "AND", dann bekomme ich nur eine Ausgabe bei Suchbegriff=elektriker, aber nicht mehr bei Suchbegriff=Elektriker 12345 :( Und wenn ich im Block alle auf "OR" lasse und im SELECT alle auf "AND" ändere, dann erhalte ich gar keine Ausgabe mehr, auch bei Suchbegriff=Elektriker.
 
Zuletzt bearbeitet:
zeig mal, was im $sql drin steht

EDIT: das OR brauchst du immer nur, wenn du nicht alle Werte, die du hast auch auswärten musst und dass wird dann richtig umfangreicher, wenn du nicht nur AND bzw. OR brauchst, sondern beides mischen musst.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück