JavaScript – die neusten Beiträge

PHP: Wie kann ich die Videoladezeit verbessern?

Hallo,

ich habe folgendes Problem:

Ich habe diese PHP-Datei erstellt und bei mir auf meinem iPhone lädt es die Videodatei sehr langsam bis gar nicht. Wenn ich aber auf PC im gleichen Netflix schaue, lädt es sehr schnell.

Ich habe es bei anderen Freunden testen lassen, die auch ein iPhone haben. Bei der einen Person lädt es auch sehr schnell, bei der anderen auch nicht, so wie bei mir. Bei mir lädt es immer nur schnell, wenn ich mobile Daten anhabe.

Die Videodateien sind 2-7 GB groß.

Vielleicht kann jemand eine Lösung für mich finden, das zu beheben. Wichtig ist, dass ich die Größe der Videodateien nicht verkleinern kann. Das heißt, es muss trotzdem schnell die Videodatei laden.

Ich sage schon einmal danke an die Person, die sich die Zeit und Mühe nimmt, mir zu helfen.

Bei einer Verbindung mit dem normalen Heimnetz sieht es auf dem iPhone so aus:

Wenn ich über LTE (mobile Daten) lade:

Der PHP-Code:

<?php 
  require 'db.php'; // Die Datenbankverbindung einbinden
  require 'is_premium.php'; // Die Datenbankverbindung einbinden

  // Überprüfen, ob eine ID übergeben wurde
  if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    die('Ungültige Film-ID.');
  }

  $movie_id = intval($_GET['id']);
  // Film aus der Datenbank abfragen
  $stmt = $db->prepare('SELECT * FROM movies WHERE id = ?');
  $stmt->bind_param('i', $movie_id);
  $stmt->execute();
  $result = $stmt->get_result();

  if ($result->num_rows === 0) {
    die('Film nicht gefunden.');
  }

  $movie = $result->fetch_assoc();
  $stmt->close();
  $db->close();

  // Erkennen, ob die URL ein lokales Video ist oder über HTTPS geladen werden soll
  $is_local_video = strpos($movie['video'], 'uploads/videos/') === 0;
  $is_https = strpos($movie['video'], 'https://') === 0;
  $thumbnail = htmlspecialchars($movie['thumbnail']); // Thumbnail aus der Datenbank
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title><?php echo htmlspecialchars($movie['name']); ?> - MovieVel</title>
  <style>
   #css code
  </style>
</head>
<body>
  <div class="container">
    <div class="movie-detail">
      <h1><?php echo htmlspecialchars($movie['name']); ?></h1>
      <!-- Movie Video -->
      <div class="<?php echo $is_local_video ? 'video-container' : 'iframe-container'; ?>">
        <div class="play-btn">
          &#9654; <!-- Play-Symbol -->
        </div>
        <?php if ($is_local_video): ?>
          <!-- Video für progressive Web-Optimierung mit Bild-in-Bild-Unterstützung -->
          <video id="video-player" controls autoplay preload="auto" poster="<?php echo $thumbnail; ?>"
              onclick="this.requestPictureInPicture()" muted playsinline>
            <source src="<?php echo htmlspecialchars($movie['video']); ?>" type="video/mp4">
            Ihr Browser unterstützt dieses Videoformat nicht.
          </video>
        <?php elseif ($is_https): ?>
          <iframe 
            src="<?php echo htmlspecialchars($movie['video']); ?>" 
            allowfullscreen>
          </iframe>
        <?php else: ?>
          <p>Video konnte nicht geladen werden. Überprüfen Sie die URL oder die Serverkonfiguration.</p>
        <?php endif; ?>
      </div>
      <!-- Movie Description -->
      <div class="description-box">
        <h2>Über den Film</h2>
        <p><?php echo htmlspecialchars($movie['description']); ?></p>
      </div>
      <!-- Back Button -->
      <a href="index.php" class="back-btn">Zurück zur Übersicht</a>
    </div>
  </div>
  <script>
    const video = document.getElementById('video-player');
     
    // Überprüfen, ob Picture-in-Picture unterstützt wird
    if ('pictureInPictureEnabled' in document) {
      video.addEventListener('click', async () => {
        try {
          // Versuchen, Bild-in-Bild zu aktivieren
          if (document.pictureInPictureElement !== video) {
            await video.requestPictureInPicture();
          } else {
            // Wenn das Video schon im Bild-in-Bild-Modus ist, es wieder schließen
            await document.exitPictureInPicture();
          }
        } catch (err) {
          console.error('Fehler beim Wechseln in den Bild-in-Bild-Modus:', err);
        }
      });
    }
  </script>
</body>
</html>
Bild zum Beitrag
Homepage, SQL, HTML, Webseite, CSS, JavaScript, HTML5, Code, Datenbank, MySQL, PHP, Webdesign, Webentwicklung, phpMyAdmin

Elemente in css linksbündig?

Hey, also ich habe ein project in der dynamisch html Seiten generiert werden. Eine Seite sieht folgendermaßen aus:


<body tabindex="0" class=" jspsych-display-element" style="margin: 0px; height: 100%; width: 100%;">
    <div id="jspsych-progressbar-container"><span>Completion Progress</span>
        <div id="jspsych-progressbar-outer">
            <div id="jspsych-progressbar-inner" style="width: 12.5%;"></div>
        </div>
    </div>
    <div class="jspsych-content-wrapper">
        <div id="jspsych-content" class="jspsych-content">
            <style id="jspsych-survey-multi-choice-css">
                .jspsych-survey-multi-choice-question {
                    margin-top: 3em;
                    margin-bottom: 2em;
                    text-align: left;
                    height: 75vh
                }

                .jspsych-survey-multi-choice-text span.required {
                    color: darkred;
                }

                .jspsych-survey-multi-choice-horizontal .jspsych-survey-multi-choice-text {
                    text-align: center;
                }

                .jspsych-survey-multi-choice-option {
                    line-height: 2;
                }

                .jspsych-survey-multi-choice-horizontal .jspsych-survey-multi-choice-option {
                    display: inline-block;
                    margin-left: 1em;
                    margin-right: 1em;
                    vertical-align: top;
                }

                label.jspsych-survey-multi-choice-text input[type='radio'] {
                    margin-right: 1em;
                }

                html {
                    scroll-behavior: smooth;
                }

                #jspsych-progressbar-container {
                    position: fixed;
                    top: 0;
                    left: 0;
                    width: 100%;
                    z-index: 1000;
                }

                .bottom-spacer {
                    height: 10vh
                }
            </style>
            <form id="jspsych-survey-multi-choice-form">
                <div id="jspsych-survey-multi-choice_container_0" class="question-container"></div>
                <div id="jspsych-survey-multi-choice-0" class="jspsych-survey-multi-choice-question">
                    <p class="jspsych-survey-multi-choice-text survey-multi-choice"><b>Gender: Please select your
                            gender<b></b></b><span class="required">*</span></p>
                    <div id="jspsych-survey-multi-choice-option-0-0" class="jspsych-survey-multi-choice-option"><input
                            type="radio" name="jspsych-survey-multi-choice-response-0"
                            id="jspsych-survey-multi-choice-response-0-0" value=" Male" required=""><label
                            class="jspsych-survey-multi-choice-text" for="jspsych-survey-multi-choice-response-0-0">
                            Male</label></div>
                    <div id="jspsych-survey-multi-choice-option-0-1" class="jspsych-survey-multi-choice-option"><input
                            type="radio" name="jspsych-survey-multi-choice-response-0"
                            id="jspsych-survey-multi-choice-response-0-1" value=" Female"><label
                            class="jspsych-survey-multi-choice-text" for="jspsych-survey-multi-choice-response-0-1">
                            Female</label></div>
                    <div id="jspsych-survey-multi-choice-option-0-2" class="jspsych-survey-multi-choice-option"><input
                            type="radio" name="jspsych-survey-multi-choice-response-0"
                            id="jspsych-survey-multi-choice-response-0-2" value=" Diverse"><label
                            class="jspsych-survey-multi-choice-text" for="jspsych-survey-multi-choice-response-0-2">
                            Diverse</label></div>
                </div><input type="submit" class="jspsych-survey-multi-choice jspsych-btn" value="Continue">
                <div class="bottom-spacer"></div>
            </form>
        </div>
    </div>
</body>

Jetzt versuche ich sobald ein solches form in der html Seite ist, alles linksbündig ist. Aber nur dann. Ich bekomme es leider nicht hin. Habe es mit javascipt und text-align gemacht, funktioniert aber nicht.

HTML, Webseite, CSS, JavaScript

Wie kann der Scroll-Button ausgeblendet werden bzw. eingeblendet?

Warum funktioniert es nicht, der Button bleibt von Anfang bis Ende der Seite eingeblendet.

Ich möchte eine JS -Funktion schreiben, die diesen Button erst einblendet, wenn der Nutzer ein Stück weit herunter gescrollt hat. Ebenso soll der Button versteckt werden, wenn der Nutzer wieder nach oben gescrollt hat.

Mein bisheriger Code:

HTML:  
   <a href="#" id="topButton">Nach oben</a>

CSS: 
#topButton {
    position: fixed;
    bottom: 20px; /* Abstand vom unteren Rand */
    right: 30px; /* Abstand vom rechten Rand */
    background-color: #007BFF; /* Blau */
    color: white; /* Weißer Text */
    padding: 10px 15px; /* Innenabstand */
    border: none; /* Kein Rand */
    border-radius: 5px; /* Abgerundete Ecken */
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* Schatten */
    text-decoration: none; /* Keine Unterstreichung */
    font-size: 14px; /* Schriftgröße */
    cursor: pointer; /* Zeiger-Hand-Symbol */
    transition: background-color 0.3s ease, transform 0.2s ease; /* Animation */
  }


  #topButton:hover {
    background-color: #0056b3; /* Dunkleres Blau beim Hover */
    transform: translateY(-2px); /* Leichtes Anheben beim Hover */
  }


  #topButton:active {
    transform: translateY(0); /* Zurücksetzen bei Klick */
  }

JavaScript:
// Element auswählen
let topButton = document.getElementById("topButton");


// Scroll-Event-Listener hinzufügen
window.addEventListener("scroll", function() {
  // Zeigt den Button an, wenn mehr als 50px gescrollt wurde
  if (window.scrollY > 50) {
    topButton.style.display = "block"; // Button wird sichtbar
  } else {
    topButton.style.display = "none"; // Button wird versteckt
  }
});


// Klick-Event für den Button
topButton.addEventListener("click", function(event) {
  event.preventDefault(); // Standard-Aktion verhindern
  window.scrollTo({
    top: 0, // Scrollt nach oben
    behavior: "smooth" // Sanftes Scrollen
  });
});
Homepage, App, Programm, HTML, Webseite, programmieren, CSS, JavaScript, HTML5, Code, PHP, Programmiersprache, Webdesign, Webentwicklung, Frontend, Visual Studio Code

Bestes WordPress Hosting für 5.95€?

Ich habe damals eine WordPress Website für einen Kunden erstellt bei All-Inkl und habe das Privat Paket (4.99€) mit Zusatzoption SSL-Erweiterung (0,95€) Zusatzoption SSL-Erweiterung.
Es hat 3 Domains Inklusive aber wir brauchen das garnicht mehr da die alten Domains nichtmehr indexiert sind, die haupt domain reicht maximal 2 Domains.

Der Punkt ist aber das die Seite mit WordPress gemacht wurde und Elementor, trotz Optimierungen kommt es nicht auf so tolle Ergebnisse.


Und der zweite Punkt ist er möchte nichts wirklich ändern an dem Design und möchte seine Videos drinne lassen.

Sind hochwertig produziert und schöne Videos gehen 1-2 Minuten und sollen für ihn der Hauptfokus sein.

  • Ob ein CDN etwas bringen würde denke ich nicht da die Kunden ausschließlich lokal sind. CDN ist doch eher etwas für Weltweit.
  • Bilder sind alle auf Webp Konvertiert mit 92% Beibehaltung der Qualität, da habe ich bereits massiv eingespart ohne sichtbaren Qualitätsverlust
  • Video ist etwas schwierig zu Komprimieren / Qualität zu verringern, es wäre mir lieber wenn es ein Widget gebe für Elementor das die eigenschaft wie Youtube hätte aber ohne YouTube das man das Video selber auf "auto" laden würde erstmal und zeit gewinnt. Ob webm einen großen unterschied macht bin ich mir nicht sicher
  • Caching Plugin habe ich "WP Optimize" und auch HTML,CSS,JS minimieren aktiviert, bisher keine Konflikte oder Fehler.
  • Das Cookie Plugin verlangsamt auch stark die Ladezeiten ist mir aufgefallen, kennt ihr ein sehr leichtgewichtiges und cleanes Cookie Opt Plugin womit man auch Google Maps Consent einholen kann?

Ich kann also nur die technische Seite Optimieren und denke mit einem besseren Hosting das nicht Allgemein ist wie All Inkl ich einen höheren Score erreichen kann beim Speed Test.

Homepage, HTML, Webseite, WordPress, JavaScript, CMS, PHP, SEO, Strato, Webdesign, Webentwicklung, Webhosting, Webserver, all-inkl, divi, Hetzner, Elementor, hostinger, Elementor Pro, ionos

Google Sheets Apps Script Uhrzeit aus Zelle zum Rechnen nehmen?

Hallo zusammen,

ich versuche mich aktuell an Apps Script für Google Sheets. Hier komme ich an einem Punkt jetzt aber nicht weiter.

Ich habe in einer Zelle eine Dauer (00:30:00; auch als Zeit formatiert). Zusätzlich habe ich eine Variable (pause), die auch eine Dauer enthält. Mein Wunsch ist, dass er den Wert aus der besagten Zelle nimmt, den Wert von Pause dazu addiert und das Ergebnis wieder in die Zelle schreibt und dadurch den alten Wert ersetzt. Ist ja an sich einfach aber irgendwie ermittelt das System beim Auslesen der Dauer aus der Zelle einen komplett falschen Wert:

Ausgeslesen werden soll der Wert aus der Zelle 1765,6 Hier das COding dazu, wo er das Feld ausliest:

function PauseEintragen(pause){
  var app = SpreadsheetApp;
  var ss_arbeitszeit =app.getActiveSpreadsheet();
  var sheet_arbeitszeit=ss_arbeitszeit.getSheetByName('Arbeitszeit');

  //var row=sheet_arbeitszeit.getLastRow();
    //sheet_arbeitszeit.getRange(row,6).setValue(sheet_arbeitszeit.getRange(row,6).getValue()+pause);
  
  sheet_arbeitszeit.getRange(2,1).setValue(pause);
  var test = new Date(sheet_arbeitszeit.getRange(1765,6).getValue());
  var h = test.getHours();
  var m = test.getMinutes();
  var s = test.getSeconds();

  Logger.log(test);
  
  var testtime = h + ":" + m + ":" + s;
} 

Und das ist die Zelle dazu:

Wenn ich das Coding laufen lasse, liest er im Logger das aus:

Warum auch immer liest er 01:20:39 aus statt 00:30:00.

Hat einer eine Idee, warum er das macht?

Vielen Dank.

Gruß Dominik

Bild zum Beitrag
JavaScript

Warum scrollt es automatisch nach oben, wenn ich auf den Slider klicke (siehe bitte meine letzte Frage für Code)?

Wenn ich auf den Slider klicke, dann scrollt es danach nicht mehr nach unten, sondern geht automatisch nach oben. Woran könnte das Problem liegen?

HTML:

<article id="ÜberschriftAnfang">
  <h1>Michael Jackson - The King of Pop</h1>
  
  <!-- Slideshow Container -->
  <div class="slideshow-container">
   
    <!-- Slide 1 -->
    <div class="mySlides fade active" style="display:block">
      <div class="numbertext">1 / 3</div>
      <img src="Background picture.jpg" style="width:100%" alt="Background Image">
    </div>

    <!-- Slide 2 -->
    <div class="mySlides fade">
      <div class="numbertext">2 / 3</div>
      <img src="papers.co.jpg" style="width:100%" alt="Background Image 2">
    </div>

    <!-- Slide 3 -->
    <div class="mySlides fade">
      <div class="numbertext">3 / 3</div>
      <img src="5m6XCzF.jpg" style="width:100%" alt="Background Image 3">
    </div>

    <!-- Navigation Arrows -->
    <a class="prev" onclick="plusSlides(-1)">❮</a>
    <a class="next" onclick="plusSlides(1)">❯</a>

  </div>

  <!-- Dots Navigation -->
  <div style="text-align:center">
    <span class="dot" onclick="currentSlide(1)"></span>
    <span class="dot" onclick="currentSlide(2)"></span>
    <span class="dot" onclick="currentSlide(3)"></span>
  </div>
</article>

JS:

let slideIndex = 1;
showSlides(slideIndex); // Startet die Slideshow und zeigt das erste Bild an.

function plusSlides(n) {
  showSlides(slideIndex += n);
}

function currentSlide(n) {
  showSlides(slideIndex = n);
}

function showSlides(n) {
  let i;
  let slides = document.getElementsByClassName("mySlides");
  let dots = document.getElementsByClassName("dot");

  // Überprüfen, ob der slideIndex größer als die Anzahl der Slides ist
  if (n > slides.length) {
    slideIndex = 1; // Setze den Index auf 1, wenn er größer ist als die Anzahl der Slides
  }

  // Überprüfen, ob der slideIndex kleiner als 1 ist
  if (n < 1) {
    slideIndex = slides.length; // Setze den Index auf die letzte Slide, wenn er kleiner ist als 1
  }

  // Alle Slides ausblenden
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }

  // Alle Dots zurücksetzen
  for (i = 0; i < dots.length; i++) {
    dots[i].className = dots[i].className.replace(" active", "");
  }

  // Zeige das aktuelle Bild und Dot
  slides[slideIndex - 1].style.display = "block";  
  dots[slideIndex - 1].className += " active";
}

CSS: siehe Antwort

HTML, Webseite, CSS, JavaScript, HTML5, Code, Programmiersprache, Webentwicklung, Frontend

Programmiermentor, Aspergerautismus?

Guten Tag,

Ich bin 24 Jahre alt und habe einen Asperger-Autismus, wegen welchem es mir sehr schwer fällt, einen normalen Job zu behalten, da mich die meisten als Arrogant, Komisch, o.Ä. empfinden.

Daher will ich mir ein Fundament aufbauen im Bereich Programmieren, damit ich so eventuell dann irgendwann, in einem für mich erträglichen Arbeitsumfeld, arbeiten kann.

Von der Intelligenz her reicht es vollkommen, jedoch habe ich ein kleines Defizit; Wenn ich ein ganzes Thema neu anfange, habe ich viele Fragen, welche ich meist, von einem Mentor, beantwortet bekommen muss, sonst überstrapaziert es mich und ich krieg keinen klaren Kopf mehr. Sobald ich ein solides Fundament aufgebaut habe, kann ich selbstständig darauf aufbauen. Jedoch besitze ich noch kein derartiges Fundament. Lediglich HTML kann ich sagen, dass mein Fundament relativ gut ist. CSS jedoch merke ich, dass mir dieser Mentor fehlt.

Ich würde einen engagieren und bezahlen, jedoch fehlen mir die finanziellen Mitteln, weswegen das keine Option ist…

Lange Rede, kurzer Sinn: Kennt Ihr jemanden, der eventuell bereit wäre, ein solcher Mentor zu sein?

Ich könnte mich anderweitig revanchieren, indem ich Aufträge für ihn erfülle, sobald ich dazu fähig bin.

Ich wäre froh über eine Antwort und bitte nur Antworten, wenn Ihr eine Lösung habt. Ich will kein Mitleid oder sonstiges, sondern einfach eine Lösung finden.

vielen lieben Dank und ich freue mich auf eine Rückmeldung!

Lernen, HTML, IT, programmieren, CSS, JavaScript, Asperger-Syndrom, Autismus, mentor, Umschulung, Asperger-Autimus

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

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

Meistgelesene Beiträge zum Thema JavaScript