Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit Suchfunktion Datenbank abfragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mit Suchfunktion Datenbank abfragen

    Hallo,

    Ich möchte aus einer MySql Datenbank Einträge von einem bestimmten Tag nach einem bestimmten Suchwort durchsuchen und dann in einem Textfeld ausgeben lassen.
    Ich habe eine Tabelle mit den Spalten Datum und Eintrag, in diesen wird ein Tagesprotokoll gespeichert. Im Eintrag wir zum Beispiel Person xyz kommt vom Einkaufen zurück und in Datum wird via Timestepp Datum und Uhrzeit gespeichert.
    Ziel ist es die Einträge jeder Person für einem bestimmten Tag im Textfeld auszugeben.

    Das ganze soll über zwei Selecctboxen gesteuert werden.

    Selectbox1 =curdate(), =curdate()-1, ..... Selektbox2 = Name

    Die Abfrage bisher hab ich so: $sql = "SELECT eintraege FROM protokolle where date(datum)=curdate();";

    Wie nicht anders zu erwarten, werden mir nun alle Einträge des Tages angezeigt.
    Wie bekomme ich die beiden Selectboxen mit eingebunden.


  • #2
    PHP-Code:
    $sql "SELECT eintraege FROM protokolle where date(datum)=curdate() AND Eintrag LIKE '%$_POST['Name']%;"
    https://www.w3schools.com/sql/sql_like.asp
    Besser wäre es, wenn du den Namen in eine extra Spalte legst. Oder noch besser, IDs nutzen.
    http://www.dhsmedia.de
    http://www.deutsch-im-blick.de

    Kommentar


    • #3
      NIEMALS Werte direkt in SQL-Abfragen einfügen. Schon gar nicht aus $_GET oder $_POST. Da kann man auch gleich alle Admin-Passwörter direkt auf die Webseite schreiben. Hat ungefähr den gleichen Effekt.

      Kommentar


      • #4
        Danke Für die schnelle Antwort, leider kann ich den Namen nicht in eine eigene Spalte verlegen. Wenn ich wieder am Platz bin probiere ich die vorgeschlagene Abfrage aus. Nochmal danke dafür...

        Kommentar


        • #5
          Ich habe mich so an objektorientierte Abfragen gewöhnt.
          So in der Art sollte es gehen und sicher sein.
          PHP-Code:
          $Name mysqli_real_escape_string($link$_POST["Name"]);
          $Name'%'.$Name.'%';
          $sql "SELECT eintraege FROM protokolle where date(datum)=curdate() AND eintraege LIKE $Name;"
          http://www.dhsmedia.de
          http://www.deutsch-im-blick.de

          Kommentar


          • #6
            Schau mal hier rein: https://php-de.github.io/jumpto/sql-injection/

            Kommentar


            • #7
              Danke für Eure Antworten, werde mich jetzt gleich mal rann setzen. Bin gestern leider nicht mehr dazu gekommen.

              Kommentar


              • #8
                Hallo nochmal, ich teste jetzt schon zwei Tagen rum und komm einfach nicht weiter. MeinSkript macht nur die Hälfte von dem was es eigentlich machen soll.
                PHP-Code:
                <?php

                    mysql_connect
                ('xxxxxxx''xxxxxxx''xxxxxxxx');
                    
                mysql_select_db('xxxxxxxxx');


                    
                $sql "SELECT CONCAT(name) AS Name FROM bewohner;";

                    
                $result mysql_query($sql) OR die(mysql_error());

                    while(
                $row mysql_fetch_assoc($result)) {

                        echo(
                "<option>".$row['Name']."</option>");

                    }

                    
                ?>

                </select>


                <a class="nav-link alink" href=""><button class="btn btn-outline-success my-2 my-sm-3 nav-link alink" type="submit" value="suchen">suchen</button></a>

                </form>


                <?php

                    $Name
                =$_POST['Name'];

                    
                $Name mysqli_real_escape_string($link$_POST["Name"]);

                    
                $Name'%'.$Name.'%';



                    
                $result mysql_query("SELECT * FROM tagesprotokolle WHERE date(datum)=curdate() AND eintrag LIKE '$Name';") or die('keinen Eintrag gefunden');






                    while(
                $row mysql_fetch_array($result)){

                        echo 
                $row['datum'];

                        echo 
                "<br>";

                        echo 
                $row['eintrag'];

                        echo 
                "<br>";

                        echo 
                "<br>";

                    }

                    
                ?>
                Es sucht mir aus der Datenbank Einträge mit dem aktuellen Datum und soll beim selektieren in der Selecktbox die Anzeige der Einträge auf die mit dem passenden Namen im Text reduzieren.

                Bildschirmfoto 2018-12-07 um 19.26.17.png

                Kommentar


                • #9
                  mysqli_real_escape_string ist eine Funktion der API Mysqli mit i, du verbindest dich aber mit der alten API.
                  Siehe dazu im Handbuch unter http://php.net/manual/en/set.mysqlinfo.php für die Unterschiede
                  und ein Beispiel unter http://php.net/manual/en/mysqli-result.fetch-array.php

                  Du musst da also erst mal alles umstellen.

                  Dann noch SELECT * ändern, in dem du dort die Spalten aufführst, die du ausgeben willst.

                  Kommentar


                  • #10
                    Vielen Dank für die große Hilfe.
                    Ich poste mal den Quelltext, vielleicht kann ihn ja mal wer brauchen. Oder jemand sagt mir, dass ich das auch kürzer hätte schreiben können. Bin halt blutiger Anfänger.

                    PHP-Code:
                    <html>

                    <head>

                    <title></title>

                    </head>

                    <body>

                    <form action="../../../data/pb/protokolle/iframe_heute.php" method="post"><select class="form-control mr-sm-2" name="Name">

                    <?php

                        $link
                    =mysqli_connect('***********''*******''*********''**********');


                        if(
                    $link === false){

                            die(
                    "ERROR: Kein Kontakt zur Datenbank. " mysqli_connect_error());

                        }

                        
                    $sql "SELECT CONCAT(name) AS Name FROM bewohner;";

                        if(
                    $result mysqli_query$link$sql)){

                            if(
                    mysqli_num_rows($result) > 0){

                        while(
                    $row mysqli_fetch_assoc($result)) {

                            echo(
                    "<option>".$row['Name']."</option>");

                        }

                    echo 
                    "</select>";

                                
                    mysqli_free_result($result);

                            } else{

                                echo 
                    "Kein Datensatz gefunden.";

                            }

                        } else{

                            echo 
                    "ERROR: $sql konnte nicht verarbeitet werden. " mysqli_error($link);

                        }

                        
                    mysqli_close($link);

                        
                    ?>

                    <a class="nav-link alink" href=""><button class="btn btn-outline-success my-2 my-sm-3 nav-link alink" type="submit" value="suchen">suchen</button></a>

                    </form>

                    <?php

                        $_Suche
                    =$_POST['Name'];

                        echo (
                    "<div>".$_POST['Name']."</div>");    // ist nur eine Kontrollfunktion

                        
                    $link=mysqli_connect('***********''*******''*********''**********');

                        if(
                    $link === false){

                            die(
                    "ERROR: Kein Kontakt zur Datenbank. " mysqli_connect_error());

                        }

                        
                    $sql=('SELECT * FROM tagesprotokolle WHERE eintrag LIKE "%'.$_Suche.'%" AND date(datum)=curdate();' );

                        if(
                    $result mysqli_query($link$sql)){

                            if(
                    mysqli_num_rows($result) > 0){

                                echo 
                    "<table border='1' Font-size='8' cellpadding='10'>";

                                echo 
                    "<tr>";

                                echo 
                    "<th>Datum</th>";

                                echo 
                    "<th>Eintrag</th>";

                                echo 
                    "</tr>";

                                while(
                    $row mysqli_fetch_array($result)){

                                    echo 
                    "<tr>";

                                    echo 
                    "<td>" $row['datum'] . "</td>";

                                    echo 
                    "<td>" $row['eintrag'] . "</td>";

                                    echo 
                    "</tr>";

                                }

                                echo 
                    "</table>";

                                
                    mysqli_free_result($result);

                            } else{

                                echo 
                    "Kein Datensatz gefunden.";

                            }

                        } else{

                            echo 
                    "ERROR: $sql konnte nicht verarbeitet werden. " mysqli_error($link);

                        }

                        
                    mysqli_close($link);

                        
                    ?>


                    </body>

                    </html>

                    Kommentar


                    • #11
                      Ich habe den Eindruck, daß du mit "Code-Schnipseln" arbeitest, die du von irgendwo kopierst. Ich komme dadurch darauf, daß du z.B. das SQL-Schlüsselwort "Concat" verwendest, obwohl es nichts zu konkatinieren gibt, einziges Argument ist "Name" (ich habe es übrigens so gelernt, daß man solche Bezeichner wie "Name", "Text" usw. meiden sollte).

                      Gewöhne dir das ab. Du solltest z.B. so vorgehen:
                      1. Schreibe den statischen HTML-Sourcecode.
                      2. Schreibe deine SQL-Statements und teste sie, z.B. im PHPMyAdmin.
                      3. Schreibe die PHP-Statements zum Herstellen der Verbindung zur Datenbank und zum Abrufen der Daten.
                      4. Schreibe die PHP-Statements, die $result auswerten, i.d.R. in einer Schleife, dort gehören deine ganzen echo-Befehle hin.
                      5. Schreibe nach dem EVA-Prinzip die Auswertung der POST-Daten und bette HTML-Sourcecode und den PHP-Code aus 2. - 4. entsprechend in diesen Rahmen ein. Die Teile aus 2.-4. sollten in einer Funktion gekapselt werden.
                      Desweiteren: Du solltest keinen Code verwenden, von dem du nicht weißt, was der tut.

                      Mein Senf.

                      Kommentar


                      • #12
                        Konkret könnte es dann so aussehen:
                        PHP-Code:
                        <?php 
                        # -- INCLUDES --------------------------------------------------------
                          
                        include("my_functions.php");       

                        # -- AUSWERTUNG POST-DATEN -------------------------------------------  
                          
                        if (isset($_POST["MeinInputboxText"])) {                             
                            
                        $MeinInput $_POST["MeinInputboxText"];
                          } else {                                                      
                            
                        $MeinInput '';
                          } 
                          
                        // Ggfs. weitere $POST-Daten

                        ?>
                        <!DOCTYPE HTML>
                        <html>
                          <head>
                            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                            <title>Titel der Seite</title>
                            <link href="layout_mycss.css" rel="stylesheet" type="text/css" /> 
                          </head>
                          <body>

                            <div class="container">
                              <div class="header">
                                <!-- HTML-Code Header -->

                              <!-- end .header --></div>
                              <div class="content">

                        <?php
                          
                        echo 
                               
                        "<p>Dieses ist dann die Ausgabe:</p>".
                                
                        fnc_StrTextVonDB($MeinInput);
                        ?>    
                              <!-- end .content --></div>
                            </div><!-- end .container -->
                          </body>
                        </html>
                        Die Funktion sieht so aus und wird in "my_functions.php" gespeichert.
                        PHP-Code:
                        <?php
                          
                        function fnc_StrTextVonDB($pMeinInput) {
                        # -- INITIALISIERUNG, FEHLERVORBELEGUNG USW. -------------------------------------
                          //- Initialisierung ------------------------------------------------------------
                          
                        $rc '#Fehler01';    
                          
                        $zumbru "\n";
                          
                        $StrResult '';

                          
                        // --- ... (z.B. Vorbehandlung von $pMeinInput)


                        # -- DATENBANKVERBINDUNG ---------------------------------------------------------
                          
                        $dbcon mysqli_connect(ConRdbmsConUserConPass); 
                          
                        mysqli_select_db($dbconConDB);
                          
                        mysqli_query($dbcon"SET NAMES 'utf8'");

                        # -- DATEN ABRUFEN ---------------------------------------------------------------
                          // SQL-Query-String erzeugen ---------------------------------------------------
                          // Hier wird der Parameter aufgenommen und mit mysqli_real_escape_string behandelt
                          
                        $MeinInput mysqli_real_escape_string($dbcon$pMeinInput);
                          
                        /* $StrSQL = 'SELECT ...'; */ /* Enthält $MeinInput im WHERE-CLAUSE */

                          //-- AUSFÜHREN & AUSWERTEN -----------------------------------------------------
                          
                        $result mysqli_query($dbcon$StrSQL);      

                          while (
                        $row mysqli_fetch_array($result)) {
                            
                        // hier wird Zeile für Zeile die Ausgabe aufgebaut, z.B.
                            
                        $rc '<tr>
                                     <td>Blabla'
                        .$row[0].'blub.</td>';
                            
                        // usw. usf.         
                          


                        # -- AUFBAU DER AUSGABE ----------------------------------------------------------  
                            // Einbettung der Ausgabe in z.B. <SELECT>...</SELECT> oder <table>... </table>
                          
                        return $rc;  

                        ?>
                        Die Cracks hier bitte mitlesen und ggfs. korrigieren bzw. ergänzen!

                        Kommentar


                        • #13
                          Konkret würde ich den Variablen erstmal sinnvolle Namen verpassen. Mit $rc, $zumbru usw. kann ich zb. nichts anfangen. Genauso gut könnte ich auch $tmp1, $tmp2 usw. dafür verwenden, weil genauso aussagekräftig, aber ich dafür weniger die grauen Zellen anstrengen musste. Präfixe in Variablen machen (für mich) auch wenig Sinn. Es sollte dem Entwickler schon ersichtlich sein das bei Variablen wie $StrSql, sich nicht um Integer handeln kann und damit ein "SELECT ...." nur ein String sein muss. Somit kann man statt $StrSql auch $sql schreiben. Das selbe gilt auch für Funktionen, weil man diese an Klammern () erkennt. Also statt fnc_ganzSicherEineFunktion(), reicht auch ein ganzSicherEineFunktion(). Des Weiteren sind Funktionen kleine Unterprogramme die etwas machen sollen. Deswegen bedient man sich bei der Namensuche für Funktionen ganz gerne bei Verben. Zum Beispiel, holeNutzerdaten(), zeigeNutzerdaten() usw. Ein StrTextVonDb() ist schon mal ein guter Anfang, weil ich davon jetzt ausgehe das ich zumindest irgendein Text aus der Datenbank bekomme. Nur welchen?!

                          Bin kein Crack

                          Kommentar


                          • #14
                            [gelöscht von Alf2016; Grund: sinnlos]

                            Kommentar

                            Lädt...
                            X