Beiträge von cottton

    falls es mal jemand braucht - hab mir paar Funktionen geschrieben um Scripte einfacher zu lesen/schreiben.

    toBit:
    Nützlich wenn man zB INSERTs in die db schicken will like:

    PHP
    §sql = "INSERT INTO `db`.`tbl` SET `an_oder_aus` = " . toBit($val) . ";";
    // tipp: "an aus" felder können vom typ BIT(1) sein
    // INSERT INTO `db`.`tbl` SET `feld_one_bit` = b'0'; -- siehe: http://dev.mysql.com/doc/refman/5.0/en/bit-field-literals.html


    Funktion:


    Test:


    out:

    ----------------------------------------

    toBool:
    Nützlich, wenn man den Inhalt einer var als boolean braucht -- klar irgendwie.
    Funktion:

    PHP
    function toBool($var, $trim_str=true){
        (($is_str=is_string($var))and $trim_str)and $var=trim($var);
        return (
            ($is_str and ($var === 'false' or $var === 'null'))
            or (is_numeric($var)and $var < 1)
        ) ? false : (bool)$var;
    }


    Test:


    out:

    --------------------------

    toStr:
    Nützlich, wenn man debuggen muss/will (null wird ja dann zB nicht ausgegeben ect ect)
    Funktion:


    Test:


    out:


    Weitere Bsp:

    Das geht mit login-paths
    siehe; http://dev.mysql.com/doc/mysql-util…ylogin.cnf.html
    oder: https://search.oracle.com/search/search?search.timezone=-60&search_startnum=&search_endnum=&num=10&search_dupid=&exttimeout=false&actProfId=0&q=mylogin.cnf&group=MySQL&sw=t&search_p_main_operator=all&search_p_atname=&adn=&search_p_op=equals&search_p_val=&search_p_atname=&adn=&search_p_op=equals&search_p_val=

    Der login via console läuft dann in etwa:

    Zitat

    shell> mysql --login-path=local


    Via PHP hab musste mal suchen. Habs selbst noch nicht getestet.

    EDIT:
    wobei Du bedenken musst: sobald sich jemand Zugriff auf Deine Files (config.php zB) verschafft hat,
    dann kann er den Login auch wieder auslesen.
    Ist auf jeden Fall ne Hürde und Logindaten tauchen nicht in Logfiles auf.

    Wenn Du

    PHP
    if(isUserLoggedIn($mysqli) === true) // beachte hier true


    nutzt, dann kann jeder rein, der eingeloggt ist -- also Admin und User. (Bsp index.php/html)

    Adminbereich:

    PHP
    if(isUserLoggedIn($mysqli, 'Admin') === true)

    Eigtl würde ich persönlich mit einer Funktion den Benutzer laden

    SQL
    "SELECT * FROM web_users WHERE user_session=? -- weiß nicht für was session steht"


    und dann in eine Variable packet -- zB $user oder $current_user.
    Dann könntest Du (mit nur einer Query) prüfen:
    ist user vom typ "User", oder "Admin", ist er eingeloggt, ...

    Ich versuchs mal so:

    endlos Scripts (console/shell).
    Das kann aber auch bei ner Webseite passieren wenn zB die maximale Packetgröße überschritten ist (riesen INSERTs o.ä.).
    Dann sagt der Mysql-Server "nö" (Verbindung geschlossen) (aber kein "tschüss" -- also kein closing frame) und das Script rennt evtl in einen Fatal Error.

    Ja :D
    Hab das beim Schreiben vergessen - aber nicht beim Testen :D
    Beim Test bekam ich durchweg "connected via tcp/ip" o.ä.
    Selbst wenn ich den mysql-Server runtergefahren hab und danach eine Query abgefeuert hab (spätestens hier hätte in der PDO ja geschalten werden müssen ~connected = false)

    Hab inzw. festgestellt, dass es unzuverlässig ist.
    Nutze jetzt (pseudo code):

    Code
    if !stmt->execute()
        if stmt->errorCode === 2006 // 2006 ^= "server gone away"
            sql->reconnect

    zu den pws: ok, sieht dann aber aus wie ein md5 hash. Wie gesagt - lies Dir die Posts bei Gelegenheit mal durch. Wir hatten das Thema "password hashen" dort gemeinsam auseinander genommen.
    zu user_type enum: naja, mein weiß zB auf Anhieb was da erwartet werden kann.
    Später kannst Du dann noch einen TINYINT daraus machen.
    `user_type` wäre dann ein Fremdschlüssel auf eine Tabelle `user_types`.
    Diese enthält dann

    Code
    id   | type
    1    | admin
    2    | user
    3    | banned(?)
    ...


    Aber wie gesagt - will Dich damit nicht überrennen.

    zu id 17: dann hast Du sicherlich das create-Statement kopiert (copy create-statement oder so) und hattest schon 17 Zeilen drin :D

    zu Aufruf: nein
    Deine Funktion hat einen neuen Parameter bekommen: $user_type
    wenn Du 'user' reinschickst, dann "sucht die Query" ja WHERE user_type = ?
    Abfrage für admin:

    PHP
    if(isUserLoggedIn($mysqli, 'admin') === FALSE) {
        // ist NICHT admin
    }


    Abfrage für user:

    PHP
    if(isUserLoggedIn($mysqli, 'admin') === FALSE) {
        // ist NICHT user
    }

    Erneute Änderung:


    jetzt geht auch:
    Abfrage für login:

    PHP
    if(isUserLoggedIn($mysqli) === FALSE) {
        // user/admin ist NICHT eingeloggt
    }

    Da gibts sicherlich noch Sachen, de Du in paar Wochen/Monaten anders machen wirst =)
    Aber ich will Dich jetzt nicht mit Verbesserungsvorschlägen überennen.
    Nur kurze Hinweise:

    SQL
    ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;


    solltest Du ändern in AUTO_INCREMENT=1 anstatt AUTO_INCREMENT=17

    SQL
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


    Warum:
    AUTO_INCREMENT=17 gibt an, dass die fortlaufende id mit 17 beginnt.
    Der erste Eintrag hätte also die id 17, anstatt 1.

    Wo wir bei der id sind - da gibts keine.
    Du kannst sicherlich die user_id als fortlaufende id nutzen:

    SQL
    `user_id` int(10) NOT NULL AUTO_INCREMENT, -- NEU: AUTO_INCREMENT
    -- ...
      `user_ip` varchar(50) NOT NULL, -- NEU: das komma nicht vergessen
        PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    Du könntest auch den `user_type` auf enum setzen. Der wird ja sicherlich nur admin und user enthalten.

    Wichtig für die Sicherheit: Du speicherst Passwörter im Klartext (cleartext) in der db. Das ist ganz schlecht =)
    Wenn Du irgendwann Zeit und Lust hast, sie Dir das mal an: Loginpasswort richtig hashen - password_hash() & password_verify()

    Du kannst "last modified" aus dem Header lesen.
    Wie der Name schon andeutet ist dort das Datum "zuletzt geändert" hinterlegt.
    Das könnte aber Probleme geben, wenn Du die Datei änderst.
    Ein "erstellt am" Timestamp gibt es per JS glaub ich nicht.

    HTML
    <div id="date"></div>
        <script type="text/javascript">
            document.getElementById("date").innerHTML = new Date(document.lastModified);
        </script>

    Wie erstellst Du denn eine neue Datei? Aus einer ~Vorlage.html ?
    Du könntest mit einem Script diese Datei einlesen, den Timestamp rein schreiben und dann als ~neu.html schreiben.
    Bsp Batch File
    (wenn Du .bat Dateien ausführen kannst)

    So langsam klingelts :)
    Mit Deinem Bsp könnte ich aber die Objekte nicht dynamisch in der for-Schleife zuweisen.
    Wenn ich richtig verstanden hab

    Zitat

    ... outputs [1] because the append method modifies the object on which it is called.

    , dann müsste ich:

    JavaScript
    for(var k in this.Btns){
        this.Btns.k.0 = document.createElement("button");
        // ...
    }


    was ja aber nicht geht :D
    Stelle fest: mach wohl Sinn die Objekte im gesamten Script dann nur noch über das Array anzusprechen.


    Jetzt weiß ich wenigstens warum das nicht funktionierte
    danke =)

    EDIT:
    zu this.Elem[1] , this.Elem[2]
    Das würde funktionieren. Aber die Namen wären später zB
    BtnScroll
    und
    BtnPause

    Ich müsste die Namen also als Keys hinterlegen und dyn einsetzen,
    was mich wieder dazu bringt gleich das Array Btns zu nutzen :D

    EDIT²:
    Abschließend kann man wohl sagen:
    Es ist solange eine Referenz, solange man es modifiziert.

    Kann man in JS Referenzen bilden?
    Mein Problem:
    In var C erstelle ich im Bsp 2 vars (Elem1 und Elem2) und setze sie default auf null.
    Dann lasse ich eine Schleife laufen, die auf diese vars Objekte setzen soll.
    Dabei lege ich die vars in ein Array.

    Problem: im Array haben die vars ihr Element bekommen,
    in C sind sie allerdings noch null.


    Das sind 2 Sachen.
    Das eine die Exceptions, das Andere geht über den Errorhandler.

    Siehe: http://docs.php.net/manual/de/errorfunc.examples.php

    Kurz: Du erstellst eine Function, registrierst diese Function via set_error_handler("meineFunction") (http://docs.php.net/manual/de/function.set-error-handler.php)
    und in dieser Function prüfst Du, was da für ein Fehler aufgetreten ist.
    Wenn es ein E_RECOVERABLE_ERROR ist, kannst Du (grad nicht ganz sicher) den bool Wert true returnen, damit das Script weiterläuft.

    Kann man machen, muss man aber nicht.
    Sollte man aber schon mal gemacht haben :D

    EDIT:
    hier mal ein kurzes Bsp

    Zitat

    (Im Array [gg_ampname] => cc-twin_peaks).


    Da haben wir es doch - bl-founation ist also die Value (Wert) in einem Array.
    Dann guck Dir aber mal an, was Du gepostet (auch so genutzt?) hast:

    PHP
    If ($results['Toxikk CC']['gg_mapname'] == bl-foundation) // <- das hier sollte wohl "bl-foundation" heißen (string)
    {
    echo "Foundation",
    }


    Das eine
    bl-foundation // bl minus foundation
    das andere
    "bl-foundation" // ein String