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

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
susanloek
Beiträge: 1
Registriert: 19. Okt 2015, 16:34

SQL Prepared Statements mit PDO

19. Okt 2015, 16:41

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?

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: SQL Prepared Statements mit PDO

20. Okt 2015, 14:55

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.

Zurück zu „Sonstiges“