Beiträge von JR Cologne

    So, liste einfach mal sortiert nach den Dateien alles auf, was mir bisher so aufgefallen ist:


    Allgemein:

    - in SQL Query Spalten- und Tabellennamen immer zwischen Backticks setzen (Beispiel: "SELECT `userId`, `username`, `passwort`, `rang` FROM `users` WHERE `username` = :username LIMIT 1")

    - nach einem Redirect mit header() solltest du die Funktion exit() ausführen

    - in deinen catch-Blöcken möchtest du nicht die allgemeine Exception, sondern die PDOException abfangen

    - niemals Fehlermeldungen von PHP bzw. Exceptions ausgeben, stattdessen einfach einen kurzen eigenen Text einfügen


    index.php:

    - ich würde eine Funktion hinzufügen, die den User von der index.php umleitet, wenn er bereits eingeloggt ist

    - Username wird vor Einführung in SQL Query nicht escaped, solltest du besser tun


    Eine Sicherheitslücke habe ich übrigens auch noch gefunden: Du verhinderst keine CSRF-Attacken.


    Beweis:

    html-seminar.de/woltlab/attachment/1602/



    So, habe mir jetzt noch nicht alles angeschaut, aber das sollte erstmal an Input reichen. Wenn du Fragen zu meinen Anmerkungen hast, raus damit.

    Wofür beweisen? Guck dir doch mal an, wie google das macht. Lösche deine Cookies, besuche google, lösche wieder deine Cookies und besuche wieder google. Es geht doch nicht darum, ob jemand den Datenschutz gelesen hat, das interessiert doch fast niemanden. Und auf wie vielen Seiten hast du das schon mal gesehen? Und glaubst du wirklich, dass irgend ein Besucher von bastis Seiten sich dafür interessiert?

    Ich habe mich ein wenig falsch ausgedrückt: Ich bin davon ausgegangen, dass er eine Nachweisfunktion für eine Einwilligung implementieren möchte.


    1. Beruht die Verarbeitung auf einer Einwilligung, muss der Verantwortliche nachweisen können, dass die betroffene Person in die Verarbeitung ihrer personenbezogenen Daten eingewilligt hat.

    Dann hast du eine statische IP...


    m.scatello Was soll er denn stattdessen machen? Es geht doch darum, eine Beweismöglichkeit zu schaffen, dass die Datenschutzerklärung oder was auch immer akzeptiert wurde, wenn ich das richtig verstehe. Natürlich weist die IP Lücken auf, aber eine viel bessere Lösung gibt es wohl nicht.


    Oder geht es darum, festzustellen, ob der Hinweis nochmal angezeigt werden muss? Dann wäre natürlich ein Cookie tausendmal besser.

    Wofür umrechnen? Wenn deine Seite über IPv6 aufgerufen wird, speicherst du einfach diese Adresse.


    Das Problem scheint aber zu sein, dass Basti die Seite über IPv4 aufruft, jedoch in der DB anscheinend eine IPv6-Adresse erhält. Entweder diese Aussage ist schlicht falsch oder irgendwas ganz merkwürdiges läuft da ab...


    basti1012 Bitte mach mal ein var_dump($query) nach dem Zusammensetzen des Querys mit sprintf().


    Des Weiteren kannst du deine Feldlänge eigentlich relativ leicht bestimmen.


    Die größte mögliche IPv4-Adresse sieht so aus: xxx.xxx.xxx.xxx (15 Zeichen)


    Die größte mögliche IPv6-Adresse sieht hingegen so aus: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (39 Zeichen)


    Wenn du deine IP also exakt in dem Format als VARCHAR abspeicherst, brauchst du eine Länge von 39 Zeichen.

    Generell sollte man versuchen, nicht zu viele verschiedene Dateien in eine Seite einzubinden, da sonst zu viele Anfragen getätigt werden müssen.


    Die Styles für eine Seite in unterschiedliche Dateien aufzuteilen, macht dementsprechend eher wenig Sinn.


    Manchmal macht es Sinn, wenn die CSS-Datei zu groß wird, eine CSS-Datei mit dem kritischen CSS (für den unmittelbar sichtbaren Bereich) im head einzubinden und eine zweite Datei mit dem unwichtigen CSS, das nicht sofort benötigt wird, am Ende des Bodys einzufügen. So bekommt man ggf. leichte Performance-Probleme behoben, vorausgesetzt die CSS-Datei ist sehr lang und blockiert das Rendern.


    Davon abgesehen würde ich aber immer zur Vermeidung von vielen Requests aufrufen, wenn man letztendlich alles auch in eine Datei packen könnte.


    Immer nur das relevante CSS zu laden, also z.B. das CSS für eine bestimmte Seite, ist natürlich ein weiterer Grund, der für eine Aufteilung des CSS-Codes in mehrere Dateien sprechen kann, wie Arne auch schon dargelegt hat.

    Das Problem ist, dass du anscheinend ein Objekt der Klasse mysqli_result mit einem Integer vergleichst.


    Die Frage ist für uns natürlich, um welche Variable es sich handelt. Ein wenig mehr Code wäre hilfreich.


    Es wird auf jeden Fall an der Variable $checkentry2 oder an $spam_schutz liegen.


    Und warum zum Teufel schreibst du "bla bla" in deinen Code? :D


    Das ist gleich der nächste Fehler.

    Das muss ich leider korrigieren. Der main-Tag sollte nur einmal vorkommen.

    Header und Footer hingegen können mehrmals verwendet werden, da diese z.B. auch innerhalb des article-Tags zur Unterteilung eines Blog-Beitrags o.ä. genutzt werden können.

    Im Header würden dann z.B. das Artikelbild und der Titel untergebracht sein, während im Footer der Autor sowie das Erscheinungsdatum stehen würde.

    Das ist so nicht möglich. Du kannst mit CSS immer nur auf Elemente der gleichen Ebene bzw. auf untergeordnete Ebenen zurückgreifen. Sprich: Schwester- sowie Kindelemente.


    Möglich wäre es also, wenn deine Checkbox auf der selben Ebene wie der Container ist, der das Element, was du ansprechen möchtest, umschließt.

    Sieht mir nach dem JS-Framework Vue.js aus, richtig?


    Ich fürchte, da kennt sich hier keiner mit aus.


    jope Wenn du selber keine Ahnung davon hast, lass das lieber bleiben. Arbeite erstmal mit purem JS oder zumindest mit jQuery.


    Davon abgesehen dürfte dein Problem allerdings sehr simpel sein. Du nutzt einen li-Tag, welcher selbstverständlich kein Link ist. Täusche ihn durch den a-Tag aus und es sollte funktionieren.


    Hier wird übrigens klar, dass es massiv an den Grundlagen bei dir scheitert. HTML und CSS sowie die Basics von JS sollte man auf jeden Fall drauf haben, bevor man sich an ein Framework wie Vue.js wagt.



    HTML
    <a v-for="scan in scans" :key="scan.date" :title="scan.content" href="{{ scan.content }}"> {{ scan.content }}</a>


    HTML
    <a v-for="scan in scans" :key="scan.date" :title="scan.content" :href="scan.content"> {{ scan.content }}</a>


    Wenn das Erste nicht funktioniert, mal das Zweite ausprobieren. Habe wie gesagt keine Ahnung von Vue.js. Kann also selbst nur Vermutungen aufstellen.

    m.scatello Geht das auch ein bisschen freundlicher und mit weniger Ausrufezeichen? Du hast ja nicht unrecht und meinst es sicher auch nur gut, aber dein Tonfall sorgt vielleicht nicht wirklich dafür, dass Basti dir eher zuhört und deine Ratschläge befolgt.


    Das macht es letztendlich für alle einfacher, wenn wir hier alle einen guten Umgangston pflegen. Danke. :)