Code – 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

Ist das ein genauer Typescript Code?

interface User {
    id: number;
    firstName: string;
    lastName: string;
    email: string;
    password: string;
}

let users: User[] = [];
let currentUserId: number | null = null;

const userForm = document.getElementById('userForm') as HTMLFormElement;
const firstNameInput = document.getElementById('firstName') as HTMLInputElement;
const lastNameInput = document.getElementById('lastName') as HTMLInputElement;
const emailInput = document.getElementById('email') as HTMLInputElement;
const passwordInput = document.getElementById('password') as HTMLInputElement;
const userTableBody = document.getElementById('userTableBody') as HTMLTableSectionElement;

userForm.addEventListener('submit', (event) => {
    event.preventDefault();
    if (currentUserId === null) {
        addUser();
    } else {
        updateUser();
    }
    userForm.reset();
    currentUserId = null;
});

function addUser() {
    const newUser: User = {
        id: Date.now(),
        firstName: firstNameInput.value,
        lastName: lastNameInput.value,
        email: emailInput.value,
        password: passwordInput.value,
    };
    users.push(newUser);
    renderUserTable();
}

function updateUser() {
    const user = users.find((u) => u.id === currentUserId);
    if (user) {
        user.firstName = firstNameInput.value;
        user.lastName = lastNameInput.value;
        user.email = emailInput.value;
        user.password = passwordInput.value;
        renderUserTable();
    }
}

function deleteUser(id: number) {
    users = users.filter((user) => user.id !== id);
    renderUserTable();
}

function editUser(id: number) {
    const user = users.find((u) => u.id === id);
    if (user) {
        currentUserId = id;
        firstNameInput.value = user.firstName;
        lastNameInput.value = user.lastName;
        emailInput.value = user.email;
        passwordInput.value = user.password;
    }
}

function renderUserTable() {
    userTableBody.innerHTML = '';
    users.forEach((user) => {
        const row = document.createElement('tr');
        row.innerHTML = `
      <td>${user.firstName}</td>
      <td>${user.lastName}</td>
      <td>${user.email}</td>
      <td>
        <button onclick="editUser(${user.id})">Bearbeiten</button>
        <button onclick="deleteUser(${user.id})">Löschen</button>
      </td>
    `;
        userTableBody.appendChild(row);
    });
}

Bitte es soll nichts von Js haben, sondern wirklich die Typescript Merkmale beeinhalten

Studium, Code, Informatik, Programmiersprache, TypeScript

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

Frage zu c# bzw. #script?

Kennt sich jemand mit #script aus?

Ich habe folgendes Skript:

 "Script/DeviceTemplate": {
        "Content": "{{var assignments = []}}
{{var nodeId = ServiceTask.DeviceInstallationServiceTask.Details.NodeId}}
{{#each groupName in Typicals.DeviceTypes.xxx.DeviceTypicals[ServiceTask.DeviceInstallationServiceTask.Details.Typical.Name].SignalGroups}}
{{var index = 0}}
{{#each signal in Typicals.DeviceTypes.xxx.SignalGroups[groupName].SignalList}}
{{var baseComponent = ServiceTask.DeviceInstallationServiceTask.Details.Typical.SignalAssignments[groupName].BaseComponent}}
{{var _ = assignments.push({
    "assignmentIndex": index,
	"deviceId": "" + nodeId,
    "sparkplugName": baseComponent + signal.MetricBaseName
})}}
{{index = index + 1}}
{{/each}}
{{/each}}
{{ {
  "system": {
    "deviceName": nodeId
  },
  "apps": [
    {
      "appName": "SPARKPLUG",
      "appId": 12345,
      "settings": {
                "clientId": nodeId,
                "keepAliveInterval": 120,
                "publishInterval": 120,
                "startupDelay": 50
      },	 
      "sparkplugSettings": {
            "mqttTopic": "spBv1.0",
            "sparkplugTopic": "NTN/{MessageType}/" + nodeId
      },
      "assignments": assignments
    }
  ]
} |> json}}"
      }

Dieses hat zwei Schleifen, in der inneren Schleife soll die Variable index um 1 erhöht werden. Alles funktioniert, nur bekomme ich in der Ausgabe für jeden Aufruf von

index = index + 1

ebenfalls eine Ausgabe:

     1
     2
     3
     4
     5
     6
     7
     8
     9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
   {"system":{"deviceName......

Wie kann ich die Ausgabe von 1 bis 23 unterdrücken?

Software, IT, programmieren, C Sharp, Code, Programmiersprache, Script, Softwareentwicklung

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

Custom Cursor wird nicht angezeigt?

Die Programmierung von meiner Bildergalerie (Slider) hat mir ein paar Schwiergkeiten bereitet...schlussendlich habe ich chatgpt gefragt und der hat mir direkt einen Code ausgespuckt- der funktioniert auch soweit so gut allerdings werden die Mouse-Cursor immer noch nicht richtig angezeigt. Eigentlich sollten diese eigene Bilder anzeigen, je nachdem über welche seite des Bildes man sich bewegt. Weiß jemand wie/ob man so etwas programmieren kann bzw. wo mein Fehler liegen könnte?

- Die Bilder liegen aufjeden Fall im selben Ordner wie index2.html

Hier der vollständige Code:

<!DOCTYPE html>

<html lang="de">

<head>

 <meta charset="UTF-8">

 <meta name="viewport" content="width=device-width, initial-scale=1.0">

 <title>Bild-Slider mit benutzerdefiniertem Cursor</title>

 <style>

  body {

   font-family: Arial, sans-serif;

   display: flex;

   justify-content: center;

   align-items: center;

   height: 100vh;

   margin: 0;

   background-color: #f0f0f0;

  }

  .slider-container {

   position: relative;

   width: 500px;

   height: 300px;

   overflow: hidden;

   border: 2px solid #ccc;

   border-radius: 10px;

  }

  .slider-images {

   display: flex;

   transition: transform 0.5s ease-in-out;

  }

  .slider-images img {

   width: 100%;

   height: 100%;

   object-fit: cover;

  }

  /* Unsichtbare, transparente Boxen für Cursorsteuerung */

  .slider-nav {

   position: absolute;

   top: 0;

   width: 20%; /* Nur ein schmaler Bereich am linken und rechten Rand */

   height: 100%;

   background-color: transparent;

   z-index: 2;

  }

  /* Linke Box: Cursor ändert sich beim Hover */

  .slider-nav.left {

   left: 0;

   cursor: url('pfeillinks.png') 22 22, auto; /* Benutzerdefinierter Cursor (Hotspot bei 22px, 22px) */

  }

  /* Rechte Box: Cursor ändert sich beim Hover */

  .slider-nav.right {

   right: 0;

   cursor: url('pfeilrechts.png') 22 22, auto; /* Benutzerdefinierter Cursor (Hotspot bei 22px, 22px) */

  }

  /* Hover-Effekt: Cursor als Pointer, wenn er über den Boxen schwebt */

  .slider-nav.left:hover {

   cursor: url('pfeillinks.png') 22 22, pointer; /* Benutzerdefinierter Cursor (Hotspot bei 22px, 22px) */

  }

  .slider-nav.right:hover {

   cursor: url('pfeilrechts.png') 22 22, pointer; /* Benutzerdefinierter Cursor (Hotspot bei 22px, 22px) */

  }

 </style>

</head>

<body>

<div class="slider-container">

 <div class="slider-images">

  <img src="https://via.placeholder.com/500x300/FF5733" alt="Bild 1">

  <img src="https://via.placeholder.com/500x300/33C4FF" alt="Bild 2">

  <img src="https://via.placeholder.com/500x300/75FF33" alt="Bild 3">

 </div>

 <!-- Unsichtbare Boxen für die Linke und Rechte Navigation -->

 <div class="slider-nav left" onclick="changeSlide('prev')"></div>

 <div class="slider-nav right" onclick="changeSlide('next')"></div>

</div>

<script>

 let currentIndex = 0;

 const images = document.querySelectorAll('.slider-images img');

 const totalImages = images.length;

 function changeSlide(direction) {

  if (direction === 'next') {

   currentIndex = (currentIndex + 1) % totalImages;

  } else if (direction === 'prev') {

   currentIndex = (currentIndex - 1 + totalImages) % totalImages;

  }

  const sliderImages = document.querySelector('.slider-images');

  sliderImages.style.transform = `translateX(-${currentIndex * 100}%)`;

 }

</script>

</body>

</html>

Ich bin jedem der sich mit dem Problem beschäftigt dankbar! (:

Computer, HTML, Webseite, programmieren, CSS, Code, Programmiersprache, Webdesign, Webentwicklung, Cursor, Galerie, slider

Epson Nadeldrucker einzelne Buchstaben drucken?

Hey Leute!

Ich versuche aus einem Raspberry Pi 4 und meinem EPSON LQ Nadeldrucker eine "Schreibmaschiene" zu bauen. Ist es möglich, statt Line-By-Line jeden Buchstaben den ich eingebe einzeln zu drucken? Ich komme nämlich nicht weiter.

Mein aktuelles Script:

import os
import sys
import termios
import tty


# Pfad zum USB-Drucker
DRUCKER_USB_PORT = '/dev/usb/lp0'


# Funktion, um eine Taste direkt ohne ENTER zu lesen
def lese_taste():
    fd = sys.stdin.fileno()
    alte_einstellungen = termios.tcgetattr(fd)
    try:
        tty.setraw(fd)
        taste = sys.stdin.read(1)  # Liest genau 1 Zeichen
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, alte_einstellungen)
    return taste


# Verbindung zum Drucker öffnen
if not os.path.exists(DRUCKER_USB_PORT):
    print(f"Der Drucker wurde nicht unter {DRUCKER_USB_PORT} gefunden.")
    sys.exit(1)


try:
    with open(DRUCKER_USB_PORT, 'wb', buffering=0) as drucker:  # Ungepufferter Modus
        print("Schreibmaschinen-Modus aktiv. Tippe, um zu drucken. Drücke 'Strg+C' zum Beenden.")


        while True:
            taste = lese_taste()  # Zeichen sofort lesen
            if ord(taste) == 3:  # Strg+C beenden
                break
            elif ord(taste) == 13:  # ENTER (Carriage Return)
                drucker.write(b'\r\n')  # Zeilenumbruch senden
            else:
                drucker.write(taste.encode('ascii'))  # Zeichen sofort senden
            drucker.flush()  # Sicherstellen, dass die Daten sofort geschrieben werden


except PermissionError:
    print(f"Keine Berechtigung für Zugriff auf {DRUCKER_USB_PORT}.")
    print("Führe das Skript mit 'sudo' aus oder ändere die Berechtigungen:")
    print(f"  sudo chmod 666 {DRUCKER_USB_PORT}")
except Exception as e:
    print(f"Ein Fehler ist aufgetreten: {e}")
finally:
    print("Verbindung zum Drucker geschlossen.")


Drucker, Code, Programmiersprache, Python, Schreibmaschine, Python 3, Raspberry Pi, ChatGPT

Welche (geheimen) Erkennungszeichen der (Hochgrad-)Freimaurerei kennt ihr?

Die (Hochgrad-)Freimaurerei hat ja keine Geheimnisse, von daher können wir ja hier darüber sprechen.

Die Freimaurerei hat ja so glaube ich 2 Seiten, Licht und Schatten, oder Angels & Demons (wie der Titel von Dan Brown's Buch), d.h. die "Demons" sind für die Macht, Verführung und sowas zuständig, die "Angels" für Aufklärung und Hoffnung (kontrollierte Opposition).

Beide Seiten scheinen wichtig, da man nicht (lange) herrschen kann, wenn man nicht beide Seiten kontrolliert. Deshalb arbeiten beide Seiten hinter den Theaterkulissen zusammen.

Ich kenne diese Zeichen (nicht wundern, ihr seht das ständig in Filmen, Serien, Zeitungen und sozialen Netzwerken - es ist wirklich fast so wie im Film "Sie leben"):

Zeichen & Symbole:

  • Zeigefinger (es ist DAS Symbol, wie am Ende von "The Sign" von Ace of Base (Intro in schwarz-weiß (auch Schach-Symbolik) https://www.youtube.com/watch?v=iqu132vTl5Y
  • Sonne = (Zeigefinger zeigt oft dorthin) (Sonnenkult) Deswegen in fast allen Filmen Szenen mit der Sonne
  • Pyramide = Machthierarchie (aus dem alten Ägypten, Pharaonen
  • Das allsehende Auge (auch Sonnenzeichen = Überwachung)
  • Eulen = Weisheit und Nachtjäger - überall auf der seite der "Guten" in sozialen Netzwerken, alternativen Kanälen und Filmen (
  • Bienen = Diener eines Staates (besonders das Portal IMdB.com = I aM d(th)e Bee - Veerteilung von Schlüsselwörtern/Keywords)
  • Löwe = Zeichen der Macht (Pharaonen, Ägypten)

Gegenstände:

  • Gitarre (steht oft im Hintergrund) - Standardzeichen für Freimaurer (Musik = Kunst, Kultur)
  • Schlüsselbund (z.B. offen sichtbar am Gürtel) = Schlüssel-Wörter (Codes)
  • große Mikrofone (die besonders auffallen)
  • Theatervorhang (oft im Hintergrund) = Theatervortsellung, Schauspiel

Kleidung:

  • Sonnenbrille = wie Agenten ("I wear my sunglasses at night" - Markenzeichen in vielen Filmen, wie Sie Leben, Matrix, Blues Brothers, usw.
  • Karierte Hemden, insbesondere Flanellhemden (Karo = Schachbrettmuster, wie auf den Böden der Logen)
  • Schlapphüte (oder ähnliche Hüte, wie früher Geheimagenten)
  • T-Shirts o.ä. mit Aufschrift ("Obey") - wie aus dem Film "Sie leben"

Bilder/Zeichen/Symbole:

☝️☀️🔺👁️⭐️☂️⚔️🛠️🦅🦁💍🗝️🕵️😜🐇🐝🦉😎🎸🎙️

Zahlen (auch als Quersumme) - z.B. bei Nicknamen in sozialen Netzwerken:

13, 23, 33, 42, 66, 666, 7, 77, 777, 17, 18 (=3x6), 88

Bild zum Beitrag
Magie, Religion, Netzwerk, Deutschland, Politik, Code, Freimaurer, Freimaurerei, Geheimdienst, Geheimnis, Lüge, Macht, Okkultismus, Rituale, Symbolik, Überwachung, Zeichen, Symbol, Erkennungsmerkmale, gut und böse, Okkult

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

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 kann ich die Warenkorb-Logik erweitern??

Der Warenkorb überschreibt aktuell die vorhandene Menge, wenn ein Produkt erneut hinzugefügt wird. Wie könnte ich ?

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


// Check if a product_id is set in the URL
if (isset($_GET['id_product'])) {
    $id_product = $_GET['id_product'];
    
    // Prepare and execute query to fetch product details
    $stmt = $conn->prepare("SELECT * FROM products WHERE id_product = ?");
    $stmt->bind_param("i",$id_product);
    $stmt->execute();
    $result = $stmt->get_result();
    $product = $result->fetch_assoc();
    
    // If product not found, redirect to the main page
    if (!$product) {
        header("Location: index.php");
        exit();
    }
} else {
    header("Location: index.php");
    exit();
}


// Handle the add to cart functionality
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $quantity = isset($_POST['anzahl']) ? (int)$_POST['anzahl'] : 1;


    // Ensure a valid quantity is added
    if ($quantity > 0) {
        // Add to cart (store in session)
        $_SESSION['cart'][$id_product] = [
            'product_name' => $product['produktname'],
            'price' => $product['preis_pro_prod'],
            'quantity' => $quantity,
            'pid' => $id_product
        ];


        // Redirect to the cart page or display success message
        header(header: "Location: cart.php");
        exit();
    }
}
?>


<!DOCTYPE html>
<html>
<head>
    <title><?= htmlspecialchars($product['product_name']) ?> - Product Details</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f9;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 20px;
        }


        .product-detail {
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            padding: 20px;
            max-width: 500px;
            text-align: center;
        }


        .product-detail img {
            width: 100%;
            height: auto;
            border-radius: 8px;
            margin-bottom: 20px;
        }


        .product-detail h2 {
            color: #333;
            margin-bottom: 10px;
        }


        .product-detail p {
            color: #666;
            margin-bottom: 10px;
        }


        .product-detail .price {
            font-weight: bold;
            color: #2a9d8f;
            font-size: 1.2em;
            margin-top: 10px;
        }
.addtocart
{
    color:#2a9d8f;
    background-color: white;
    border-color:#2a9d8f ;
    border-width: 2px;
    font-weight: bold;
}


.anzahl
{
    background-color: white;
    border-color:#2a9d8f ;
    color:#2a9d8f;
    border-width: 2px;
    font-weight: bold;
    text-align: center;
    
}
        


     
    </style>
</head>
<body>
    <div class="product-detail">
        <img src="<?= htmlspecialchars($product['image_url']) ?>" alt="<?= htmlspecialchars($product['produktname']) ?>">
        <h2><?= htmlspecialchars($product['produktname']) ?></h2>
        <p><?= htmlspecialchars($product['produktbeschreibung']) ?></p>
        <p class="price">Price: €<?= htmlspecialchars($product['preis_pro_prod']) ?></p>
        <form method="post">
            <input type="number" name="anzahl" value="1" min="1" placeholder="Anzahl" class="anzahl">
            <br>
            <br>
            <button type="submit" class="addtocart">In den Warenkorb</button>
        </form>
    </div>
</body>
</html>




Homepage, Code

Meistgelesene Beiträge zum Thema Code