Beiträge von cottton

    Was The Scout sagte plus: die Funktion "durchschnitt" muss den Wert zurückgeben (return $ergebnis)

    plus:

    Evtl hast Du da was beim Format verdattelt.

    PHP
    $result= durchschnitt('Heinrich', '01.01.2014', '01,08,2014');


    01.01.2014 und '01,08,2014 (punk und komma) wird so nicht funktionieren.

    Was hast Du beim Datum für ein Format verwendet?
    Ich tippe auf DATE. Dann ist das Format: JAHR-MONAT-TAG - also 2014-06-24 zB

    Das hier sollte funktionieren:

    PHP
    SELECT 
    	AVG(`Gehalt`) AS `durchschnitt`
    FROM 
    	`Lohnsteuer` 
    WHERE 
    	`name` = ". mysql_real_escape_string($name) ." 
    	AND `Zeit` >= ". mysql_real_escape_string($anfang) ." 
    	AND `Zeit` <= ". mysql_real_escape_string($ende) ." 
    ORDER BY `Zeit`


    Du kanst auch BETWEEN verwenden, wobei das Wort an sich mMn falsch gewählt ist. Denn BETWEEN wählt "inklusive" aus.
    Man könnte denken "... WHERE `zahl` BETWEEN '1' AND '5' " wählt alle Werte zwischen 1 und 5 aus.
    Allerdings (siehe doku)

    Zitat

    Wenn expr größer oder gleich min und expr kleiner oder gleich max ist, gibt BETWEEN 1 zurück, andernfalls 0.

    PHP
    SELECT 
    	AVG(`Gehalt`) AS `durchschnitt`
    FROM 
    	`Lohnsteuer` 
    WHERE 
    	`name` = ". mysql_real_escape_string($name) ." 
    	AND `Zeit` BETWEEN ". mysql_real_escape_string($anfang) ." AND ". mysql_real_escape_string($ende) ."
    ORDER BY `Zeit`

    Die 2te Frage ist mir zu allgemein.
    Zu 1.:
    sowas in etwa

    Du hast hier nen komischen Fall.
    Wenn Du per self:: ansprichst, muss auch der "Rest" der Klasse damit klar kommen.
    Bsp:


    Das self mach also keinen Sinn, da Du nichts anderes in der Klasse als static definiert hast.
    Ich empfehle auch immer die Typen/Sichtbarkeit zu definieren.

    Hier auch mal ein Bsp fürs Verhalten von static vars und nicht-static vars:


    Static vars sind also nicht immer ganz einfach nachzuvollziehen, wenn man nicht-static und static mischt.
    Man kann aber (glaub ich) sagen, dass alle erzeugten Instanzen einer Klasse auf den gleichen Inhalt zeigen.

    raff ich net.
    Ist ne Endlosschleife.
    Und O existiert ja auch net in der 2ten Klasse. Also kommt kein echo "World".
    $this->O ist ja nicht gesetzt. Also kann es auch keine Methode ->make_sth() haben.

    Btw:
    Du nutzt var. Das ist veraltet.
    Besser ist es

    PHP
    class A{
        public $x;
        protected $y;
        private $z;
    }


    zu nutzen.

    Für interessierte: Swift

    Sieht ganz interessant aus. Einige Sachen machen wirklich Sinn.
    Andere aber sind einfach albern (meine Meinung) wie zB

    Code
    # Functions are a first-class type. This means that a function can return another function as its value.
    func makeIncrementer() -> (Int -> Int) {
        func addOne(number: Int) -> Int {
            return 1 + number
        }
        return addOne
    }
    var increment = makeIncrementer()
    increment(7)


    Sieht scheiße und "noobig" aus.
    Was haben die nur gegen:

    Code
    var x = func funcName(){ ... }

    Aber da hat ja jeder andere Vorstellungen.

    EDIT: unintuitiv und in sich wiedersprechend:

    Code
    # den typ festlegen via : nach dem namen der var:
    let explicitDouble: Double = 70


    Aber:

    Code
    # Subclasses include their superclass name after their class name, separated by a colon.
    class Square: NamedShape {
     ...
    }


    Warum? was spricht gegen ein Schlüsselwort?
    -.-

    Nutze mal Firebug o.ä. um bei Javascript evtl Fehler zu sehen/finden.
    Denn das hier:

    JavaScript
    Zeit += ((msekunde <10) ? ":00" : ":")((msekunde >=10 <100) ? ":0" : ":") + msekunde;


    ist total "kaputt" =)

    Zitat

    Unhandled Error: 'msekunde <10) ? ":00" : ":"' is not a function

    Lösung:

    Kann ich nur empfehlen.
    Warum?
    GET/POST vars kommen immer als String rein. Bei typen starken Vergleichen (x === y) kann das ungewollte Ergebnisse bringen.
    Was macht das?
    2 functions:
    set_numeric_type() val rein, und wenn es numerisch ist, kommt ein int/bigint/... raus. (Achtung: 0010 zB wird zu 10 !)
    arrayWalkRecursiveCallUserFunc() array rekursiv durchlaufen und call_user_func() auf jeden Wert anwenden (je länger der Name einer Funktion, desto besser muss sie sein =)

    Bsp und functions:


    Wie bereits erwähnt: Achtung: 0010 zB wird zu 10 !

    Ich hätte das false weglassen können. Das gehört eigtl gar nicht zum Thema.
    Hier gehts um '' und 0.

    Also:

    EDIT:

    Zitat

    Wenn sowohl leer als auch false dann "bedingung wahr" sonst "bedingung nicht wahr"?


    Nö.
    Wenn NICHT leer und NICHT false, dann wahr, sonst nicht wahr.
    =)


    EDIT2:
    noch ein Bsp: user login
    Angenommen $_POST['password'] geht durch irgendeine Funktion, welche durch einen Fehler 0 (int) zurückgibt. (Es gibt sicherlich ein besseres Bsp)
    Dann wird ein "schwacher" vergleich mittels == ein Fatales Ergebnis bringen:


    PHP versucht beim Vergleich den String in eine Zahl umzuwandeln. Dabei kommt 0 (int) heraus, da der String nicht gewandelt werden kann.

    Für mich gilt ab jetzt (wenn ich hoffentlich daran denke): IMMER typen starke Vergleichsoperatoren nutzen.
    Das bring einige Arbeit mehr, weil zB GET/POST/SQL immer Strings liefern,
    aber in Sachen (Selbst-)Sicherheit bringt es viel.

    Btw: zum Thema GET/POST immer String: https://www.html-seminar.de/html-css-php-f…-int/#post32262

    gewünschtes Resultat: Ausführen, wenn $var nicht leer ist

    Warum bekommt man als Ergebnis "bedingung nicht wahr"?
    Weil != nicht auf den Typ prüft. Daher ist '' und 0 gleich leer.

    !== dagegen prüft auch den Typ. Und 0 ist nicht '' (int ist nicht str).

    Kann man schon mal drauf rein fallen =)

    Ja, da hab ich die " vergessen =)

    PS: wenn Du schreibst, dass Du einen Fehler in Zeile xy bekommst, wäre es auch gut den Fehler zu posten =)
    Dafür sind Fehlermeldungen ja da. Die sagen nicht nur "nö, hier gehts nicht weiter" =)
    Wenn man sich an die Meldungen "gewöhnt", die also versteht, dann findet man meistens auf Anhieb die Lösung.


    EDIT:
    ich finde noch wichtig zu erwähnen, dass Du nach

    PHP
    // Wieder zurrück zur alten Seite
        header("location: deinSeitenName.php");


    exit(0); nutzen solltest. Also:

    PHP
    // Wieder zurrück zur alten Seite
        header("location: deinSeitenName.php");
        exit(0);

    Denn die Funktion header() beendet das Script nicht.
    Heißt: nachfolgender Code würde ausgeführt werden.

    Bsp:

    exit() beendet das Script (exit eben =)
    Die 0 (null) bewirkt, dass das Script "erfolgreich" beendet wird.
    Siehe: http://www.php.net/manual/de/function.exit.php
    Evtl Destructoren(?) ect werden also noch ausgeführt. (braucht man, wenn man eher in Sachen OOP (Objektorientierter Programmierung) ).

    ... die erste <tr> wird nicht geschlossen - da fehlt ein slash.

    So. Ist umfangreicher als Du denkst.
    Erstmal den button mit nem <a></a> umschliessen und den link zum php script setzen.
    Du brauchst natürlich eine id der Nachricht.

    HTML
    <td>
     <a href="SCRIPTNAME.php?delete=<?php echo $fetch['id']; ?>"> 
      <center><button><img width="25" src="../images/button_cancel.png" alt="read_message" ></button></center>
     </a>
    </td>

    im php script musst Du nun prüfen:
    - ist der Benutzer (also der das Script aufruft) berechtigt das Script aufzurufen? (eingeloggt? rechte?)
    - ist der Benutzer dazu berechtigt die Nachricht zu sehen/lesen/löschen ... also soll er irgendwas mit der Nachricht machen dürfen?
    - kommt über $_GET "was rein"? Also hier im Bsp $_GET['delete']
    - ist der Wert in $_GET['delete'] valid? (also numerisch und nicht leer):

    PHP
    if(isset($_GET['delete'])and is_numeric($_GET['delete'])){ ... dann erst weiler ... }


    - sql Query zusamenstellen:

    PHP
    §query = "
    DELETE FROM `nachrichten`
    WHERE 
        empfaenger = ".mysql_real_escape_string($username)." -- "extra" sicher stellen, dass der benutzer stimmt
        AND id = ".mysql_real_escape_string($_GET['delete'])." 
    LIMIT 1 -- FALLS mal jemand eine SQL injection hinbekommen sollte, dann KANN man damit u.U. schlimmeres verhindern. Kann man aber auch umgehen. (Thema schweift zu sehr ab)
    "

    Wenn jetzt doch de id, also die Nachricht nicht existieren sollte, dann passiert "einfach nix".
    Ein UPDATE oder DELETE gibt keinen Fehler zurück, wenn kein passender Datensatz gefunden wurde.