Programmieren – die neusten Beiträge

PHP dynamisch mit unterschiedlichen Datenbanken verbinden?

Hallo!

Folgende Situation:

Es gibt mehrere Datenbanken. Eine für alle Installationen meines Projektes (beinhaltet Zugangsdaten für Schul-DB's) und dann weitere, schulspezifische Datenbanken, in denen jeweils andere Dinge stehen (wie zum Beispiel Schüler mit ihren Logindaten, etc.)

Der Benutzer ruft also eine Loginseite auf und gibt eine Schul-ID ein. Nach Buttonklick wird die an ein PHP-Skript übergeben, welche dann aus der Datenbank aller Instanzen die entsprechenden Zugangsdaten für die schulspezifische Datenbank ausliest (anhand der Schul-ID).

Anschließend sollen diese als Variable gesetzt werden, sodass von überall in diesem Skript darauf zugegriffen werden kann. Dabei soll das Ganze allerdings nur für diese Session ersetzt werden und nicht in der Datei. Sodass andere Schüler andere Schul-ID's und damit auch andere Schul-DB's verwenden können.

Wenn der Benutzer dann auf der Loginseite seinen Benutzernamen und sein Passwort eingibt, wird dieses wieder an das PHP-Skript übergeben, welches nun in der schulspezifischen DB nachschaut, ob dort der entsprechende Nutzer existiert.

Folgendes Schema habe ich bis jetzt:

class DB {
  private static $_api_username = "root";
  private static $_api_password = "";
  private static $_api_host = "localhost";
  private static $_api_name = "programmingnow_host";
  private static $_api;

  private static $_db_username = $_SESSION['school_db_user'];
  private static $_db_password = $_SESSION['school_db_pass'];
  private static $_db_host = "localhost";
  private static $_db_name = $_SESSION['school_db_name'];
  private static $_db;

  function __construct() {
    try {
      self::$_api = new PDO("mysql:host=" . self::$_api_host . ";dbname=" . self::$_api_name . ";charset=utf8mb4",  self::$_api_username , self::$_api_password);

      if (isset($_SESSION['school_db_name'])) {
        self::$_db = new PDO("mysql:host=" . self::$_db_host . ";dbname=" . self::$_db_name . ";charset=utf8mb4",  self::$_db_username , self::$_db_password);
      }
    }
    catch(PDOException $e) {
      echo "Datenbankverbindung gescheitert!";
      die();
    }
  }
  
  function connectToSchoolDB($school_id) {
    $stmt = self::$_api->prepare("SELECT instance_db_name, instance_db_user, instance_db_pass FROM instances WHERE instance_key=:instance_key");
    $stmt->bindParam(":instance_key", $school_id);
    $stmt->execute();
    $result = $stmt->fetch();
    $result['instance_db_name'] = $_SESSION['school_db_name'];
    $result['instance_db_user'] = $_SESSION['school_db_user'];
    $result['instance_db_pass'] = $_SESSION['school_db_pass'];
  }

  [..] // Der ganze Rest an Funktionen (wie Login)
} 

Der obige Code funktioniert aber nicht.

Könnt ihr mir da helfen? Wie kann ich das realisieren bzw. wo liegt der Fehler?

Danke schon einmal im Voraus!

VG!

Computer, Technik, HTML, Webseite, programmieren, MySQL, PHP, Technologie, Webentwicklung

Ist es möglich 2 Python Dateien in eine exe zu konvertieren, beim indirekten Ansprechen der Datei (kein import)?

Guten Tag erstmal,

ich versuche aktuell mir ein Python Chatbot für Twitch zu bauen. Dieser Funktioniert ansich schon ziemlich gut. Ich habe aber ein "Problem" bzw. ich hätte etwas gerne anders. Kurz zum Case. Das Projekt selbst besteht aus 2 verschiedenen Dateien. Zum einen eine script.py und eine gui.py. Wie die namen schon sagen, enthält die script.py das Script des eigentlichen Chatbots und die gui.py die dazugehörende Benutzeroberfläche. Die gui startet über ein button das script und gibt die Konsolenausgabe in einem TextEdit Feld (PyQt5) aus.

(Das wird über self.process.start("script.exe") ermöglicht)

Aktuell ist es so, dass ich das Script zuerst zu einer .exe packen muss und dann die gui diese Datei öffnet. Das fertige Programm besteht demnach aus 2 .exe Dateien. Das Problem ist dabei, dass die Zeit, bis das Script ausgeführt wird, relativ hoch ist und die eigentliche Projekt Größe. (Aktuell ca .100 mb).

Ich habe diesen Weg bisher gewählt, weil ein paar Kollegen diesen Bot auch gerne verwenden möchten. Die haben allerdings kein Python installiert, weshalb ein direktes ansprechen der script.py (z.B. self.process.start("python", "script.py"))nicht möglich ist.

Meines Wissens nach werden die notwendigen Bibliotheken für das script in diesem Fall bei der Konvertieren in eine exe nicht mitgenommen. Aktuell verwende ich für das einpacken in eine exe, Auto-py-to-exe.

Nun die Frage:

Gibt es eine Möglichkeit die script.py anzusprechen und sowohl die gui als auch die script.py in nur einer exe komplett auszuführen, ohne das Python installiert werden muss ? Hätte dazu jemand eine Idee?

Entschuldigt bitte ggf. Rechtschreibfehler und fehlende Satzzeichen :D

Computer, Technik, programmieren, Python

Fehlermeldung: "Command raised an exception: AttributeError: 'NoneType' object has no attribute 'stop'"?

Hallo!

Ich bin gerade dabei zu versuchen, meinen Discord Musikbot zu programmieren.

Aber als ich den Bot getestet habe, kam die ganze Zeit der Fehler

"Command raised an exception: AttributeError: 'NoneType' object has no attribute 'stop'".

Nun wollt ich fragen, ob ihr mir helfen könnt. Hier ist nochmal der Code:

import discord
from discord.ext import commands
import youtube_dl

class music(commands.Cog):
  def __init__(self, client):
    self.client = client

  @commands.command()
  async def join(self, ctx):
    if ctx.author.voice is None:
      await ctx.send("Du bist in keinem Channel!")

    voice_channel = ctx.author.voice.channel

    if ctx.voice_client is None:
      await voice_channel.connect()
    else:
      await ctx.voice_client.move_to(voice_channel)

  @commands.command()
  async def disconnect(self, ctx):
    await ctx.voice_client.disconnect()

  @commands.command()
  async def play(self,ctx, url):
    ctx.voice_client.stop()
    FFMPEG_OPTIONS = { 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn' }
    YDL_OPTIONS = { 'format:"bestaudio"' }
    vc = ctx.voice_client

    with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
      info = ydl.extract_info(url, download = False)
      url2 = info['formats'][0]['url']
      source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
      vc.play(source)

  @commands.command()
  async def pause(self, ctx):
    await ctx.voice_client.pause()
    await ctx_send("Pausiert⏸️")

  @commands.command()
  async def resume(self, ctx):
    await ctx.voice_client.resume()
    await ctx_send("Weiter⏯️")

def setup(client):
  client.add_cog(music(client))
programmieren, Bot, Fehlermeldung, Discord

Android App löscht Session automatisch bei onDestroy?

Ich habe eine App, wo man sich anmelden muss.

Die SessionID wird in der Login Activity empfangen und gespeichert. Wenn ich auf einer anderen Activity bin, hole ich die SessionID aus den ShaPref und hänge sie an den Header. Dann erhalte ich einen Response. Alles funktioniert einwandfrei.

Aber sobald ich die App schließe und den Login überspringe, dann wird ja die SessionID wieder aus den ShaPref geholt und an den Header gehängt.

Die SessionID ist weiterhin vorhanden! Dies prüfe ich anhand des Toast und Logs.

Aber ich erhalte den Response, dass ich ausgeloggt sei. Und die Session ist komplett leer.

Meine Vermutung ist:

Das die SessionID nur der Ort ist, wo die Datei mit den Werten gespeichert ist. Also das ich die SessionID an den Header hänge und dann weiß die Seite, welche Datei benutzt werden soll. Aber wenn man aus der App herausgeht, löscht Android automatisch diese Datei. Doch die SessionID-Adresse bleibt bestehen.

Fragen:

  • Wie kann ich die App schließen, ohne dass Android die Datei löscht?
  • Wo wird die Session auf dem Handy gespeichert? Ich kann es ja am PC einsehen.
  • Wie kann ich verhindern, dass Androids onDestroy etc. die Datei löscht?

Und wie kann ich dafür sorgen, dass Android bei onDestroy etc. die Datei löscht?

Wenn ich angemeldet sein möchte und ich herausgehe und wieder rein, bleibt die SessionID. Aber auf der Webseite ist sie leer. Aber wenn ich nicht angemeldet sein möchte, dann wird die ShaPref gelöscht und dann soll auch die Datei gelöscht werden.

Ich hoffe, ihr habt eine Lösung, wie man die automatische Löschung von dieser Datei bei Verlassen der App verhindert.

Ich danke euch im Voraus.

App, programmieren, Java, Android, session, Speicherort, Android Studio

Meistgelesene Beiträge zum Thema Programmieren