Ankündigung

Einklappen
Keine Ankündigung bisher.

undefined function mysql_connect() mit Php 7

Einklappen

Neue Werbung 2019

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

  • #31
    Zitat von Poster Beitrag anzeigen
    PHP-Code:
    $row $query->fetch_assoc($id); 
    Ist da ein Syntaxfehler drin oder darf da keine Variable rein?
    Was sagt die Doku dazu?

    PHP-Code:
    row $result->fetch_assoc()) {
    //...
    $row["Name"]
    //... 
    Name wäre der Spaltenname
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #32
      Nimm doch Prepared Statments.. Ist auch nicht viel schwerer. Ich nutze zwar nur PDO aber müsste wohl so irgendwie für deinen Fall gehen.

      PHP-Code:
      $id $_GET['anbieter'];  // ~
      // ...

      $sql "
          SELECT adresse FROM meinanbieter WHERE id = ?
      "
      ;
      $stmt $mysqli->prepare($sql);
      $stmt->bind_param('i'$id);
      $stmt->execute();

      $row $stmt->fetch_assoc();
      $site $row['adresse']; 
      Prüfung ob $_GET Anbieter vorhanden ist bzw. was bei Aufruf ohne dem Parameter passiert, darfst du selbst noch ergänzen.
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #33
        Bei mysqli brauchts noch den Zwischenschritt über ->get_result() soweit ich weiss.

        PHP-Code:
        $sql "
            SELECT adresse FROM meinanbieter WHERE id = ?
        "
        ;
        $stmt $mysqli->prepare($sql);
        $stmt->bind_param('i'$_GET['anbieter']);
        $stmt->execute();

        $result $stmt->get_result();
        $row $result->fetch_assoc();
        $site $row['adresse']; 

        Kommentar


        • #34
          Zitat von hellbringer Beitrag anzeigen
          Du hast seine SQL-Injection-Lücke. Wenn du einen String in SQL-Code einfügen willst, musst du ihn in Hochkomma schreiben. Ansonsten wird der Wert als SQL-Code interpretiert.
          Schade ich verste nicht was du meinst, hab auch ein bisschen gegoogelt, aber da kommt man von einem zu anderen.
          Könntest du mir ein Beispiel nennen, das wäre sehr nett, denn ich habe ja von diesem Injection und Hackgeschichten null Ahnung.

          Du bezieht dich ja sicher auf diese Zeile:
          PHP-Code:
          $id $mysqli->real_escape_string($_GET['anbieter']); 

          Was ich nicht verstehe, hier steht:
          mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a.

          Ich dachte das wäre damit erledigt, aber wie gesagt ich habe null Ahnung davon.

          Kommentar


          • #35
            Nimm doch bitte einfach die Zeilen aus #33 bzw. #34 und gut ist. So viel Beiträge für eine einzige DB Abfrage

            oder nimm PDO
            PHP-Code:
            $dsn  'mysql:dbname=test;host=localhost;charset=utf8';
            $user 'root';
            $pass '';
            $options = [
                
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
                PDO
            ::ATTR_EMULATE_PREPARES => false
            ];
            $pdo = new PDO($dsn$user$pass$options);


            $sql "
                SELECT adresse FROM meinanbieter WHERE id = :id
            "
            ;
            $stmt $pdo->prepare($sql);
            $stmt->execute( ['id' => $id] );
            $row $stmt->fetch();

            echo 
            $row['adresse']; 
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #36
              Zitat von Poster Beitrag anzeigen
              Schade ich verste nicht was du meinst, hab auch ein bisschen gegoogelt, aber da kommt man von einem zu anderen.
              Könntest du mir ein Beispiel nennen, das wäre sehr nett, denn ich habe ja von diesem Injection und Hackgeschichten null Ahnung.

              Du bezieht dich ja sicher auf diese Zeile:
              PHP-Code:
              $id $mysqli->real_escape_string($_GET['anbieter']); 
              Beispiel: $_GET['anbieter'] = '1 OR 1'; und schon erhält man statt einem Datensatz alle Datensätze. Natürlich kann man noch viel schädlicheren SQL-Code einbauen.

              mysqli_real_escape_string() ist keine Wunderfunktion, die aus schädlichem Code unschädlichen Code macht. Man muss es schon auch richtig verwenden und verstehen, was man da tut.

              Kommentar


              • #37
                Also der Code funktioniert. Ist er jetzt sicher gegen SQL-Injectionen?
                PHP-Code:
                <?php
                $mysqli 
                = new mysqli("localhost""a123456""b123456","a123456");
                $sql "SELECT adresse FROM meinanbieter WHERE id = ?";
                $stmt $mysqli->prepare($sql);
                $stmt->bind_param('i'$_GET['anbieter']);
                $stmt->execute();
                $result $stmt->get_result();
                $row $result->fetch_assoc();
                $site $row['adresse'];
                header("HTTP/1.1 301 Moved Permanently");
                header("Location: http://" $site);
                exit;
                ?>

                Kommentar


                • #38
                  Ja, weil die Eingabe nun nicht mehr als Teil der SQL-Syntax verwendet/eingeschleust werden kann.

                  Und entferne am Ende des Codes bitte die schliessende PHP Klammer.

                  The closing ?> tag MUST be omitted from files containing only PHP.
                  https://www.php-fig.org/psr/psr-2/#22-files
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #39
                    Zitat von hausl Beitrag anzeigen
                    Ja, weil die Eingabe nun nicht mehr als Teil der SQL-Syntax verwendet/eingeschleust werden kann.
                    Und entferne am Ende des Codes bitte die schliessende PHP Klammer.
                    https://www.php-fig.org/psr/psr-2/#22-files
                    Hab ich gemacht und das wußte ich auch noch nicht, dass man <?php nicht mehr unten schließen muß.
                    Das entspricht überhaupt nicht meinem Ordnungsprinzip, aber gut ist.

                    Dein PDO-Code schau ich mir später auch noch einmal, da du ja sagst, er wäre moderner. Aber jetzt muss ich leider noch vieles anderes machen.

                    Habt Alle vielen Dank für Eure geduldige Hilfe.

                    Kommentar


                    • #40

                      nicht mehr unten schließen muß.
                      .. nicht mehr schliessen soll. Das ist absolut unnötig und nur eine Fehlerquelle. Wenn du da zB nur ein Leerzeichen danach hast, dann kannst du dich zB bei der "Headers already sent.." Fehlermeldung mal auf die Suche machen. Und so weiter...


                      er wäre moderner
                      Njaein... Es ist nur so das das Interface irgendwie logischer/klarer/ok - moderner ist - meiner Meinung nach, Und auch das "Binden" generell und die named Parameter "SELECT ... WHERE id = :id" die man direkt im SQL verwenden kann sehr praktisch, gerade wenn man mehr Werte nutzt als die Fragezeichen, wo man stark auf die Reihenfolge achten muss.. Dann kann man auch SQLite etc.. schnell mal ansprechen etc etc..

                      Ist ev. auch Geschmackssache, hier im Forum bevorzugen was man so liest viel mehr Leute PDO, und das hat dann halt ja auch irgendwo (s)einen Günde.
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar

                      Lädt...
                      X