Beiträge von tk1234

    So what - inwiefern enthält die Struktur von Failix Redundanzen?

    Die Struktur verletzt die erste Normalform. Ja, aktuell mag es so sein dass es immer vier Antwortmöglichkeiten gibt, trotzdem ist es sinnvoll die Datenbank gleich richtig aufzubauen - auch so Dinge wie eine Suche in den Antworten oder das Auflisten der Fragen samt richtiger Antworten werden dadurch (überhaupt bzw. ohne Verrenkungen) möglich.

    Wenn nummerierte Spalten nicht optimal sind, wie soll man die Spalten mit den vier Fragen dann bezeichnen?

    Die Spalte, Singular. in der Antworten-Tabelle gibt es zu jeder Frage vier (bzw. so viele wie es Antwortmöglichkeiten gibt eben) Datensätze wie die Spalte mit den Antworten jetzt genau heißt sei dir überlassen (frag 3 Leute und du bekommst 5 Antworten). Beschäftige dich mit der Normalisierung von Datenbanken, im Beispiel zur zweiten Normalform im Artikel bei Wikipedia sind die CDs quasi deine Fragen und die Lieder die Antworten.

    Ist es sinnvoll, die Struktur so anzulegen?

    Nein. Nummerierte Spalten sind idR ein deutlicher Hinweis darauf dass das Datenbankdesign defekt ist. So auch hier: die Antworten gehören in eine extra Tabelle in der dann noch die ID der Frage steht (ggf. eine Spalte mit einem Sortier-Wert wenn die Reihenfolge der Antwortmöglichkeiten festgelegt werden soll). Wo du speicherst welche Antwort richtig ist, hängt etwas davon ab ob es (zukünftig) möglich sein soll dass auch mehr als eine Antwort richtig ist: wenn nur eine richtig ist kannst du sie in der Fragen-Tabelle speichern, sonst in der Antworttabelle.

    Und: Datenbankdesign immer als SQL-Querys (CREATE TABLE für das Design und INSERT für die Daten) posten, nie als Bild - hat auch den Vorteil dass man evtl. falsche Spaltentypen gleich mit erkennt.

    Habe also den Befehl "crontab -e" genutzt auf meinem Raspberry PI und habe ganz unten folgendes hinzugefügt.


    /1 * * * * root /usr/bin/php /var/www/html/includes/verbindung.php


    Auch nach längerer Wartezeit ist nichts passiert.

    Logisch. Da zum einen ist »/1« als Angabe für die Minuten falsch, vor »/1« muss ein Bereich oder ein »*« stehen - wobei »*/1« zwar richtig, aber wenig sinnvoll ist: »*« macht das gleiche (siehe »man crontab.5«). Zudem gehört das »root« da nicht rein - zum einen soll das ganze sicher nicht als root ausgeführt werden und zum anderen gibt es in der Datei die mit »crontab -e« bearbeitet wird (im Gegensatz zu /etc/crontab) keine Spalten für den Benutzernamen.

    Zum Cronjob-Problem hat m.scatello ja schon geschrieben: einfach ein Script unabhängig von den schon existierenden Dateien erstellen (den ersten Punkt im Folgenden beachten!)

    In den Dateien createFolder.php und createUser.php steht soweit immer das gleiche drin.

    Sehe ich das richtig? Der Teil zum prüfen der Verbindung ist in beiden Dateien identisch (bis auf den Dateinamen halt?). Wenn du Code durch kopieren von einer Datei in eine andere duplizieren musst, ist das ein deutlicher Hinweis darauf dass du den Code in eine Funktion/Klasse auslagern und die Methode/Funktion in beiden Dateien aufrufen möchtest.

    ":datum" => date('d.m.y'),

    Das Datenbankdesign scheint mir defekt zu sein: das ist kein Datumsformat mit dem MySQL was anfangen kann. Der Parameter ist aber überflüssig, NOW() in den Query zu schreiben reicht (Voraussetzung ist natürlich ein korrekter Datentyp was bei dir nicht gegeben scheint).


    $passwort = $_POST['passwort'];

    Das umkopieren von Werten aus $_POST usw. war schon immer Unsinn, du kannst bei execute auch direkt die Werte aus $_POST verwenden. Speziell bei der Zeile erhebt sich allerdings noch die Frage: wo kommt $password_gehasht weiter unten dann auf einmal her?

    $createFolder = ssh2_exec($connection, "mkdir " . escapeshellarg("/media/Files/" . htmlspecialchars(ucfirst($userData["nachname"])) . "/" . $pfad . "/" . $nameNeu));

    Das htmlspecialchars hierdrin ist Käse, einen Kontextwechsel nach HTML gibt es hier nicht. Und wo kommt $userData auf einmal her? Und wo wird sichergestellt dass in $userData['nachname'] kein ../ steht?

    Es soll dazu führen, dass ein Video startet, sobald es auf dem Bildschirm beim Scrollen sichtbar wird.

    Nein, soll es nicht. Du hättest das vielleicht gerne, aber dein Benutzer eher nicht - und für die ist die Seite ja schließlich. Ich bin mir jetzt nicht sicher, meine aber mich zu erinnern dass zumindest einige Browser das von dir gewünschte Autoplay unterbinden.

    Inline-style versuchen zu vemeiden

    richtig. Klassennamen nach der damit gesetzten Eigenschaft zu benennen ist auch nicht wirklich besser … Die Klassen sollten immer nach dem Einsatzzweck benannt werden, nie nach der Darstellung - die kann sich auch ändern.

    Die Codefetzen schau ich mir jetzt nicht genauer an (v.a. bastel ich mir nicht alles so zusammen dass ich es testen kann - das wäre deine Aufgabe das zu ermöglichen ohne x Dateien händisch anlegen zu müssen), eines ist mir aber aufgefallen:

    if (strlen($ean) == 13 AND is_numeric($ean) AND !strpos($ean, '.') AND !strpos($ean, 'e')) {

    du suchst die Funktion ctype_digit() (statt is_numeric()), damit kannst du die beiden strpos() rauswerfen.


    Außerdem: gewöhn dir an das ?> wegzulassen wenn anschließend kein HTML kommt - dann riskierst du nicht dass dir irgendwelche Leerzeichen vielleicht mal in die Suppe spucken.

    Wie bringe ich der Funktion bei, dass sie ab 13 stoppt?

    Einfach im Ausdruck nur die Zahlen 1-12 erlauben: »\b([1-9]|1[0-2])\b«. Alternativ abfragen ob numberWordMap[nr] existiert:

    JavaScript
    1. '13'.replace(/(\d+)/g, (_, nr) => numberWordMap[nr] ? numberWordMap[nr] : nr

    (ob das wirklich korrekt so ist muss jemand beurteilen der in JS besser ist als ich, gibt es evtl. einen ??-Operator wie in PHP?)

    ich möchte ein Popupfenster erstellen welches ich über einen Desktoplink aurfufe.

    Was hast du genau vor? Was soll das --ssb im Kommando bewirken? Firefox kennt zwar eigentlich den Parameter --headless - der scheint aber aktuell einen Bug zu haben und Firefox startet mit dem Parameter garnicht.

    Mint kennt Webapps was wohl genau das machen würde was du vor hast - ob es für Windows sowas auch gibt weiß ich nicht.

    Wenn man diesen Code … so machen würde … der bessere Weg

    Nein. $variable existiert nur wenn das Formular abgeschickt wurde, die Daten sollen aber ja auch bei späteren Aufrufen der Seite noch existieren weswegen die erste Variante schon richtig ist, nur eben ohne htmlspecialchars (bzw. erst im zweiten if-Block bei der Ausgabe).

    Und warum eigentlich $_SESSION['ausgabe']='true'; und nicht $_SESSION['ausgabe']=true;?

    Es gebe auch noch eine möglichkeit mit Php.

    Da kommen zwar gleich wieder blöde Kommentare , aber was solls.

    Einfach einmal auf der gleiche Seite umleiten.

    Die Idee ist durch auch ok, gleich GET zu verwenden ist aber imho sinnvoller: die Abfrage verändert keine Daten, damit ist GET die Methode der Wahl - es wird schon seinen Grund haben dass Google (andere aber auch) GET-URLs verwenden.

    $_SESSION['ausgabe']=htmlspecialchars($_POST['textfeld']);

    *das* aber ist auch Käse: das Speichern des Wertes in der Session ist kein Kontextwechsel (einer nach HTML schon gleich garnicht) womit htmlspecialchars() hier falsch ist - die Funktion darf erst verwendet werden wenn der Wert tatsächlich im HTML an den Browser geschickt wird.

    Käse der aber funktioniert.

    Nein, einen Reload kann man nicht nur über F5 auslösen, mir fallen da spontan 4 weitere Möglichkeiten ein: Strg+R, Kontextmenü, Button in der Symbolleiste, Mausgeste wobei ich letztere Möglichkeit bevorzuge.

    __construct( $dsn = 'mysql:host=127.0.0.1;dbnameshop,charset=UTF8', $username = 'DB_USERNAME', $password = 'DB_PASSWORD' )

    Die Fehlermeldung passt nicht zum Code und der dsn ist immer noch Käse. Einer der drei Fehler darin ist das falsche charset (richtig wäre utf8mb4), den Rest siehst du hoffentlich selbst - wenn nicht solltest du überlegen ob das Programmieren wirklich das richtige für dich ist, simple Syntaxfehler sollte man auch selbst finden, dafür sind Foren nicht da.