使用 php 将文件直接从 html 形式上传到 mariadb 表中的 LONGBLOB 列中

问题描述 投票:0回答:1

大家好,就像我在标题中已经解释的那样,我尝试从我的 mariadb 数据库 booksummerytable 中的 html 表单上传文件。我在表中的 Student_id 和 book_id 列中获得了一个数据库条目,但文件条目只是不想在文件的 LONGBLOB 列中传递。

  <?php
  session_start();
  if ($_SESSION["rolle"] === "schueler" && isset($_GET['id'])) {
      $buchId = $_GET['id'];

      $dbHost = '...';
      $dbUser = '...';
      $dbPass = '...';
      $dbName = '...';

      $conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

      if ($conn->connect_error) {
          die("Verbindung zur Datenbank fehlgeschlagen: " . $conn->connect_error);
      }

      // Wiederholen Sie Ihre Datenbankabfrage, um die Buchinformationen zu erhalten
      $sql = "SELECT title FROM buecher WHERE id = ?";
      $stmt = $conn->prepare($sql);
      $stmt->bind_param("i", $buchId);
      $stmt->execute();
      $result = $stmt->get_result();

      if ($result->num_rows == 1) {
          $row = $result->fetch_assoc();
          $buchtitel = $row['title'];

          // Hier fügen wir das Formular zum Hochladen der Zusammenfassung hinzu
          echo '<h2>Zusammenfassung für das Buch: ' . $buchtitel . '</h2>';
          echo '<form action="upload_zusammenfassung.php" method="post" enctype="multipart/form-data">';
          echo '    <input type="file" name="zusammenfassung" id="zusammenfassung">';
          echo '    <input type="hidden" name="buch_id" value="' . $buchId . '">';
          echo '    <input type="submit" value="Zusammenfassung hochladen">';
          echo '</form>';
      } else {
          echo "Buch nicht gefunden.";
      }

      $stmt->close();
  }
  ?>

另一个文件,数据库条目发生在哪里

<?php
error_reporting(E_ALL);

session_start();

if ($_SESSION["rolle"] === "schueler" && isset($_FILES['zusammenfassung']) && isset($_POST['buch_id'])) {
    // Verbindung zur Datenbank herstellen
    $dbHost = '...';
    $dbUser = '...';
    $dbPass = '...';
    $dbName = '...';

    $conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

    if ($conn->connect_error) {
        die("Verbindung zur Datenbank fehlgeschlagen: " . $conn->connect_error);
    }

    $buchId = $_POST['buch_id'];

    // Dateiinformationen

    $dateiTmpName = $_FILES['zusammenfassung']['tmp_name'];
    $dateiDaten = file_get_contents($dateiTmpName);

    // Schüler-ID aus der Datenbank anhand des Benutzernamens holen
    $schuelerBenutzername = $_SESSION["username"];


    $sqlSchuelerId = "SELECT id_student FROM students WHERE newUsername = ?";
    $stmtSchuelerId = $conn->prepare($sqlSchuelerId);
    $stmtSchuelerId->bind_param("s", $schuelerBenutzername);
    $stmtSchuelerId->execute();
    $stmtSchuelerId->bind_result($schuelerId);
    $stmtSchuelerId->fetch();
    $stmtSchuelerId->close();


        // SQL-Befehl, um die Zusammenfassung in der Datenbank zu speichern
        $sql = "INSERT INTO buchzusammenfassung (idSchueler, idBuch, datei) VALUES (?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("iib", $schuelerId, $buchId, $dateiDaten);

        if ($stmt->execute()) {
            echo "Die Zusammenfassung wurde erfolgreich hochgeladen und in der Datenbank gespeichert.";

        } else {
            echo "Fehler beim Hochladen der Zusammenfassung.";
        }

        $stmt->close();


    $conn->close();
}
?>

php html forms file upload
1个回答
0
投票

您的代码对

LONGBLOB
使用了不正确的数据类型绑定。绑定二进制数据时,正确使用的字符串类型是“s”。

// Correct the bind_param line to use "s" for binding LONGBLOB data
$stmt->bind_param("iis", $schuelerId, $buchId, $dateiDaten);
© www.soinside.com 2019 - 2024. All rights reserved.