[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • SQL Prepared Statements mit PDO
Seite 1 von 1

SQL Prepared Statements mit PDO

Verfasst: 19. Okt 2015, 16:41
von susanloek
Ich versuche derzeit eine SQL-Abfrage mit Prepared Statements (PDO) umzusetzen, da es sich um eine Suchfunktion handelt und ich eine SQL Injection vorbeugen möchte.
Nun probiere ich schon seit Stunden herum und habe schon etliche "Anleitungen" gelesen, jedoch sagt beschreibt jede die Funktionsweise anders. Ich weiß einfach nicht weiter und bin total verwirrt.
Ist es denn wirklich so schwer, meine doch simple Abfrage in PDO zu schreiben?

Zum Aufbau:
Auf meiner Seite befindet sich ein einfaches Formular mit einem text-input, welches als Suchfeld dient. Mit dem abschicken des Formulares wird der input mit einer Datenbank abgegblichen und ALLE Ergebnisse (LIKE) werden dargestellt.
So sieht mein "normales" query Script aus:

Code: Alles auswählen

 <?php
    if ( $_SERVER["REQUEST_METHOD"] == 'POST' ) {

    $suche = htmlspecialchars($_POST['suche']);
        
    if (!empty($suche)) {    
 
    $sql = new rex_sql;

    $sql->debugsql = 0;
    
    if($gruppe_teilnehmer == 'admin') {
        $sql->setQuery("SELECT * FROM rex_projekte WHERE projektname LIKE '%$suche%' OR projektnummer_hw LIKE '%$suche%' OR projektnummer_k LIKE '%$suche%'");
    } else {
        $sql->setQuery("SELECT * FROM rex_projekte WHERE (projektname LIKE '%$suche%' OR projektnummer_hw LIKE '%$suche%' OR projektnummer_k LIKE '%$suche%') AND gruppe = '$gruppe_teilnehmer'");
    }

    if ($sql->getRows() >= 1) {
    for($i = 1; $i <= $sql->getRows(); $i++, $sql->next())
    {
        $projektname_suche = $sql->getValue("projektname");
        $projektnummer_hw_suche = $sql->getValue("projektnummer_hw");
        $projektnummer_k_suche = $sql->getValue("projektnummer_k");
        $projektseite_suche = $sql->getValue("projektseite");
        $projektstatus_suche = $sql->getValue("projektstatus");
        $projektdatum_suche = $sql->getValue("projektdatum");
        $liefertermin_suche = date("d.m.Y",strtotime($sql->getValue("liefertermin")));
        
        $suche_projekt_ausgabe .= '<li><a href="index.php?article_id='.$projektseite_suche.'"></a><i class="fa fa-file-o"></i>'.$projektname_suche.'<ul><li><i class="fa fa-calendar"></i>'.$projektdatum_suche.'</li><li><i class="fa fa-circle"></i>'.$projektnummer_hw_suche.'</li><li><i class="fa fa-circle"></i>'.$projektnummer_k_suche.'</li><li><i class="fa fa-info-circle"></i>'.$projektstatus_suche.'</li><li><i class="fa fa-clock-o"></i>'.$liefertermin_suche.'</li></ul></li>';  
        
    }    
    }
        
    if(empty($suche_projekt_ausgabe)) {
        $suche_projekt_ausgabe .= '<div style="padding: 20px 0;">Es wurden keine Projekte gefunden!</div>';
    }
        
    }  
    }        
    ?>
Zur Information: Wie ihr feststellt habe ich zwei Querys definiert. Dies liegt an der Nutzerstruktur. Alle Nutzer [der Seite], welche die Gruppe "admin" haben durchsuchen alle Zeilen der Tabelle. Benutzer mit Beispielsweise der Gruppe "Moderator" durchsuchen nur die Zeilen mit der Gruppe "Moderator".

Könnt ihr mir helfen dieses Script mithilfe von PDO mit Prepared Statements umzuschreiben?

Vielen Dank! :)

P.S.

Code: Alles auswählen

$sql = new rex_sql;
macht dies nicht automatisch, oder habe ich mir ganze Mühe umsonst gemacht?

Re: SQL Prepared Statements mit PDO

Verfasst: 20. Okt 2015, 14:55
von Ingo
Lesen, lernen und verstehen. Was anderes hilft da nicht. Deine Beiträge auf stackoverflow zeugen von einer gewissen Faulheit/ Ungeduld. Damit kommst du nicht weiter.
Diesen Link hast du schon auf stackoverflow bekommen - eine bessere Anleitung und Erklärung wirst du auch hier nicht finden.