Beiträge von cottton

    Hab da was (für mich) unerklärliches.
    Bei uns gibts 2 Logins: Admin und Profile

    Problem:
    Wenn User sich mal mit Firefox im Profil angemeldet hat und dann auf Adminlogin geht, stehen da seine Logindaten drin.
    Andauernd versuchen die sich im Admin anzumelden, weil .. naja, die Daten ja schon mal drin stehen :D (könnte ja klappen :D)

    Zwei verschiedene urls, verschiedene Form, Textfelder usw.
    Was kann das sein?

    Oder übersehe ich da was?

    Eigentlich wurde das Projekt mal gestartet, um so schnell wie möglich so viel Info wie möglich zu bekommen, um dann wieder schnell weg zu sein (wieder ab ins Spiel =).
    :D

    Das mit den Zielen bei Google A. werd ich mir mal ansehen. Hab mich schon immer gefragt, wofür das sein soll.

    Btw - weiß jemand, ob man von google A. die Daten per API abfragen kann?

    Ich bekomm den JS Teil einfach nicht gebacken =)
    Bild soll angezeigt werden, wenn Maus over.

    Kurze Erklärung:
    Normal würde mal die src vom Bild einfach angeben. Dabei würden aber bei jedem pageload ~30 Bilder geladen werden.
    Daher hab ich die src leer gelassen und per mousover -> JS function src ändern/eintragen -> JS function Container sichtbar machen.
    Somit wird immer nur das Bild geladen, welches gerade gebraucht wird.

    Nun muss ich aber noch der function, welche den Container sichtbar macht, sagen wenn das Bild fertig ist mit laden.
    Die function hab ich schon gefunden:

    JavaScript
    var logo = document.getElementById('sologo');
        logo.onload = function () {
            /*ab jetzt ist Bild geladen*/	
        };


    Nur bekomme ich es nicht eingebaut.
    Der Ausschnitt mit dem entsprechenden Teil:


    hier meine functions:

    JavaScript
    function changeSrcById(element, src){
                var id = document.getElementById(element);
                id.src = src;
            }
            function toggleById(element){
               var id = document.getElementById(element);
               (id.style.display == 'none')
               ? id.style.display = ''
               : id.style.display = 'none';
            }

    Ohne "Bild.onload ..." funktioniert es schon. Hatte es einfach mit einem setTimeout() versucht zu lösen. Ist aber nichts richtiges.

    Wollte nun die function changeSrcById() so ändern, dass sie ein true ausgibt, wenn das Bild fertig geladen ist:

    JavaScript
    function changeSrcById(element, src){
                var id = document.getElementById(element);
                id.src = src;
                id.onload = function () {
                    return true;
                };
            }


    Nur der Teil das true im HTML aufzugreifen, den bekomm ich nicht hin.

    Mein Versuch es einzubauen sieht in etwas so aus:

    HTML
    ...
                        <img
                            onmouseover="
                                if(changeSrcById('wpn_img_6', 'Images/BF3/weapons/mp443_silenced.png') === true){
                                    setTimeout('toggleById(\'wpn_div_6\'); ', 200)
                                }
                            "
                            onmouseout=" ...


    Funktioniert aber nicht, da die if-Bedingung ja nicht wartet =(
    ich schätze da muss ein Eventlistener ran, womit ich mich aber garnicht auskenne.
    Jemand ne Idee?

    Da man im Netz die verschiedensten Sachen liest, möchte ich es mal genauer wissen.
    Wieviele unique sind denn nun "gut" ?
    Uns gehts nicht um Geld. Uns wurde jetzt nur eben von einem Game Server Provider ein Server for free angeboten, und im Gegenzug platzieren wir ein Banner von ihm.
    Generell kein Thema. Keiner von uns macht sich da wirklich Gedanken, wieviel man da "rausholen" kann. Der Typ is cool, was er macht is cool, Banner rauf und alles easy =)
    Aber irgentwann muss man sich ja mit dem Thema beschäftigen.

    Google Analytics sagt mir:
    3,128 people visited this site
    Visits: 12,684
    Unique Visitors: 3,128 (176-305 a Day)
    Pageviews: 304,209
    Pages / Visit: 23.98
    Avg. Visit Duration: 00:12:12
    Bounce Rate: 20.68%
    % New Visits: 21.41%

    Hab ja gelesen, dass man es so nicht einfach an Zahlen ausmachen kann. Aber irgentwas muss man ja grob über den Daumen peilen können =)

    3. $_SESSION['fehlversuche']++;
    In der Session mitzählen lassen. Oder im Cookie. Aber ich denke Session ist einfacher, wenn Du Dich jetzt nicht noch um Cookies kümmern möchtest.

    Zur Zeitbegrenzung - schwierig. Also eigentlich nicht. Aber ich weiss ja jetzt nicht in wie weit Du mit PHP bist.
    Was mir auf Anhieb einfällt:
    - per javascript die Eingabefelder für eine bestimmte Zeit deaktivieren (kann man ja aber umgehen)
    - die Zeit in einer Session merken -> wenn Eingabe falsch dann $_SESSION['zeit_wenn_loginversuch_wieder_möglich'] = time()+180;

    Natürlich setzt Du dann eigene, kürzere namen :D
    Im script fragest Du dann ab:


    Weiss allerdings nicht, wo eine Zeitbegrenzung was bringt.

    Warum bekommen denn alle den gleichen Login?
    Für den Fall Du willst mehrere Nutzer abgleichen (name,PW) nimm einfach ein Array:

    Die IP vom user bekommst Du über: $IP = getenv("REMOTE_ADDR");

    Ich tippe mal auf "Wiedererkenungswert".
    __FILE__ gibt die das aktuelle script, __LINE__ die aktuelle Zeile usw.

    Muss man denn private vars in OoP mit Unterstrich schreiben? (private _variable = 0;)
    Hab gelesen, dass es in PHP4 genutzt wurde um private vars zu erkennen, da es noch keine Möglichkeit gab private oder public vars zu setzen.
    Ist es ne Art ungeschriebenes Gesetz, dass man es immernoch so schreibt?

    Du schreibst da gerade kein script für nen Webserver =)
    Sieht aus, als ob Du schon in anderen Richtungen was gemacht hast.

    1. Solange das PHP script nicht bis "unten" durch gerannt ist, passiert auf dem Bildschirm nix. (stimmt so nicht ganz anber muss erst mal reichen)
    2. Beim nächsten Seitenaufruf (user gab falsches PW) sind Deine Variablen (zB $i) weg. Du brauchst etwas anderes, was Dir die Werte Speichert -> zB $_SESSION['anzahl_versuche'] = ...
    3. Das while funktioniert nicht wie du denkst. Wie bei 1. beschrieben -> das script rennt alles durch und gibt dann erst die Webseite (Inhalt) aus.
    4. Vergiss sleep für dieses Vorhaben. sleep lässt dein script "schlafen". Also auch wieder keine Ausgabe auf dem Bildschrim solange das script nicht abgearbeitet wurde.

    Hier gehts um $_SESSION: http://www.php-kurs.com/session-anwenden.htm

    Und hier ein Bsp für ein einfaches LoginScrit: http://www.php-kurs.com/loesung-einlogg-script.htm

    =)

    Hab mir mal die Aufgabe vorgenommen: http://www.php-kurs.com/objektorientie…ng-beispiel.htm

    Zitat

    Erstellen Sie die Klasse "student" ...


    Das Ergebis sollte doch wohl so aussehen, oder?

    Meine erste Frage zu: http://www.php-kurs.com/objektorientie…-destruktor.htm

    Zitat


    Konstruktor / Destruktor


    Der Konstruktor ist der obere Teil, in dem die vars definiert werden, richtig?

    PHP
    var $Geschlecht;
        var $AlterinJahren = 1;
        var $Hauptfach_alt;
        var $Hauptfach_aktuell = 'deutsch';


    Und was ist der Destruktor?
    Aus der Beschreibung werd ich nicht schlau :huh:

    Ich dachte mir, da ich sowieso gerade den Testblock hier hab, kann ich ihn auch gleich hier posten.
    Hab mir Gedanken gemacht, wie ich P.S. für mich am sinnvollsten nutze. Und falls jemand Ideen hat - her damit =)

    Ich glaube ich fange alle Fehler ab.
    Nur wenn man mehr vordefiniert als man "reinschickt" gibts komischerweise keine e-message, sondern nur den e-code.
    (bsp "...WHERE nickname = :nickname and test = :test" wobei "test" später nicht reingeschickt wird. Ergibt dann nur e-code: 'HY093')

    Habs.
    Im case kann man keine || usw nutzen.
    siehe:
    http://www.php.net/manual/de/control-structures.switch.php

    Es funktionert aber mit der switch(true) Methode.

    Das einzige, was ich sehe ist, dass das break im default unnötig ist.
    Vlt kommt daher der Fehler?
    Hab allerdings noch keine Erfahrung mit switch.

    EDIT:
    @ramon1611

    Die cases beim switch sind verdattelt.
    Hab gestern noch was gelesen, dass man vorsichtig sein muss.
    Was genau da falsch läuft, weiss ich momentan nicht. Aber guck dir mal das bsp an:


    Es geht NICHT in den 2ten case. Die Bedingung funktioniert also nicht.

    Wenn du aber nach true switchst:


    So funktioniert es.
    Ich persönlich würde einfach if/elseif nutzen :)

    Nicht meine class. Prepared statements: http://www.php.net/manual/de/pdo.prepared-statements.php

    Ich hab vor paar wochen nen Wink bekommen, dass es "sowas" gibt.
    Und als ich gelesen hab, dass mysql_query und co depreciated und wohl bald (in neueren php versionen) entfernt werden soll, wollte ich gleich auf pre-s. wechseln.

    Vorher hab ich auch alles in $sql geschickt nach dem prinzip

    PHP
    if(isset($soundso)){
     $sql .= ", soundso = ".mysql_real_escape_string($soundso);
    }


    Also konnte man schön die Kette erstellen und abschicken.
    Mit pre-s. ist die Kette aber schon defniert.
    Klar könnte ich es auch erst, wenn ich weiß was ich wirklich brauche, die sql query "preparen". Aber ich glaub das wiederspricht dem Sinn des Ganzen.

    Der Fehler an sich ist kein Problem. (ausser, dass er keine meldung zum Abfangen schmeißt=)
    Hab es jetzt mit 2 varianten gelöst.
    Ein p-statement für den kompletten Datensatz, und einen für den Mindestdatensatz.

    Die Frage ist ja - interessiert es die db überhaupt, ob ich ihr Traffic/Arbeit erspare, in dem ich die Arbeit auf das nötigste reduziere?
    (ich denke dabei auch an die HDDs: Weniger Daten an die db = weniger schreiben auf der HDD ? ?( )

    Fehler:
    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
    Bsp:
    $stmt->prepare("UPDATE table SET name = :name, nachname = :nachname WHERE column = :id");
    Jetzt schicke ich nur :name rein um bekomme die Fehlermeldung:
    if($stmt->execute(array('name' => 'cottton))){
    ...
    }

    Es erwartet 2 parameter: :name und :nachname


    Was meinst Du mit Standard festlegen?

    Bin gerade am grübeln, wie ich Daten sinnvoll und traffic-sparend speichere.
    Vorgang ist:
    - neuer Datensatz (Spieler)
    - in db mögliche Daten sind x,y,z
    - beim aktuellen Spieler wurden keine Daten für "z" festgestellt, somit wäre diese NULL

    Wenn ich jetzt prepared Statements nutze, kann ich ja keine SQL-Kette bilden, wie ich es gewohnt war.
    Somit erwartet das stmt x,y,z.
    Mein Gedanke war nun, wenn es kein z gibt, brauch ich kein NULL an die db schicken.
    In wirklichkeit ginge es hier um mehrere (~6, dabei auch größere) Datensätze.

    Das stmt ist also vordefiniert und erwartet x,y,z. Wenn ich kein z übergebe, schmeisst es mir Fehler um die Ohren.
    Also wäre wohl die einzige Möglichkeit 2 Varianten des stmts zu definieren.
    Welches davon genutzt wird, lässt sich relativ einfach dynamisch setzen.

    Frage ist nun. Juckt es die db denn überhaupt, ob ich immer alle Daten an sie schicke,
    oder sollte man doch nur das reinschicken (insert/update), was gerade nötig ist?

    ok.
    Hab gleich mal gesucht und festgestellt, dass es ja gar kein var = int o.ä. gibt.
    heisst ja, dass ich es als string nur auf die Art definieren kann:

    var = '';

    Hmm. Für die mysql_real_escape_string() ist es mir mittlerweile Wusrt, da ich ja eh auf prepared statements "umsteige",
    aber man brauch das Thema sicher öfter.

    Also sollte man am Anfang eines jeden Scripts jetzt festlegen, wie man die var nutzt?
    zB:
    $name = '';
    $zaehler = 0;
    $vieles = array();

    *fragezeichen*

    Gerade festgestellt, dass bei:

    PHP
    $a = 007.5;
        var_dump (mysql_real_escape_string($a));


    das rauskommt:

    Zitat


    string(3) "7.5"


    ?(

    Zitat

    ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a.


    Da steht doch aber versieht \x00 und nicht 00

    Ist es ein Bug oder ist da ein Hintergrund, den ich nicht kene?

    EDIT:

    PHP
    $a = '0007.5';
        var_dump (mysql_real_escape_string($a));


    ergibt string(6) "0007.5"
    Also liegt der Fehler bei mir, weil ich es als int übergebe?

    Klang so.
    BTW - ich hatte glaub ich im ersten post geschrieben, dass die query zeit mit prepared statements 1 sec länger dauert.
    Hatte dabei aber nicht bedacht, dass ich im gesamten script auch über die gängige methode die verbindung zum SQL server aufgebaut hatte,
    Also 2 mal verbinden á ~1 sec = eine sec mehr.

    Mit prepared statements only muss ich feststellen, dass alles deutlich schneller läuft.
    Ist sicher wieder abhängig vom vorhaben, aber selbst wenn es nicht merkbar schneller wird, so macht es die arbeit im script sehr viel einfacher.

    Bin jetzt kein pro, aber selbst ich konnte 1 und 1 zusammen zäheln und habe alle SQL querys so eingerichtet, das ich sie immer wieder an andere stelle "prepared" verwenden kann.

    Ach ja - was ich noch nicht getestet ab ist, ob ein
    foreach(){#sql query ausführen}
    oder ein while einen unterschied macht.
    Sicher ist ein foreach "noob" (hatte wir schon mal drüber geredet), aber ich schätze es macht bei der geschwindigkeit keinen unterschied mehr.


    EDIT: die diagramme zeigen glaub ich ganz gut den unterschied: http://www.phphatesme.com/blog/mysql/per…verbindungen-2/

    Dann mach dir doch noch mal intensiv Gedanken darüber was es bedeutet wenn Daten "gecached" werden.


    Hab ich und es hat keinen Einfluss auf die Sicherheit für unsere Zwecke.

    http://php.net/manual/de/features.persistent-connections.php

    Zitat


    Eine wichtige Zusammenfassung. Persistente Verbindungen wurden entwickelt, um eins-zu-eins Abbildungen auf reguläre Verbindungen zu haben. Das heißt, dass man immer in der Lage sein sollte, die persistenten Verbindungen durch nicht-persistente zu ersetzten, ohne dass dies den Skriptablauf verändert. Es kann (und wird vermutlich auch) die Effizienz des Skriptes beeinflussen, aber nicht dessen Verhalten.

    Siehe auch "Warnung"