Das ist eine nicht unübliche Frage, mit der jeder Freelancer/Unternehmer bestimmt früher oder später einmal konfrontiert wird.

Die Frage in diesem Fall ist: wer übernimmt die Haftung?

Wenn du auf der sicheren Seite sein willst, erstellst du dir, oder lässt dir von einem Anwalt einen entsprechenden Haftungsauschluss (oft auch in den AGBs enthalten) erstellen und diesen von deinen Kunden akzeptieren/unterschreiben. 😉

...zur Antwort

Vielleicht hast du nicht ganz verstanden wie die Domains funktionieren?

Mithilfe der Domain kannst du ein Eingabeschema definieren. Aktuell überprüfst du ob in das jeweilige Feld: "Vorname" oder "Nachname" eingetragen wurde.

Du willst aber eigentlich überprüfen ob in diesen beiden Feldern überhaupt etwas eingetragen wurde. Also müsstest du vermutlich eher sowas machen:

CREATE DOMAIN Namen as VARCHAR(200) CHECK (value IS NOT NULL AND value <> '');
...zur Antwort

Grundsätzlich sieht das gar nicht so falsch aus, was du da gemacht hast. Du musst jedoch auf ein paar Dinge aufpassen.

Mit folgendem Code sollte es funktionieren:


function Test() {
  let button = document.getElementById('button');
  button.disabled = false;
}
Erklärung: die Funktion heißt getElementById (beachte die Groß- & Kleinschreibung)
Wenn du "let" zur Definition von Variablen benutzt musst du darauf achten dass diese nur innerhalb eines Blocks verfügbar sind. Kurz gesagt wenn du das außerhalb der Funktion definierst, ist es innerhalb der Funktion nicht verfügbar. Also entweder die Definition auch in die Funktion packen oder stattdessen "var" verwenden.
...zur Antwort

Ich würde versuchen 2 separate Fotos zu machen. Einmal für den Hintergrund und einmal für die Personen im Vordergrund.

Bei dem Foto im Vordergrund ist wichtig, dass man die Umrisse gut erkennen kann, sonst sieht das womöglich merkwürdig aus, oder man erkennt nicht wirklich die Personen auf dem Bild.

Wenn man die Personen auf dem Foto anschließend ausschneidet, sollte es kein Problem sein, sie einfach komplett auszufüllen. (hierfür gibt es viele verschiedene Möglichkeiten)

Hoffe das hilft dir einigermaßen?

Btw. am PC ist es mit Sicherheit einfacher als auf dem Handy. Bei ersterem findest du vermutlich auch eher kostenlose Programme, wie z.B.: Gimp (gibts zwar auch fürs Handy, aber naja 😅)

...zur Antwort

Hallo,

Ende-zu-Ende-Verschlüsselung heißt, dass die Nachrichten von deinem Gerät aus verschlüsselt versendet und erst am Empfängergerät entschlüsselt werden (können).

Damit das ganze funktioniert, muss der Versender wissen, wie die Nachricht verschlüsselt werden soll, dass sie der Empfänger entschlüsseln kann. Und der Empfänger muss natürlich wissen wie die Nachricht verschlüsselt wurde, um sie entsprechend entschlüsseln zu können.

Dafür werden die Schlüssel ausgetauscht - erst ab dann ist eine verschlüsselte (End-to-End) Kommunikation möglich.

Ich vermute dass du diese Nachricht bekommen hast, weil ein "neuer Schlüssel" erzeugt wurde. Das kann dann passieren, wenn z.B.: ein neues Gerät (z.B.: neues Handy) ins Spiel kommt.

...zur Antwort

Hallo,

das geht so nicht, aber es gibt andere Möglichkeiten - abhängig davon was du machen möchtest:

1.) Du kannst eine "Organisation" anlegen. Dadurch kannst du deinen Projekte (=Repositories) unter einem gemeinsamen "Namensbereich" führen.

2.) Man kann in ein Git Repository, mehrere andere Git Repositories (=Submodules) integrieren. D.h. du könntest ein "übergeordnetes" Repository machen und dort dann deine anderen beiden Repositories, jeweils als "Submodule" einbinden.

Beide Punkte haben aber unterschiedliche Anwendungsfälle. Bei Variante 1. gruppierst du deine Repositories, dass sie gemeinsam unter dem "gleichen Namen" gefunden werden können.

Bei der 2. Variante geht es viel mehr darum, den bereits bestehenden Code aus einem Git Repository, in einem anderen Repository wieder verwenden zu können, ohne diesen "direkt" kopieren zu müssen.

Ich hoffe das hilft dir, bei deinem Vorhaben weiter? :)

...zur Antwort

Hallo,

die Variable e ist in deinem Fall das Event. Genauer gesagt das ClickEvent bzw. MouseEvent. Du bekommst es automatisch übergeben, sobald der Button dann geklickt wurde.

In einigen Fällen willst du eventuell genauer wissen, wohin geklickt wurde. Das kannst du dir theoretisch dann alles aus diesem Objekt auslesen.

Dokumentation dazu findest du beispielsweise hier:

https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event

...zur Antwort
Werte aus Datenbank anzeigen mit JS?

Hallo,

ich habe folgenden Code für mein Formular:

<form action="/message1" method="post">
  <div class="input">
    <input type="text" placeholder="Chat" id="input" name="input1">
  </div>
  <div class="send">
    <button type="submit" onclick="message();">Send</button>
  </div>
</form>

Nun noch das JS onclick-Event:

function message() {
  input = document.getElementById("input").value;
  count++;

  if (input == "") {
    alert("please type your message!");
  }
  else {
    if (count % 2 == 0) {
      let newDiv = document.createElement("div");
      newDiv.id = "divMessage";
      newDiv.style.display = "flex";
      newDiv.style.justifyContent = "flex-start";
      newDiv.style.margin = "45px";
      newDiv.style.backgroundColor = "#303032";
      newDiv.style.borderRadius = "10px";
      newDiv.style.padding = "10px";
      newDiv.style.marginTop = "80px";
      newDiv.style.color = "white";
      newDiv.style.marginBottom = "80px";
      newDiv.style.width = "120px";
      newDiv.innerHTML = input;

      let chatMessages = document.querySelector(".chat-messages");
      chatMessages.appendChild(newDiv);
    }

Und nun noch das Reinschreiben mit node.js in die MariaDB-Datenbank:

app.post('/message1', async (req, res) => {
  const input = req.body.input1;
  console.log(input);
  const conn = await pool.getConnection();
  await conn.query(`INSERT INTO test.handy (id, name) VALUES (2, '${input}')`);
  conn.release();
});

Nun möchte ich aber, das, was in die Datenbank geschrieben wurde, beim Aktualisieren der Seite immer noch im "newDiv" anzeigen. Wie geht das?

LG

...zur Frage

Hallo,

du brauchst genauso wie du einen Datensatz einfügen kannst, auch eine Möglichkeit die bestehenden Daten abzufragen bzw. auszulesen. Dafür gibt es grundsätzlich mehrere mögliche Lösungswege.

Am besten du machst dir hierfür noch einen zusätzlichen Endpoint: /messages wo du über einen SQL Query dir die jeweiligen Nachrichten abfragst:

SELECT id, name FROM test.handy;

Anschließend kannst du die ganzen Nachrichten, die du als Response bekommst, wieder, wie schon zu vor, mittels JavaScript auf der Seite hinzufügen.

Ich möchte allerdings anmerken, dass das nicht unbedingt der Weg ist, wie man so etwas heutzutage implementiert.
...zur Antwort

Hallo,

Ich würde ein WordPress Plugin erstellen das lediglich über einen Shortcode deinen bereits bestehenden Code einbettet. Dadurch kannst du deinen Code mittels WordPress an jeder beliebigen Stelle einsetzen.

...zur Antwort

Hallo,

es gibt verschiedene Ansätze wie du das bewerkstelligen kannst.

  • Du kannst entweder das Bild über CSS (float: right) rechts positionieren
  • Du kannst via HTML eine Tabelle machen, bestehend aus 2 Spalten und links den Text und rechts das Bild einfügen
  • Du kannst via CSS ein Grid machen bestehend aus 2 Spalten und links den Text und rechts das Bild einfügen
...zur Antwort

Hallo,

aus Sicherheitsgründen muss man beim Erstellen eines Zoom-Meetings immer einen Sicherheitsmechanismus auswählen. Dabei gibt es derzeit 3 Möglichkeiten:

  1. Kenncode - dabei muss du als Benutzer einen Code eingeben um dem Meeting beitreten zu können.
  2. Warteraum - der Host des Meetings muss die Teilnahme von Benutzern explizit erlauben
  3. Nur berechtigte Benutzer können teilnehmen (dafür ist ein Zoom Account notwendig)

Soweit ich weiß gibt es auch Zoom-Links bei denen die Kenncodes bereits im Link enthalten sind und somit nicht erneut eingegeben werden müssen.

...zur Antwort

Hallo,

kannst du über WordPress generell Emails versenden? Beispielsweise "Passwort vergessen" oder ähnliches. Falls das auch nicht klappt, könnte eventuell deine Mailkonfiguration falsch sein? 🤔

Vielleicht findest du auch noch nähere Informationen zum Fehler im Error-Log. Ohne einer "richtigen" Fehlermeldung wird es wohl schwierig eine Lösung zu finden.

...zur Antwort

Es gäbe alternativ noch:

setInterval()
...zur Antwort

Ich denke das funktioniert nur unter Windows aber versuch mal:

import os

os.system(f'mode con: cols={cols} lines={lines}')
Allerdings kannst du hier die Länge & Breite lediglich anhand von Zeilen & Spalten angeben.
...zur Antwort

Der Unterschied ist relativ einfach erklärt.

Die Blockprogrammierung funktioniert wie ein Baukastensystem wo man einfach vorgefertigte Code-Blöcke in einer bestimmten Reihenfolge anordnet ggf. auch verschachtelt um einen Programmablauf zu definieren. (Ideal für Anfänger geeignet)

Bei der Syntaxprogrammierung muss man das alles selbst schreiben - das ist natürlich etwas fehleranfälliger aber dafür wesentlich flexibler und nicht so eingeschränkt, wie mit vordefinierten Blöcken/Elementen arbeiten zu müssen.

...zur Antwort

Das gibt es leider nicht und das ist auch gut so!

Sonst könnte ja jeder auf einen Schlag sehen, wo du überall registriert bist 😅
Datenschutzrechtlich absolutes no-go.

Die einzige Möglichkeit die dir bleibt, sofern du es dir nirgendwo notiert oder gespeichert hast, deine Emails zu durchstöbern - bzgl. Registrierungsemails (das ist aber natürlich auch keine 100%-Garantie)

...zur Antwort

Um deine erste Frage zu beantworten:

Ja man kann auch mit einem Laptop Spiele entwickeln

Es hängt aber natürlich auch davon ab welches Spiel man entwickeln möchte und welche Technologien man dafür benötigt oder einsetzen möchte.

Ich denke wir sind uns einig dass es einen riesengroßen Unterschied macht ob du ein Spiel wie "TicTacToe" oder ein Spiel wie "Call of Duty" realisieren willst.

Bzgl. deiner 2. Frage:

Im Prinzip sollte jeder Laptop das packen - Fakt ist je mehr Leistung er hat, desto schneller wird auch das Kompilieren/Ausführen des Codes laufen.
...zur Antwort

So wie du es beschrieben hast in der ASCII-Tabelle ab Leerzeichen (32) bis inkl. Kleines "z" (122)

Das kleine "a" ist in deinem Fall sogar irrelevant weil es sowieso im Bereich enthalten ist.

Das beinhaltet also sowohl Kleinbuchstaben, als auch Großbuchstaben sowie vereinzelte Sonderzeichen und Ziffern.

Hingegen [a-z] würde lediglich die Kleinbuchstaben umfassen.
Und [a\-z] wäre lediglich "a", "-" und "z"
...zur Antwort

Eine App kopieren geht grundsätzlich nur dann wenn du den vollständigen Quellcode der jeweiligen App besitzt. Nachdem die meisten Firmen diesen Code natürlich nicht veröffentlichen und das aus gutem Grund, kannst du die App auch nicht einfach kopieren.

Du solltest außerdem beachten, das selbst wenn du den vollständigen Code hättest, das Kopieren und Vertreiben lizenztechnisch ein strafrechtliches/urheberrechtliches Problem darstellen kann/wird.

D.h. im Prinzip wirst du nicht darum herum kommen, die App von Grund auf neu entwickeln zu müssen, alleine deshalb schon, weil du vermutlich die App auch nicht 1zu1 verwenden möchtest.

Der Aufwand für die Entwicklung einer solchen App (wie z.B.: Clash of Clans) würde bestimmt einige tausend Stunden umfassen.

...zur Antwort

Im Falle einer Arrow-Function, wird, wie der Name schon sagt eine Funktion übergeben. Demnach ist die Syntax auch relativ ähnlich zu einer gewöhnlichen Funktion, mit dem Unterschied, dass es keinen Namen gibt, weil es eine anonyme Funktion ist.

Eine alternative Schreibweise wäre (falls du dich damit besser anfreunden kannst):

function init() {
    window.addEventListener("keydown", function (userInteraction) {
      if (userInteraction.key !== undefined) {
        console.log(userInteraction.key);
      }
    });
}

Du kannst übrigens auch eine Funktion definieren und diese dann als Parameter übergeben, falls du das übersichtlicher findest:


function init() {
    var callback = function (userInteraction) {
      if (userInteraction.key !== undefined) {
        console.log(userInteraction.key);
      }
    };
    window.addEventListener("keydown", callback);
}
...zur Antwort