Beiträge von tk1234

    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.

    Ich habe mein Projekt gerade ohne jegliche Änderungen auf mein Webserver hochgeladen und über den Browser aufgerufen. Nun kommt der gleiche Fehler wie zu Beginn: Die Klasse kann nicht gefunden werden, obwohl der Pfad zur PHP-Datei stimmt.

    Da der Webserver vmtl. unter Linux läuft könnte es an einem Klassiker liegen: Groß- und Kleinschreibung bei Dateinamen und Verzeichnissen nicht konsequent beachtet (Linux unterscheidet hier, Windows nicht) - mehr lässt sich so völlig ohne Kenntnis von Code und Datenstruktur nicht sagen.


    Zum Thema Dateien außerhalb vom document-root ablegen muss ich auch noch was nachtragen: dass große Shop-System alle ihre Dateien innerhalb des Root-Verzeichnisses hätten (-> #9) stimmt nicht: Shopware z.B. hat da mit der Version 6 umgestellt, wenn die Domain nicht auf das public-Verzeichnis zeigt sondern auf die Ebene darüber, bekommt man lediglich eine Fehlermeldung. Das muss natürlich nicht repräsentativ sein, oft wird es aber historische Gründe haben da eine Umstellung der Verzeichnisstruktur immer einen gewissen Aufwand mitbringt.

    Das funktioniert so weit auch alles ganz toll, allerdings möchte ich gerne die 5 Hauptpunkte in fetter Schrift hervorheben und dabei habe ich das Problem, dass das dazugehörige Aufzählungszeichen (also 1., 2., etc.) nicht fett dargestellt wird.

    Du sagst dem Browser ja nicht dass die Zahlen fett sein sollen, du musst ol oder li schon fett formatieren (für ul dann wieder zurücksetzen). Und lass die style-Attribute weg, die sollten die absolute Ausnahme sein.

    gibt es eine Möglichkeit eine bestimmte Session zu beenden?

    Nein. Du kannst in einem Script nur die eigene Session bearbeiten, fremde Sessions kannst du natürlich nicht beeinflussen. Dir bleibt nur mit Flags zu arbeiten anhand derer bei jedem Seitenabruf abgefragt wird ob die Session noch weiterlaufen darf oder nicht. Aber was hast du eigentlich wirklich vor? Warum pfuscht der Admin im Passwort eines Benutzers rum? Bei einem vergessenen Passwort ist es ok wenn ein temporäres(!) Passwort gesetzt wird - in deinem Fall kennt der Benutzer aber ja sein Passwort (sonst wär er nicht angemeldet).


    Habe das mit diesem Code versucht:

    unset($_SESSION[$benutzer_id])


    leider funktioniert dies nicht. Ich erhalte auch keine Fehlermeldungen.

    "Funktioniert nicht" ist keine Fehlerbeschreibung und eine Fehlermeldung bekommst du nur wenn $benutzer_id oder $_SESSION[$benutzer_id] nicht existieren - außerdem änderst du damit ohnehin nur deine eigene Session.

    Beachte auch den obersten Beitrag unter "User Contributed Notes".

    Nur als Hinweis: da die Anmerkungen im Handbuch abhängig von der Bewertung sortiert sind, kann sich die Reihenfolge verändern - sinnvoller ist es also direkt auf den Eintrag zu verweisen den man meint (einfach auf die E-Mailadresse klicken).