Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql mit PHP auswerten

Einklappen

Neue Werbung 2019

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

  • mysql mit PHP auswerten

    Könnt ihr mir bei zwei Fragen zu mysql weiterhelfen. Ich möchte über ein PHP Formular eine mysql Datenbank ausfüllen und in einer weiteren Datei diese Eingabe durchsuchen und in einer Tabelle ausgeben. Soweit klappt es alles,

    nur Frage1:

    wenn ich über den LIKE die mysql abfrage sieht der Code so aus:

    PHP-Code:
    $query "SELECT * FROM `tabelle` WHERE  wertx LIKE '%suche%' "
    Ich möchte die Suche aber gerne vorher in eine Variable packen, da der Benutzer diese über einen POST festlegt, also soll das ganze so aussehen:

    PHP-Code:
    $suche $_POST["benutzer"];
    $query "SELECT * FROM `tabelle` WHERE  wertx LIKE '%'$suche'%' "
    Hier hat sich ein Syntaxfehler eingeschlichen, könntet ihr mir weiterhelfen?

    Frage 2:

    In die mysql kann der Benutzer ein Datum eintragen, später bei Abfrage vom Nutzer sollen die Daten in einer Tabelle gezeigt werden, allerdings sortiert nach dem Datum. Ist ein Datum abgelaufen, soll der Eintrag in der mysql gelöscht werden. Wie kan ich das in PHP am besten umsetzen?


    Vielen Dank für eure Hilfe!

  • #2
    Code:
    "SELECT * FROM `tabelle` WHERE  wertx LIKE '%'$suche'%' ";
    Zuviele [einzelne] Hochkommas... zudem eine SQL Injection Lücke.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Was verwendest du mysqli oder pdo, das ist nicht deutlich?
      Mit prepared statements umgehst du das Problem der SQL Injection.

      SELECT * sollte man nicht schreiben, sondern stattdessen alle Spalten aufführen die man auch ausgegeben haben möchte.

      zu Frage 2:
      Das Datum speicherst du in ein Feld mit Datentyp date. Damit hast du alle Möglichkeiten offen, was Sortierung und Filterung betrifft.
      Sortiert nach Datum absteigend z. B:
      Code:
      SELECT `id`, `name`, `datum` FROM `mytable` ORDER BY `datum` DESC
      siehe https://dev.mysql.com/doc/refman/8.0/en/data-types.html
      und https://dev.mysql.com/doc/refman/8.0/en/select.html

      Löschen alter Beiträge die älter als 1 Woche sind
      Code:
      DELETE FROM `mytable` WHERE `datum < ADDDATE(NOW(), INTERVAL -1 WEEK)"
      siehe https://dev.mysql.com/doc/refman/5.5...oral-intervals

      Kommentar


      • #4
        Vielen Dank für eure nützlichen Antworten.
        Wie müsste die Zeile dann richtig und ohne Injektionslücke aussehen?

        $query = "SELECT * FROM `tabelle` WHERE wertx LIKE '%'$suche'%' ";

        Kommentar


        • #5
          https://php-de.github.io/jumpto/sql-injection/

          Kommentar


          • #6
            Du hast ja immer noch den Stern nach dem Select stehen. Ist es so viel Mühe es richtig zu machen.
            Hier mal ein konstruiertes Beispiel
            Code:
            SELECT `id, `header`, `content` FROM `mytable` WHERE `wertx` LIKE :searchterm
            Wie müsste die Zeile dann richtig und ohne Injektionslücke aussehen?
            Als PDO mit prepared Statement könnte das so aussehen:
            PHP-Code:
            if ( isset($_GET['suche']) ){
                
            $sql ="SELECT `id, `header`, `content` FROM `mytable` WHERE `wertx` LIKE :searchterm";
                
            $stmt $pdo->prepare($sql);                       
                
            $stmt->execute( array(':searchterm'=>'%'.$_GET['suche'].'%') );

            Und ein komplettes Beispiel mit Mysqli und prepared statement:
            PHP-Code:
            if ( isset($_GET['suche']) ){
                
            $stmt $mysqli->prepare("SELECT `id, `header`, `content` FROM `mytable` WHERE `wertx` LIKE ?");
                
            $stmt->bind_param"s""%{$_GET['suche']}%" );
                
            $stmt->execute();

            Wie man sieht gibt es verschiedene Wege die %-Zeichen einzubinden.

            Handbuch zu prepared statements

            Kommentar


            • #7
              Zitat von Microvilli Beitrag anzeigen
              Vielen Dank für eure nützlichen Antworten.
              Wie müsste die Zeile dann richtig und ohne Injektionslücke aussehen?

              $query = "SELECT * FROM `tabelle` WHERE wertx LIKE '%'$suche'%' ";
              Hallo Mircovilli

              im Zweifelsfalle lassen sich die Strings verketten. Das ist relativ sicher, aber nicht sehr schnell...

              $query = "SELECT * FROM `tabelle` WHERE wertx LIKE '%".$suche."%' ";

              Kommentar


              • #8
                Das ist relativ sicher, aber nicht sehr schnell...
                Kannst du das mal näher beleuchten.

                Kommentar


                • #9
                  Man vertippt sich sehr leicht und findet dann die fehlenden Quotes in einem komplexen Code gerne mal nicht sofort. Auch hat der Interpreter mit vielen Quotes schon mal etwas Zeit aufzuwenden.
                  Meintest du so was als Beleuchtung?

                  Kommentar


                  • #10
                    Ne. Deine Aussage
                    im Zweifelsfalle lassen sich die Strings verketten. Das ist relativ sicher, aber nicht sehr schnell...
                    Was ist an Verketten von Strings nicht schnell?

                    Der unwissende Laie könnte nun auf die Idee kommen,, es nicht so zu machen weil es ja langsam ist.
                    Die Realität ist aber, dass das Verketten von Zeichenfolgen einer der Stärken von PHP ist, oder habe ich da was nicht richtig verstanden.

                    Kommentar


                    • #11
                      Und sicher ist es schon gar nicht.

                      Kommentar


                      • #12
                        Achso, verzeih. Dann war deine Frage nicht aus Wissensdurst, sondern aus Belehrsamkeit - verstehe.
                        Tut mir leid, wenn ich dich mit meiner simplen Art provoziert haben sollte. Wusste nicht, dass das eine Prüfung war. Hätte mich dann besser vorbereitet. Sorry

                        Kommentar

                        Lädt...
                        X