Programmiersprache – die neusten Beiträge

Upload API mit NextJS und Azure Portal funktioniert nicht?

Hallo, ich bekomme wenn ich Videos über die API in Azure Portal hochlade immer eine Fehlermeldung. Manchmale sieht sie so aus:

Parsed files: {
  videoFile: [
    PersistentFile {
      _events: [Object: null prototype],
      _eventsCount: 1,
      _maxListeners: undefined,
      lastModifiedDate: 2024-12-17T10:12:37.964Z,
      filepath: 'C:\\Users\\thoma\\AppData\\Local\\Temp\\19612948a7cd7d81f78632e00.mp4',
      newFilename: '19612948a7cd7d81f78632e00.mp4',
      originalFilename: 'sample-2.mp4',
      mimetype: 'video/mp4',
      hashAlgorithm: false,
      size: 30424618,
      _writeStream: [WriteStream],
      hash: null,
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false
    }
  ]
}

Manchmal (gefühlt oft bei kleineren Dateien) funktioniert es auch der Log sieht dann so aus:

Uploading file from path: C:\Users\thoma\AppData\Local\Temp\19612948a7cd7d81f78632e00.mp4
Request timed out!
File uploaded to Azure successfully: sample-2.mp4

Hier lade ich noch den API Code hoch:

import { BlobServiceClient, generateBlobSASQueryParameters, BlobSASPermissions } from '@azure/storage-blob';
import formidable from 'formidable';
import fs from 'fs/promises';
import { v4 as uuidv4 } from 'uuid';


export const config = {
  api: {
    bodyParser: false, // Disable default body parsing for file uploads
  },
};


// Azure Storage connection string
const AZURE_STORAGE_CONNECTION_STRING =
  'DefaultEndpointsProtocol=https;AccountName=innowesovideos;AccountKey=uyJz3dlCW/hd+t3Y48pSfuk1Q+pV63S1Hs48uvGIJW3ubaO/ngtSMrzoKRvBE4so7MP9zz73uaLl+AStwmS6EA==;EndpointSuffix=core.windows.net';


export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).json({ message: 'Only POST requests are allowed' });
  }


  let filePath = ''; // Variable to track the file path for cleanup


  try {
    // Set a timeout to prevent stalls
    const timeout = setTimeout(() => {
      console.error('Request timed out!');
      if (!res.writableEnded) {
        res.status(504).json({ message: 'Request timed out. Please try again.' });
      }
    }, 15000); // 15-second timeout


    // Initialize formidable for file parsing
    const form = formidable({
      keepExtensions: true, // Keep file extensions
      maxFileSize: 5000 * 1024 * 1024, 
    });
    console.log('New filesize')


    // Parse the incoming form data
    const { files } = await new Promise((resolve, reject) => {
      form.parse(req, (err, fields, files) => {
        if (err) {
          console.error('Error parsing form:', err);
          reject(err);
        } else {
          resolve({ fields, files });
        }
      });
    });


    console.log('Parsed files:', files);


    // Normalize videoFile input (handle single and multiple files)
    const fileData = Array.isArray(files.videoFile) ? files.videoFile[0] : files.videoFile;


    // Validate file presence and format
    if (!fileData || !fileData.filepath) {
      throw new Error('No video file provided.');
    }


    filePath = fileData.filepath;
    if (!filePath) throw new Error('No valid file path found.');
    if (fileData.mimetype !== 'video/mp4') throw new Error('Only MP4 files are allowed.');


    console.log('Uploading file from path:', filePath);


    // Generate a unique file name for Azure Blob Storage
    const fileName = fileData.originalFilename || `${uuidv4()}.mp4`;


    // Load the file as a buffer
    const fileBuffer = await fs.readFile(filePath);


    // Initialize Azure Blob Storage Client
    const blobServiceClient = BlobServiceClient.fromConnectionString(AZURE_STORAGE_CONNECTION_STRING);
    const containerClient = blobServiceClient.getContainerClient('videos');
    const blockBlobClient = containerClient.getBlockBlobClient(fileName);


    // Upload the file to Azure Blob Storage
    await blockBlobClient.uploadData(fileBuffer, {
      blobHTTPHeaders: { blobContentType: 'video/mp4' },
    });
    // Generate a SAS token for the uploaded file
    const sasToken = generateBlobSASQueryParameters(
      {
        containerName: 'videos',
        blobName: fileName,
        permissions: BlobSASPermissions.parse('r'), // Read permissions
        startsOn: new Date(),
        expiresOn: new Date(new Date().valueOf() + 3600 * 1000), // Token valid for 1 hour
      },
      blobServiceClient.credential
    ).toString();
    const videoUrl = `${blockBlobClient.url}?${sasToken}`;
   
    clearTimeout(timeout);

    return res.status(200).json({ message: 'Video uploaded successfully', videoUrl });
  } catch (error) {
    console.error('Error during upload:', error.message);
    return res.status(500).json({ message: 'File upload failed', error: error.message });
  } finally {
    
    if (filePath) {
      try {
        await fs.unlink(filePath);
        console.log(`Temporary file deleted: ${filePath}`);
      } catch (cleanupErr) {
        console.error(`Failed to delete temporary file: ${filePath}`, cleanupErr);
      }
    }
  }
} 

Danke!

HTML, JavaScript, Programmiersprache, Webentwicklung, azure, React

Video abspielen und korrekt beenden (Java programmieren)?

Hallo,

ich probiere gerade mit der Programmiersprache Java einen Video-Player zu programmieren, welcher ein Video abspielen kann und per Button wieder beendet.

Allerdings, wenn ich es ein weiteres Mal öffnen will, wird es nicht mehr angezeigt und nichts passiert mehr. Wie kann ich das lösen? Ich komme einfach nicht mehr weiter oder gibt es eine einfache Möglichkeit?

Danke für eure Kommentare im Voraus.

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javax.swing.*;
import java.awt.*;
import java.io.File;

public class VideoOpener {
  private static JDialog videoDialog;
  private static MediaPlayer mediaPlayer;
  private static JFXPanel jfxPanel;

  public static void main(String[] args) {
    // Initialisiere JavaFX im Swing-Thread
    SwingUtilities.invokeLater(() -> {
      new JFXPanel(); // Initialisiert JavaFX (damit der JavaFX-Thread startet)
      playVideo(); // Startet das Video nach der Initialisierung
    });
  }

  public static void playVideo() {
    // Erstelle das JDialog für das Video
    videoDialog = new JDialog((Frame) null, "Video", true);
    videoDialog.setUndecorated(true);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    videoDialog.setSize(screenSize.width, screenSize.height); // Setzt das Fenster auf Vollbild
    videoDialog.setLocation(0, 0); // Positioniert das Fenster oben links
    JPanel videoPanel = new JPanel(new BorderLayout());
    jfxPanel = new JFXPanel(); // JFXPanel für JavaFX
    videoPanel.add(jfxPanel, BorderLayout.CENTER);

    // Schließen-Button (Fenster schließen)
    JButton closeButton = new JButton("Schließen");
    closeButton.addActionListener(e -> {
      stopVideo(); // Stoppt das Video
      videoDialog.dispose(); // Schließt das Dialog-Fenster
      Platform.exit(); // Beendet den JavaFX-Thread
    });
    // Setze den Button unten im JPanel
    videoPanel.add(closeButton, BorderLayout.SOUTH);

    // Lade und starte das Video im JavaFX-Thread
    Platform.runLater(() -> {
      File videoFile = new File("C:/Users/nikla/Pictures/Screenshots/Spiel/Film1.mp4");

      if (!videoFile.exists()) {
        System.err.println("Die Videodatei existiert nicht: " + videoFile.getAbsolutePath());
        return;
      }

      // Wenn der MediaPlayer bereits existiert, stoppen und freigeben
      if (mediaPlayer != null) {
        mediaPlayer.stop();
        mediaPlayer.dispose();
      }

      // Erstelle den neuen MediaPlayer
      Media media = new Media(videoFile.toURI().toString());
      mediaPlayer = new MediaPlayer(media);
      MediaView mediaView = new MediaView(mediaPlayer);
      mediaView.setFitWidth(screenSize.width);
      mediaView.setFitHeight(screenSize.height);

      // StackPane für das Layout
      StackPane stackPane = new StackPane();
      stackPane.getChildren().add(mediaView);

      // Setze die Scene für den JFXPanel
      Scene scene = new Scene(stackPane);
      jfxPanel.setScene(scene);

      // Spiele das Video ab
      mediaPlayer.play();
    });

    // Zeige das Video-Fenster an
    videoDialog.setContentPane(videoPanel);
    videoDialog.setVisible(true);
  }

  // Methode zum Stoppen des Videos und Freigeben des MediaPlayers
  private static void stopVideo() {
    if (mediaPlayer != null) {
      mediaPlayer.stop();
      mediaPlayer.dispose();
      mediaPlayer = null;
    }
  }
}
App, Java, Code, Programmiersprache

Wie erfolgt die Programmierung eines Arduino?

Guten Tag, ich habe ein Problem: Es werden Fehlercodes angezeigt, und ich erhalte fortlaufend Fehlermeldungen, obwohl die Bibliothek eingebunden wurde. Ist eine bloße Einbindung ausreichend? Script : #include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Servo.h>

#include <SPI.h>

#include <MFRC522.h>

// LCD setup

LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD I2C-Adresse: 0x27

// Ultraschallsensor Pins

const int trigPin = 9;

const int echoPin = 10;

// Servo setup

Servo doorServo;

const int servoPin = 3;

// RFID setup

#define RST_PIN 5

#define SS_PIN 10

MFRC522 rfid(RST_PIN, SS_PIN); //

// Variablen

long duration;

int distance;

// RFID-Karte UID

byte allowedUID[] = {0xDE, 0xAD, 0xBE, 0xEF}; // Ersetze mit deiner Karte

void setup() {

// LCD starten

lcd.begin(); // ()

lcd.backlight();

lcd.setCursor(0, 0);

lcd.print("System Init...");

// Ultraschallsensor

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

// Servo

doorServo.attach(servoPin);

doorServo.write(90); //

// RFID

SPI.begin();

rfid.PCD_Init();

// Serial Monitor

Serial.begin(115200); //

lcd.setCursor(0, 1);

lcd.print("Ready!");

delay(2000);

lcd.clear();

}

void loop() {

// Distanz messen

digitalWrite(trigPin, LOW);

delayMicroseconds(5); //

digitalWrite(trigPin, HIGH);

delayMicroseconds(15); //

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration * 0.034 / 1.5; //

// Distanz auf LCD anzeigen

lcd.setCursor(0, 0);

lcd.print("Distanz: ");

lcd.print(distance);

lcd.print("cm");

// RFID prüfen

if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {

if (checkRFID(rfid.uid.uidByte, rfid.uid.size)) {

lcd.setCursor(0, 1);

lcd.print("Access Granted!");

openDoor();

} else {

lcd.setCursor(0, 1);

lcd.print("Access Denied!"); //

}

delay(500); //

rfid.PICC_HaltA();

}

}

// RFID-Kartenprüfung

bool checkRFID(byte *uid, byte size) {

for (byte i = 0; i <= size; i++) { //

if (uid[i] != allowedUID[i]) {

return false;

}

}

return true;

}

// Tür öffnen und schließen

void openDoor() {

doorServo.write(180); //

delay(2000); //

doorServo.write(90); //

}

Was ist da der Fehler Vielen Dank!

programmieren, Programmiersprache

Website lädt Datei nicht hoch, warum?

Moin, kennt sich vielleicht jemand mit PHP und Html aus und weiß warum beim Upload der Datei nicht das Script "upload.php" ausgeführt wird? Versuche mich gerade beim Scripten, stehe allerdings gerade voll auf dem Schlauch... Danke!

<?php include 'header.php'; ?>
<?php
if(!isset($_SESSION['email'])){
  header('location:login.php');
  $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
}
 ?>
      <div class="breadcrumb">
        <div class="container">
            <a class="breadcrumb-item" href="index.php">Home</a>
            <span class="breadcrumb-item active">Welecome <?php echo $_SESSION['email'] ?></span>
            <span class="breadcrumb-item active">Upload Video</span>
        </div>
    </div>
    <section class="static about-sec">
        <div class="container">
            <h1>Upload Video</h1>
            <div class="form">
                <form class="" action="videoUpload.php" method="post">
                    <div class="row">
                        <div class="col-md-6">
                            <input type="hidden" name="id" value="">
                            <label for="name">Name of Video:</label>
                            <input type="text" name="name" value="" placeholder="Fantasy World" required>
                            <label for="video_url">Video URL</label>
                            <input type="file" name="video_url" required>
                            <label for="description">Description</label>
                            <input type="text" name="description" value="" placeholder="">
                            <label for="category">Category</label>
                            <select name="category">
                              <option value="Classic">Classic</option>
                              <option value="Adventerous">Adventerous</option>
                              <option value="Nature">Nature</option>
                              <option value="Others">Others</option>
                            </select>
                          </div>
                        </div>
							<div class="col-lg-8 col-md-12">
							<form action="upload.php" method="post" enctype="multipart/form-data">
							<input type="submit" class="btn black" value="Upload Image" name="submit">
							</form>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </section>


    <?php include 'footer.php';?>
HTML, Webseite, HTML5, Code, Datenbank, MySQL, PHP, Programmiersprache, Webdesign, Webentwicklung

Wie implementiere ich eine Mehrfachauswahl?

Kann ich es ermöglichen, dass der Benutzer mehrere Marken oder Baujahre gleichzeitig auswählen kann? Wie würde ich den Query entsprechend anpassen?


<?php
    require "includes/conn.inc.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Modelle</title>
</head>
<body>
    <h1>Modelle</h1>
    <form method="post">
        <label for="marke">
            Marke
            <input name="marke" type="text">
        </label>
        <label for="modell">
            Modell
            <input name="modell" type="text">
        </label>
        <label for="baujahr">
            Baujahr
            <input name="baujahr" type="text">
        </label>
        <button type="submit">Suchen</button>
    </form>
    <ul>
        <?php
            // Loop through tbl_marken and create WHERE clause
            $where_marke = "";
            if (count($_POST) > 0) {
                if (array_key_exists("marke", $_POST)) {
                    if (strlen($_POST["marke"] > 0)) {
                        $where_marke = "WHERE Markenname LIKE '%" . $_POST["marke"] . "%'";
                    }
                }
            }
            $conn = openConn();
            $markenSql = "
                SELECT 
                    * 
                FROM tbl_marken "
                . $where_marke . "
                ORDER BY Markenname ASC
            ";
            $marken = $conn->query($markenSql) or die($conn->error);
            while ($marke = $marken->fetch_object()) {
                echo "<li>";
                    echo $marke->Markenname;
                echo "</li>";
                
                // Loop through tbl_modell and create WHERE clause
                echo "<ul>";
                    $where_modell = "";
                    if (array_key_exists("modell", $_POST)) {
                        if (strlen($_POST["modell"] > 0)) {
                            $where_modell = " AND Modell LIKE '%" . $_POST["modell"] . "%'";
                        }
                    }
                    $modellSql = "
                        SELECT 
                            * 
                        FROM tbl_modelle 
                        WHERE FIDMarke=" . $marke->IDMarke . $where_modell . "
                        ORDER BY tbl_modelle.Modell ASC
                    ";
                    $modelle = $conn->query($modellSql) or die($conn->error);
                    while ($modell = $modelle->fetch_object()) {
                        echo "<li>";
                            echo $modell->Modell;
                        echo "</li>";   


                        // Loop through baureihen and create WHERE clause
                        echo "<ul>";
                            $where_bau = ["FIDModell=" . $modell->IDModell];
                            if (array_key_exists("baujahr", $_POST)) {
                                if(intval($_POST["baujahr"])>0) {
                                    $where_bau[] = "BaujahrVon<=" . $_POST["baujahr"];
                                    $where_bau[] = "BaujahrBis>=" . $_POST["baujahr"];
                                }
                            }
                            $bauSql = "
                                SELECT 
                                    * 
                                FROM tbl_baureihen 
                                WHERE " . implode(" AND ", $where_bau)
                            ;
                            $baureihen = $conn->query($bauSql) or die($conn->error);
                            while ($baureihe = $baureihen->fetch_object()) {                               
                                echo "<li><a href='modell_teile.php?IDBaureihe=" . $baureihe->IDBaureihe . "'>" . $baureihe->BaujahrVon . " - " . $baureihe->BaujahrBis . " </a></li>";
                            }
                        echo "</ul>";
                    }
                echo "</ul>";
            }
        ?>
    </ul>
</body>
</html>
Datenbank, Programmiersprache

Paypal SDK von USD auf EUR umstellen funktioniert nicht?

Ich habe beide Stellen im Code geändert:

script.src = `https://www.paypal.com/sdk/js?client-id=${clientId}&currency=EUR`;

und

currency_code: 'EUR',

Bekomme jedoch den folgenden Fehler https://pastebin.com/6eNUSdX9

Wichtigster Ausschnitt:

Error: Unexpected currency: EUR passed to order.create. Please ensure you are passing /sdk/js?currency=EUR in the paypal script tag. 

Der Fehler tritt auf, wenn ich USD auf EUR ändere. Hier ist meine

/app/paypal/page.tsx

https://pastebin.com/9GM500eR die ganze datei

Wichtigster Ausschnitt: der mit USD funktioniert:

<PayPalScriptProvider options={{ clientId }}>
            <div className="flex justify-center">
              <PayPalButtons
                style={{
                  layout: 'vertical',
                  color: 'blue',
                  shape: 'rect',
                  label: 'paypal',
                }}
                createOrder={(data, actions) => {
                  if (!actions || !actions.order) {
                    console.error('Fehler: actions.order ist nicht definiert');
                    return Promise.reject('Fehler bei der Erstellung der Bestellung');
                  }
 
                  return actions.order.create({
                    purchase_units: [
                      {
                        amount: {
                          currency_code: 'USD',
                          value: '100.00',
                        },
                      },
                    ],
                    intent: 'CAPTURE'
                  });
                }}
                onApprove={(data, actions) => {
                  if (!actions || !actions.order) {
                    console.error('Fehler: actions.order ist nicht definiert');
                    return Promise.reject('Fehler bei der Genehmigung der Bestellung');
                  }
 
                  return actions.order.capture().then((details) => {
                    console.log('Zahlung erfolgreich abgeschlossen:', details);
                    setPaymentSuccess(true);  // Zeigt die Erfolgsmeldung an
                    setErrorMessage('');  // Setzt die Fehlermeldung zurück
                    return Promise.resolve();
                  });
                }}
                onError={(err) => {
                  console.error('Fehler bei der PayPal-Zahlung:', err);
                  setErrorMessage('Es gab ein Problem bei Ihrer Zahlung. Bitte versuchen Sie es erneut.'); // Zeigt die Fehlermeldung an
                  setPaymentSuccess(false); // Setzt den Zahlungserfolgsstatus zurück
                }}
              />
            </div>
          </PayPalScriptProvider>

Meine

env Datei ist folgendermaßen konfiguriert:
makefile
Code kopieren
NEXT_PUBLIC_PAYPAL_CLIENT_ID = "12345"
PAYPAL_CLIENT_ID = "12345"
PAYPAL_CLIENT_SECRET = "ABCDEF"
PAYPAL_WEBHOOK_SECRET="XYZ123"

Ich habe den currency_code von 'USD' auf 'EUR' geändert und auch die URL des PayPal-Skripts angepasst:

script.src = `https://www.paypal.com/sdk/js?client-id=${clientId}&currency=EUR`;

Trotzdem bekomme ich den Fehler, dass EUR nicht als Währung erkannt wird.

Ich habe die Dokumentation auf PayPal Developer überprüft, und laut dieser ist

EUR

der richtige Währungscode.

  • Ich benutze Next.js 15 und habe auf React 18 downgraden müssen, da React 19 nicht mit
@paypal/react-paypal-js
  • kompatibel ist aber spielt eigentlich keiner olle und sowohl im sandbox oder live modus dasselbe das man nach dem klick auf dem button mit EUR einen fehler bekommt.

Kann mir jemand helfen, was hier das Problem ist?

PC, Computer, Internet, App, Technik, IT, Webseite, JavaScript, Code, Informatik, PayPal, Programmiersprache, sdk, Webentwicklung, node.js

Ist mein Ansatz sicher genug gegen SQL-Injection und andere Angriffe, oder sollte ich zusätzliche Sicherheitsmaßnahmen ergreifen?

<?php
session_start();
include('connection.php');



if (!isset($_SESSION['username'])) {
    die("Session abgelaufen. Bitte loggen Sie sich erneut ein.");
}


$username_input = $_SESSION['username']; 


// SQL-Abfrage abhängig davon, ob der Benutzer Trainer ist
if ($_SESSION["Trainer"] == false) {
    $sql = "
        SELECT 
            u.username,
            k.kursbezeichnung,
            i.nachname AS trainer_name,
            d.path,
            d.displayname
        FROM user u
        JOIN kurs k ON u.kurs_idkurs = k.idkurs
        JOIN internal_user i ON k.internal_user_idinternal = i.idinternal
        JOIN dokumente d ON d.kurs_idkurs = k.idkurs
        WHERE u.username = ?
    ";
} else {
    $sql = "
        SELECT 
            u.username,
            k.kursbezeichnung,
            i.nachname AS trainer_name,
            d.path,
            d.displayname
        FROM internal_user u
        JOIN kurs k ON u.idinternal = k.internal_user_idinternal
        JOIN internal_user i ON k.internal_user_idinternal = i.idinternal
        JOIN dokumente d ON d.kurs_idkurs = k.idkurs
        WHERE u.username = ?
    ";
}



if ($stmt = mysqli_prepare($conn, $sql)) {
    
    mysqli_stmt_bind_param($stmt, "s", $username_input);


    if (mysqli_stmt_execute($stmt)) {
        
        mysqli_stmt_store_result($stmt);


       
        mysqli_stmt_bind_result($stmt, $username, $kursbezeichnung, $trainer_name, $path, $displayname);


       
        $documents = [];
        $course_name = null;


       
        while (mysqli_stmt_fetch($stmt)) {
            $course_name = $kursbezeichnung; 
            $documents[] = [
                'trainer_name' => $trainer_name,
                'path' => $path,
                'displayname' => $displayname
            ];
        }
    } else {
        die("Fehler bei der Abfrageausführung: " . mysqli_error($conn));
    }


    
    mysqli_stmt_close($stmt);
} else {
    die("Fehler bei der Abfragevorbereitung: " . mysqli_error($conn));
}
?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kursübersicht</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f9;
            margin: 0;
            padding: 20px;
            text-align: center;
        }


        .course-container {
            margin-top: 20px;
        }


        h1 {
            font-size: 2em;
            color: #2c3e50;
        }


        h2 {
            font-size: 1.5em;
            color: #2980b9;
        }


        h3 {
            font-size: 1.2em;
            color: #7f8c8d;
        }


        .document-list {
            list-style-type: none;
            padding: 0;
        }


        .document-list li {
            margin-bottom: 10px;
        }


        .document-list li a {
            text-decoration: none;
            color: #3498db;
            font-weight: bold;
        }


        .document-list li a:hover {
            color: #e74c3c;
        }
    </style>
</head>
<body>
    <h1>Willkommen, <?= htmlspecialchars($_SESSION['vorname'] ?? 'Nutzer') ?>!</h1>


    <?php if ($course_name): ?>
        <div class="course-container">
            <h2>Kurs: <?= htmlspecialchars($course_name) ?></h2>
            <h3>Trainer: <?= htmlspecialchars($documents[0]['trainer_name']) ?></h3>
            <h3>Dokumente für diesen Kurs:</h3>
            <ul class="document-list">
                <?php foreach ($documents as $doc): ?>
                    <li><a href="<?= htmlspecialchars($doc['path']) ?>" download><?= htmlspecialchars($doc['displayname']) ?></a></li>
                <?php endforeach; ?>
            </ul>
        </div>
    <?php else: ?>
        <p>Keine Dokumente für den Benutzer gefunden.</p>
    <?php endif; ?>
</body>
</html>


Kurs, Programmiersprache

Python discord NonType Error?

Ich habe einen Error in meinem Code:

async def on_submit(self, interaction2: discord.Interaction):
    response = await sendRequests(str(self.username), str(self.email), str(self.password))
    if response == "email":
        await interaction2.response.send_message("Incorrect email format", ephemeral=True)
        return
    if response == "password":
        await interaction2.response.send_message("Incorrect password format. The password must meet these requirements: \nOne Uppercase letter \nOne lowercase letter \nOne number\n A special character ", ephemeral=True)
        return
    if response == "maintenance":
        await interaction2.response.send_message("The system is currently under maintenance. Please look in #news for more infos.", ephemeral=True)
    query = "INSERT INTO users VALUES (?, ?, ?, ?)"
    main.cursor.execute(query, (interaction2.user.id, str(self.username), str(self.email), str(self.password)))
    main.database.commit()
    await interaction2.response.send_message("You are now in the registration process. This can take up to one hour.", ephemeral=True)
    channel = main.bot.get_channel(1309925591146958933)
    await channel.send("make a recaptcha, registration from user : " + str(interaction2.user.name) + " with id: " + str(interaction2.user.id))

Error:
[2024-11-23 19:32:43] [ERROR  ] discord.ui.modal: Ignoring exception in modal <RegisterModal timeout=None children=3>:

Traceback (most recent call last):

 File ".venv\Lib\site-packages\discord\ui\modal.py", line 189, in _scheduled_task

   await self.on_submit(interaction)

 File "TestButton.py", line 41, in on_submit

   await channel.send("make a recaptcha, registration from user : " + str(interaction2.user.name) + " with id: " + str(interaction2.user.id))

         ^^^^^^^^^^^^

AttributeError: 'NoneType' object has no attribute 'send'

Bot, Code, Programmiersprache, Python, Webentwicklung, Python 3, Pycharm, Discord, Discord Bot

Meistgelesene Beiträge zum Thema Programmiersprache