Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler beim Daten Eintragen in die Datenbank

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

  • Fehler beim Daten Eintragen in die Datenbank

    Hallo Forumnutzer,

    ich habe ein Problem mit meinem Backend Beitrags script.
    Ich bin derzeit dabei das ganze zusammen zu bauen und habe nun einen editor in meine Seite eingebaut und möchte nun die Beiträge an eine Datenbank übergeben mithilfe des folgendem php scripts.

    PHP-Code:
    <?php
    if(isset($_POST['article-submit'])){

        require 
    'dbh.inc.php';

        
    $title $_POST['title'];
        
    $text $_POST['atext'];
        
    $author $_SESSION['uid'] = 'Peter';
        
    $createddate '2019-06-11';
        
    $editeddate '2019-06-12';

        if(empty(
    $title) || empty($text)) {
            
    header("Location: ../editor.php?error=emptyfields");
            exit();
        }
        else {
            
    $sql "INSERT INTO article (author, title, created, edited, atext) VALUES ($author$title$createddate$editeddate$text)";

            if (
    $conn->query($sql) === TRUE) {
                echo 
    "New record created successfully";
            } else {
                echo 
    "Error: " $sql "<br>" $conn->error;
            }
        }
        
    mysqli_close($conn);
    }
    Derzeit sind noch Test werte drin, dennoch erhalte ich beim "Senden" folgenden Fehler:
    Code:
    Error: INSERT INTO article (author, title, created, edited, atext) VALUES (Peter, Dies ist Test Der Nette Beitrag!, 2019-06-11, 2019-06-12,
    
    Dies ist ein Test!
    
    )
    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ist Test Der Nette Beitrag!, 2019-06-11, 2019-06-12,
    
    Dies ist ein Test!
    
    ' at line 1
    Ich bitte um schnelle hilfe.


  • #2
    Verwende ein Prepared Statement (https://www.php.net/manual/de/mysqli...statements.php), dann behebst du erstens den Fehler (Wenn du Text einträgst muss das logischerweise in Anführungszeichen) und zweitens beseitigst du auch noch die SQL-Injection-Lücke.

    Kommentar


    • #3
      Werte sollten nicht direkt in SQL-Code eingefügt werden.

      Entweder du beschäftigst damit, wie Werte richtig maskiert werden müssen oder du verwendest gleich Prepared Statements.

      Kommentar


      • #4
        Nur einmal zur Kontrolle ob nicht noch etwas fehlt. Ist das so richtig oder ist noch was falsch?
        Das einzigste was der User eintragen kann ist der Title und der Beitrags Text. [title, text]

        Hier jetzt der Bearbeitete Code, welcher auch funktioniert:
        PHP-Code:
        <?php
        if(isset($_POST['article-submit'])){

            require 
        'dbh.inc.php';

            
        $title $_POST['title'];
            
        $text $_POST['atext'];
            
        $author 'Peter';
            
        $createddate '2019-06-11';
            
        $editeddate '2019-06-12';

            if(empty(
        $title) || empty($text)) {
                
        header("Location: ../editor.php?error=emptyfields");
                exit();
            }
            else {
                
        $sql "SELECT id FROM article WHERE id=?";
                
        $stmt mysqli_stmt_init($conn);
                if(!
        mysqli_stmt_prepare($stmt$sql)){
                    
        header("Location: ../editor.php?error=sqlerror");
                    exit();
                }
                else {
                    
        $sql "INSERT INTO article (author, title, created, edited, atext) VALUES (?, ?, ?, ?, ?)";
                    
        $stmt mysqli_stmt_init($conn);
                    if(!
        mysqli_stmt_prepare($stmt$sql)){
                        
        header("Location: ../editor.php?error=sqlerror");
                        exit();
                    }
                    else {
                        
        mysqli_stmt_bind_param($stmt"sssss"$author$title$createddate$editeddate$text);
                        
        mysqli_stmt_execute($stmt);
                        
        header("Location: ../editor.php?register=success");
                        exit();
                    }
                }
            }
            
        mysqli_stmt_close($stmt);
            
        mysqli_close($conn);
        }
        else {
            
        header("Location: ../editor.php");
            exit();
        }

        Kommentar


        • #5
          Nun habe ich nur noch ein Problem, damit alles auf der Homepage richtig angeziegt wird, müssen noch einige extra code abschnitte hinzugefügt werden.
          Wie kann ich das folgende direkt mit übergeben?

          HTML-Code:
          <div class="row items-container bottom-wrapper">
          <p>&nbsp;<br>&nbsp;</p>
          </div>
          <div class="row">
          <p class="section-description">
          <!-- Hier kommt der Text aus dem editor rein! -->
          </p>
          </div>

          Kommentar


          • #6
            Was ich noch dazu schreiben wollte, der Text kommt so an:
            Code:
            <p>Demo text<br />
            Demo text<br />
            Demo text<br />
            Demo text. Demo text<br />
            Demo text<br />
            <br />
            Demo text<br />
            <br />
            Mfg<br />
            Peter</p>
            
            <p><a href="https://www.google.de/" target="_blank">Demo Link</a></p>
            Das problem ist aber, dass die <p> & </p> tags entfernt werden müssen, da es sonnst zu komplikationen mit dem Design kommt. ist das irgendwie möglich?

            Kommentar


            • #7
              Wenn du HTML-Inhalte vom Benutzer annimmst, musst du diese vor dem Speichern validieren bzw. bereinigen. Sowas kann zum Beispiel HTML Purifier.

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                Wenn du HTML-Inhalte vom Benutzer annimmst, musst du diese vor dem Speichern validieren bzw. bereinigen. Sowas kann zum Beispiel HTML Purifier.
                Kann man das nicht einfach vor dem eintragen vom Text in die Datenbank machen, es muss ja "nur" der <p> tag entfernt werden, der rest funktioniert ja ohne Probleme!?
                Zudem wird alles an tags entfernt, wenn ich da mit dieser demo teste

                Kommentar


                • #9
                  Zitat von Sullaysur Beitrag anzeigen
                  Kann man das nicht einfach vor dem eintragen vom Text in die Datenbank machen, es muss ja "nur" der <p> tag entfernt werden, der rest funktioniert ja ohne Probleme!?
                  Wie ich gesagt habe, HTML Purifier kann das. Und nur <p> entfernen wird wohl nicht ausreichen. Was ist, wenn jemand JavaScript-Code eingeschleust hat? Dadurch machst du deine Seite anfällig für XSS-Attacken.

                  Kommentar


                  • #10
                    Zitat von hellbringer Beitrag anzeigen

                    Wie ich gesagt habe, HTML Purifier kann das. Und nur <p> entfernen wird wohl nicht ausreichen. Was ist, wenn jemand JavaScript-Code eingeschleust hat? Dadurch machst du deine Seite anfällig für XSS-Attacken.
                    Ein Admin wird wohl kaum seine eigene Seite Angreifen oder liege ich da falsch? Es haben nur eingetragene Personen zugriff auf das Backend.
                    zudem muss hinter jedem <a> tag ja auch noch die class"a-article" übergeben werden.

                    Anderenfalls würde ich auch eine möglichkeit darin sehen das ganze im Editor schon als grundgerüst anzuzeigen, aber wie kann ich im CKEDITOR 4 machen?

                    Kommentar


                    • #11
                      Zitat von Sullaysur Beitrag anzeigen
                      Ein Admin wird wohl kaum seine eigene Seite Angreifen oder liege ich da falsch? Es haben nur eingetragene Personen zugriff auf das Backend.
                      zudem muss hinter jedem <a> tag ja auch noch die class"a-article" übergeben werden.
                      Und ein Admin kann nicht per Copy&Paste Inhalte von woanders herkopieren, die eventuell nicht 100% vertrauenswürdig sind?

                      So oder so, wie ich gesagt habe, HTML Purifier kann genau das, was du willst. Was du dann damit machst, liegt bei dir.

                      Kommentar


                      • #12
                        SecurityIfRequired oder wie nennt man die Rangehensweise?
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche Tutorials

                        Kommentar


                        • #13
                          Zitat von hellbringer Beitrag anzeigen

                          Und ein Admin kann nicht per Copy&Paste Inhalte von woanders herkopieren, die eventuell nicht 100% vertrauenswürdig sind?

                          So oder so, wie ich gesagt habe, HTML Purifier kann genau das, was du willst. Was du dann damit machst, liegt bei dir.
                          Natürlich kann er, wird aber nicht passieren weil der weiß was er tut und nichts copy pastet, da alles aus seinem Kopf raus geschrieben wird.

                          Kommentar


                          • #14
                            "wird nicht passieren" ist eine Schutzbehauptung, um sich dem Thema Sicherheit nicht widmen zu müssen. Solange Du allein nicht der User/Admin bist, kannst Du Dir nie sicher sein...
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche Tutorials

                            Kommentar


                            • #15
                              Beim Thema Sicherheit sollte man immer mit dem Schlimmsten rechnen.

                              Kommentar

                              Lädt...
                              X