Beiträge von cottton

    Immer gern.
    Mit den rewrite rules kann ich Dir allerdings grad nicht weiterhelfen - da müsste ich selbst suchen :D
    Aber hier im Forum gibts einige, die das drauf haben (die machen bestimmt gerade Mittagsschlaf ... eigtl keine schlechte Idee :D )

    Dann jetzt mal mit doctype ect:


    Das einzige (das ich kenne und) das POST "leert" ist in der php.ini der Schlüssel: enable_post_data_reading
    aber dann hätte das andere Script auch nicht funktioniert.

    Wenn das jetzt nicht läuft, dann weiß ich auch nicht weiter :D

    Evtl die Leerzeichen bei action:

    PHP
    <form action=" <?php echo $_SERVER['PHP_SELF']; ?> " method="post" enctype="text/html">


    ändern zu

    PHP
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="text/html">

    probier mal das hier:

    Das ... raff ich auch grad nicht :D
    mach mal n var_dump() als Testausgabe:


    was wird ausgegeben?

    So langsam wird es wohl Zeit sich darum zu kümmern. Hab daher mal nachgelesen worum es eigtl. geht.
    Dem Benutzer soll also klar gemacht werden, dass "wir" Cookies nutzen und auf seinem Speichermedium ablegen.
    obwohl wir das ja nicht direkt können, sondern der Benutzer durch die von ihm genutzte Software das ablegen zulässt

    Ich hatte einige "fertige" Scripte dazu gesehen.
    Das Problem das ich damit hab ist, dass alle JS nutzen. Warum? So ein Quark. Hat der Nutzer kein JS laufen, dann wird er nicht informiert.
    Ausserdem ist es via PHP (mMn) viel einfacher diese Zustimmung einzuholen / einzubauen.

    Hier mal das PHP Script (erstmal ohne Text):
    FILE: cookie_consent.php


    Dieses File wird einfach in die vorhandene Seite eingebaut per:

    PHP
    // am anfang der index.php
    require('cookie_consent.php');
    
    
    
    
    // und hier dann der anfang deiner page ...

    Der Ablauf ist simpel:
    - wurde noch nie akzeptiert, dann zeige Formular an und verhindere den weitren Ablauf der Seite (exit())
    - wurde Form abgesandt, dann erstelle Cookie und leite weiter zur URL (die, die eigtl aufgerufen wurde -- GET-Parameter bleiben also erhalten)
    - wurde cookie gefunden (akzeptiert), dann sind wir sofort wieder aus der cookie_consent.php raus

    Jetzt überlege ich nur noch, was alles an Text rein kann, soll, muss.
    Evtl hab ich auch ein paar Fehler?
    Jemand Lust mit zu machen?
    Hier die cookie_consent.php mit dem momentanen Text:

    Live test: http://www.cottton.net/index.php?para1=1&para2=2&para3=3
    Files: html-seminar.de/woltlab/attachment/845/

    Schreib mal ganz an den Anfang des Scripts:

    PHP
    ini_set('error_reporting', -1);
    ini_set('display_errors', -1);

    bei mir funktioniert es:


    Wenn ich Benutzernamen und Kennwort eingebe und das Formular abschicke, bekomme ich: hab nutzer und kennwort

    Hinweise:
    mysql_ Funktionen sind veraltet und unsicher.
    Du schreibst auch Benutzereingaben direkt in die Sql-Query ! Das ist sehr unsicher!
    Nutze besser mysqli_ oder PDO (suche im Forum oder Suchmaschiene).

    Du schreibst clear-text-passwords in die db! Das ist falsch.
    Passworte gehören gehasht in abgespeichert (auch siehe Forum ...).

    Nutze beim input-Feld für das Passwort den typ "password".
    Dadurch wird die Eingabe gepunktet (für nebenstehende nicht mitlesbar).

    HTML
    <input type="password"  ... />

    Empfehlung:
    nutze besser != oder !== bzw == und ===
    anstatt <>
    (oder empty() bzw !empty())

    (das ist keine Frage, sondern ein Hinweis)

    Warum anonymisieren?

    Zitat von https://support.google.com/analytics/answer/2763052?hl=de

    Diese Funktion wurde entwickelt, damit Websiteinhaber ihre eigenen Datenschutzbestimmungen oder die Empfehlungen der lokalen Datenschutzbehörden in bestimmten Ländern einhalten können, wenn diese eine Speicherung der vollständigen IP-Adresse untersagen.

    Wie?
    http://blog.smarter-ecommerce.com/en/implementin…-anonymization/

    Zum Thema:
    ich hab mir gerade den Arsch wund gesucht, da ich kein __utm.gif -request bekam.
    Nachdem ich mir den Traffic mal genauer angesehen hab, fand ich:


    eine Request auf google-analytics.com.
    Was hier interessiert ist der Parameter:

    Code
    &aip=1


    der uns sag, dass aip (anonymizeIp) auf den Wert 1 gesetzt wurde.

    Was wohl (früher?) das __utm.gif war, ist jetzt wohl eine GET Request vom Typ text/html

    Wie also prüfen, ob "anonymizeIp" aktiviert ist.
    Seite neu laden,
    Rechtsklick -> Element untersuchen (oder Firebug ect)
    -> Netzwerk
    Suchen/Filtern nach "analytics"
    wodurch die Request "http://www.google-analytics.com/collect?v......" gefunden werden sollte.
    Anklicken und im Header nach Parametern suchen,
    dort sollte dann der Key "aip" (hoffenlich :)) mit dem Wert "1" auftauchen.

    Du nutzt LEFT JOIN auf `web_produktkategorien`.
    Dabei sollte es doch zu jedem Datensatz in `web_produkte` auch einen passenden in `web_produktkategorien` geben, richtig?
    Also zu jedem Produkt eine Kategorie.
    Demnach solltest Du ein JOIN (kein LEFT) nutzen.
    Bedenke dann aber auch, dass es keinen Datensatz gibt, wenn es zum Produkt keine Kategorie gibt.
    Btw: Nutzt Du Fremdschlüssel ("foreign keys")?

    Will Dich jetzt aber nicht verwirren.
    Ich hoffe ich hab verstanden, was Du suchst:


    Jetzt versteh ich allerdings nicht, was Du hier warum auswählst.


    NOTE: kürzere Namen wäre wiklich Augenfreundlicher und übersichtlicher, wenn man mal was sucht ;)
    zB
    web_users_produktkategorien_settings
    könnte
    web_user_prodkatg_settings

    Bin gerade etwas müde, weiß also nicht was Du suchst.
    Aber hier hast Du einen Fehler:

    PHP
    elseif (@$_SESSION['schule'] == "foerderschule" OR "hauptschule"  ) {


    Warum:
    (siehe Kommentare)

    PHP
    elseif (
        @$_SESSION['schule'] == "foerderschule" // OK, ausser das @, aber das kann man machen
        OR "hauptschule"  // hier ergibt die bedingung IMMER true zurück, denn ein nicht leerer string "ist etwas", also nicht "flasch"
    )


    ändere das mal in das hier:

    PHP
    elseif (
        @$_SESSION['schule'] == "foerderschule" 
        OR @$_SESSION['schule'] == "hauptschule"  
    )


    und noch besser ohne @

    PHP
    elseif (
        isset($_SESSION['schule'])
        AND ( 
            $_SESSION['schule'] == "foerderschule" 
            OR $_SESSION['schule'] == "hauptschule"  
        )
    )

    So nicht :D

    Vorweg:
    Du hast Fehler bei der Verwendung von "

    PHP
    echo "<div class="abstand_preis">"; // falsch
    //richtig:
    echo '<div class="abstand_preis">';
    // oder
    echo "<div class={BACKSLASH}"abstand_preis{BACKSLASH}">"; // backslashes \ werden im forum nicht dargestellt -.-


    und das Problem scheinst Du überall zu haben.

    Zum IF:

    Klar geht das. Aber ich dacht Du weißt wie das geht =)


    könnte man noch schöner gestalten. Aber das überlass ich Dir =)

    Ich hatte angefangen mit Datetime zu antworten. Hab das dann aber wieder verworfen, weil ich dachte es wäre zu aufwendig.
    Aber wie ich sehe kommst Du ja damit klar.

    Du hast schon alles richtig gemacht.
    was Du einfach nur noch machen musstest ist die Woche zuvor als start anzugeben.

    Ich denke Du willst sicher selbst bissl versuchen =)
    daher hier der Ablauf:
    erstmal die time-zone auf

    PHP
    date_default_timezone_set('Europe/Berlin');


    oder wie Du es brachst.

    Dann holst Du Dir den jetzigen Tag.
    Mit date() http://php.net/manual/de/function.date.php kanst Du Dir u.a. auch den momentanen tag als Zahl zurückgeben lassen.
    zB

    PHP
    echo date("N", time()); // '2', denn heute ist Dienstag


    Jetzt willst Du ja von Montag aus mit der Ausgabe loslegen. Also gehen wir x Tage zurück:

    PHP
    $t = time(); // jetzt als unix timestamp (sekunden)
    $a_day = 60 * 60 * 24; // 60 sec * 60 min * 24 hours (ein tag in sekunden)
    // solange 1 tag abziehen, bis es montag (tag nummer 1) ist:
    while(date("N", $t) > 1){
        $t -= $a_day;
    }
    echo date("N", $t); // '1' für montag


    Jetzt willst Du ja noch eine Woche zurück. Also ziehst Du von $t noch eine Woche ab:

    PHP
    $a_week = $a_day * 7; // sekunden von 1 tag mal 7 tage
    $t -= $a_week; // ist nun der unix timestamp von letzer woche montag


    Was Du jetzt noch machen musst:
    eine Schleife, in der Du (zB) ein array mit der jeweiligen Woche und dessen tage befüllst.
    Dazu zählst Du nach jedem Durchlauf der Schleife um 1 Tag hoch

    PHP
    for(... solange wir nicht am letzten gewünschten tag angekommen sind ...){
        // ... den tag in array packen
        $result[$week][$day] = date('l (d.m.y)', $t); 
       $t += $a_day; // nächste tag
    }


    Das Format l (kleines L) gibt den geschriebenen Wochentag zurück. Allerdings in English -- müsstest Du dann noch mit dt ersetzen.

    geht noch einfacher (meiner Meinung nach =)

    BTW -- Thea Sicherheit:
    Daten maskieren beim Ausgeben:

    flo96
    würde noch prüfen, ob die eingetragene email eine (Anzahl 1) valide email ist.
    Ich hab mal nen Testeintrag abgeschickt mit der email: fake@test.de,hanswienerschnitzel@gmail.com

    Es gibt fälle, bei denen sowas als Lücke ausgenutzt wird. Dabei werden viele viele email-Adressen per Komma angehangen und der Server fungiert als Spam-Verteiler.
    Hier in Deinem Fall sollte das (noch) nicht passieren können. Falls Du aber das oder ein ähnliches Formular erweiterst
    wie zB als Kontaktformular:
    - User trägt sein Anliegen ein
    - trägt seine email ein
    - schick Formulat ab
    - Du erstellst Serverseitig eine sofort-Antwort in etwa "Vielen Dank für Ihr interesse ... Ihre Nachricht wird sobald wie möglich bearbeitet. ..."

    Ein Angreifer könnte nun viele email-Adressen Komma-getrennt als email angeben,
    und Dein Server sendet an all diese Adressen emails raus.

    (Ist ein bissl schlecht erklärt, aber der Sinn sollte klar sein)

    Akzeptiere also nur valide emais (Anzahl 1)
    http://php.net/manual/de/filter.examples.validation.php

    So, wollt nicht vom eigtl Thema ablenken, fand es aber wichtig (auch was wolf meinte zwecks sql) =)

    REGEXP

    SQL
    SELECT 
    * 
    FROM db.table
    WHERE 
    	`keywords` REGEXP '.*Motorrad.*|.*Fachbetrieb.*'
    	OR `text` REGEXP '.*Motorrad.*|.*Fachbetrieb.*'
    ;


    da geht bestimmt noch einiges am Pattern.

    siehe:
    http://dev.mysql.com/doc/refman/5.6…operator_regexp
    https://dev.mysql.com/doc/refman/5.0…n-matching.html

    EDIT:
    LIKE würde auch ~irgendwie funzen. Aber dann eben nur mit mehreren ORs.

    EDIT2:
    test: