Beiträge von The Scout

    Also große Computerspiele wie die der führenden Konsolen, gehen ohne Sprungmarken definitiv nicht. ;)


    Das stimmt unbesehen. ABER deren Sprungmarken sind wiederum FUNKTIONEN, keine goto!!!

    Goto ist ineffizienter als Schleifen und zeugt von einem schlampigen Programmierstil. Details wurden von meinen Vorpostern ausführlich genannt, und du wirst in sämtlichen einschlägigen Programmierforen (außer Java :P) keine zweistellige Anzahl an Leuten finden, die goto verwenden und gut finden. Aus guten, bereits genannten Gründen.

    Aber wie schon gesagt, jeder hat einen eigenen Programmierstil, nur 90% halten den goto Stil für schlampig und faul ;)

    Also quasi Sticky Footer nach Bedarf? Hmm, müsste ich rumprobieren...

    Aber blöde Frage nebenbei: Wieso machst du für den reset aller Werte, da ja ALLER Werte, nicht einfach

    CSS
    * {
        margin: 0;
        padding: 0;
    }

    ???

    Oder wirklich die Ajax Variante, Grundaufbau ist auch ohne jQuery leicht:

    Diese Variante funktioniert jetzt nur für den Counter, zeigt aber schön die Schritte bei Ajax auf. Für weitere Lektüre kann ich dir Webbausteine.de; Suchanfrage an eine Datenbank über AJAX senden und empfangen empfehlen. Zeigt sehr schön, wie man sich via Ajax zum PHP File und im PHP File zu einer MySQL DB verbindet, also für beides was dabei.

    Und @Sassenburger: bitte, bitte, bitte, gewöhne dir als Allererstes und sofort die Verwendung von goto ab! *auf Knien bettel* Wenn es etwas gibt, was in PHP absolut nie hätte hinzugefügt werden sollen, dann goto!

    Frag zur Not, wenn es beim Code ändern Probleme gibt, aber ändere ihn. BITTE!

    Jap, kann mich Basi nur anschließen, für so eine Datenspeicherung ist SQL einfach erfunden worden und damit ideal.
    Und MySQL ist für den Einstieg am Besten, da am weitesten verbreitet, dicht gefolgt von SQLite (da FlatFile und wenig Aufwand)

    Also, erstmal via Basiiis Link einlesen, rumprobieren und dann wieder hier mit Fragen um dich werfen :D Dafür ist das Forum ja da.

    Manches kann ich ja nachvollziehen, ich finde zumindest manchmal diese inkonsistente Funktionsbenennung oder Parameteraufteiung auch seltsam. Aber die Seite treibt das Ganze ja schon jenseits der Haarspalterei :D

    Und zeige mir bitte eine Programmiersprache, die vollkommen bugfrei ist, das gibt es einfach nicht. Außerdem, wer sich einmal Java angeschaut hat, für den ist PHP schon ein Paradies xP

    Und Hack klingt ja schon recht interessant, allerdings ist da dann das Problem, dass 99% der Packages (Frameworks, CMS, ...) im Umlauf noch normales PHP verwenden und bestimmt auch einige deprecated Funktionen beinhalten. Da ist Hack dann schon nicht mehr kompatibel :/

    Also bestimmt nützlich, wenn man lernen will, oder für sich das Rad neu erfinden, aber ansonsten müsste man sämtliche großen Pakete erstmal mühevoll ummodeln und ich glaube, das kostet Privatprogrammierer zu viel Zeit und Nerven :S

    Google Analytics gehört zu einem der beliebtesten Analyse Tools von Webmastern. Zurecht? Zurecht. Es ist schnell (da asynchron), es ist stark (da flexibel) und es ist gratis (bis auf die Daten des Webmasters).
    Allerdings muss man in Deutschland immer noch ein paar Auflagen beachten. Hier nun die Dinge, die ich in Verbindung mit dem Google Analytics.js rausgefunden habe:

    • Der Code
      • Der Code, wie er von Google kommt, kann optimiert und weiter komprimiert werden
      • Der Code kann sowohl direkt vor </head>, als auch direkt vor </body>, aber auch gesplittet eingefügt werden.
      • Der Code MUSS die IP Adressen auf Seiten in Deutschland anonymisieren
      • Der Code SOLLTE die Daten gezwungen immer mit SSL übertragen, auch auf nur-http Seiten
    • Die Datenschutzerklärung
      • Die Datenschutzerklärung MUSS einen Hinweis beinhalten, dass Google Analytics verwendet wird
      • Zudem MUSS eine Möglichkeit geboten werden, das Tracking nutzerseitig zu unterbinden (auch in der Erklärung möglich)


    Was kann man jetzt machen? Nun, dieser Ablauf hat sich als best practice erwiesen:

    • Zuerst MUSS man folgenden Code in eine ausgelagerte JS-Datei schreiben, für das Anti-Tracking Cookie (bereits komprimiert)
      JavaScript
      // UA-XXXX-Y durch die Analytics ID ersetzen, wird dann auch im Analytics genutzt (deswegen global)
      var e='UA-XXXX-Y',d='ga-disable-'+e;
      if(document.cookie.indexOf(d+'=true')>-1){window[d]=1;}function gaOptout(){document.cookie=d+'=true;expires=Thu, 31 Dec 2099 23:59:59 UTC;path=/';window[d]=1;}
    • Danach folgenden Code einfügen, bereits komprimiert, anonymisierend (MUSS) und verschlüsselnd (SOLL)
      JavaScript
      // Um das verschlüsseln rauszunehmen, muss das Snippet ga('set','forceSSL',1); entfernt werden, kurz vor Ende der Zeile
      (function(G,o,O,g,l){G.GoogleAnalyticsObject=O;G[O]||(G[O]=function(){(G[O].q=G[O].q||[]).push(arguments)});G[O].l=+new Date;g=o.createElement('script'),l=o.scripts[0];g.src='//www.google-analytics.com/analytics.js';l.parentNode.insertBefore(g,l)}(this,document,'ga'));ga('create',e);ga('set','forceSSL',1);ga('set','anonymizeIp',1);
    • Die aus den zwei Schnipseln entstandene JS-Datei direkt vor </head> ASYNCHRON (per <script async="async" src="..."></script> einbinden
    • Folgenden Teil immer am Ende jeder Seite, direkt vor </body> einbinden:
      JavaScript
      <script>ga('send','pageview');</script>
    • In die Datenschutzerklärung folgenden Abschnitt eininden, er enthält bereits einen Link zum Cookie setzen und zum Addon für den Tracking Schutz (hier direkt zu sehen)
      Zitat

      Google Analytics

      Dieses Angebot benutzt Google Analytics, einen Webanalysedienst der Google Inc. („Google“). Google Analytics verwendet sog. „Cookies“, Textdateien, die auf Computer der Nutzer gespeichert werden und die eine Analyse der Benutzung der Website durch sie ermöglichen. Die durch den Cookie erzeugten Informationen über Benutzung dieser Website durch die Nutzer werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert.

      Im Falle der Aktivierung der IP-Anonymisierung auf dieser Webseite, wird die IP-Adresse der Nutzer von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt. Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. Die IP-Anonymisierung ist auf dieser Website aktiv. Im Auftrag des Betreibers dieser Website wird Google diese Informationen benutzen, um die Nutzung der Website durch die Nutzer auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen.

      Die im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt. Die Nutzer können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; Dieses Angebot weist die Nutzer jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Die Nutzer können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: <a href="http://tools.google.com/dlpage/gaoptout?hl=de" target="_blank">http://tools.google.com/dlpage/gaoptout?hl=de</a>.

      Alternativ zum Browser-Add-On oder innerhalb von Browsern auf mobilen Geräten, <a id="GAOptOut" title="Google Analytics Opt-Out-Cookie setzen" href="javascript:gaOptout()">klicken Sie bitte diesen Link</a>, um die Erfassung durch Google Analytics innerhalb dieser Website zukünftig zu verhindern. Dabei wird ein Opt-Out-Cookie auf Ihrem Gerät abgelegt. Löschen Sie Ihre Cookies, müssen Sie diesen Link erneut klicken.


    Kleiner Tipp von mir: eine ausführliche Datenschutzerklärung, welche viele Bereiche abdecken kann, kann man sich unter http://datenschutz-generator.de/ kostenlos erstellen lassen. Enthält auch oben genannten Bereich, der muss also nicht extra eingefügt werden.

    Und wie immer gilt: Wer Fehler findet (gut möglich, vor allem im komprimiertem Code, bitte gegenprüfen) oder eine Alternative weiß, bitte melden :D

    Ist denn das get in function gbgetComments nicht auch ein neues Wort und müsste folglich groß geschrieben werden? :whistling:


    ;) Denn gb stellt hierbei die Funktionsgruppe "Gästebuch" dar. Das heißt, "gb" als Präfix, danach der eigentliche Funktionsname nach Standardregeln...

    Du könntest dadurch nämlcih weitermachen, zB so:

    Und so weiter...

    Und dieses bitte auch teilen, wär praktisch, das zu haben ;)
    Man könnte ja auch gucken, ob man irgendwie diese Adsense Daten mit dem JS abgreifen könnte, dann könnte man es sogar davon abhängig machen -> wenn 50% mehr Klicks als Durchschnitt, dann keine Werbung mehr für den Tag...
    Also max. 150% (kann ja auch 175%, 200%, whatever) der Durchschnittsklickmenge pro Tag möglich, Wachstum ist möglich, aber nicht zu viel ^^

    Ja ich glaube, das ist genau deswegen: Bei if und Co Lücke zwischen Keyword und runder Klammer, sowie geschweifte in gleicher Zeile; bei Funktion runde Klammer direkt am Namen und geschweifte Klammer in neuer Zeile -> gute Unterscheidbarkeit. Aber ich mache es eigl. auch immer wie in deinem ersten Bsp :D

    cottton: Danke, ich hab das mal übernommen. Steht zwar so direkt nicht in der Doc. allerdings wird es durch die begrenzte Zeilenlänge impliziert, deswegen habe ich es mit reingenommen und so weit standardisiert, wie möglich ^^

    Roland: Danke, das mit den Klassennamen habe ich wirklich vergessen, zu erwähnen.
    Und selten BRAUCHT man wirklich das ===, allerdings, schaut man sich die Benchmarkseite an, sieht man, es bringt einen geringfügigen Geschwindigkeitsvorteil. Aber ist auch möglich, das zu vernachlässigen, ich habs trotzdem reingenommen.
    elseif wird übrigens in der kompletten PHP und Standardisierungs Doc immer zusammen geschrieben ^^, da hat sich PHP ein wenig vom Rest distanziert. Aber für Leute, die von C oder C++ kommen, es macht keinen Unterschied ;)

    Heyho,
    ich weiß, dass wird für viele ein alter Hut sein, aber ich denke, für Neulinge ist das ein interessantes Thema.
    Deshalb hier mal einige gute Seiten, zu den Themen, mit dem Wichtigsten rausgepickt. Vielleicht ist auch was für die Weisen unter euch noch was dabei.

    Eins vorweg: OOP bedeutet hier immer ObjektOrientierte Programmierung. Ich bin nur zu faul, das auch auszuschreiben

    Coding Standards
    Die Seite: Pear PHP Coding Standards. Allerdings etwas veraltet, deshalb hier die wichtigsten und universalen Punkte zusammen gefasst:

    • Kontrollstrukturen

      • Ein Leerzeichen vor der öffnenden und nach der schließenden Klammer
      • Immer die geschweiften Klammern verwenden, auch wenn optional
      • Wenn die Bedingungen zu lang werden (>80 Zeichen in der Zeile) kann vor den Vergleichsoperatoren umgebrochen werden, diese werden dann eingerückt (siehe Bsp., danke cotton)
      • Wenn man sich nicht sicher ist, ob == als Vergleich reicht (die PHP Dok. hilft), immer === verwenden

    • Funktionen

      • Funktionsnamen sind beschreibend, erster Buchstabe klein (Präfix zählt nicht), jedes "neue" Wort groß
      • Vor die Beschreibung sollte der Paketname gesetzt werden (klein) um Kollisionen mit anderen Funktionsnamen zu vermeiden
      • Bei der Definition soll der Original K&R Einrückungsstil verwendet werden (siehe Bsp.; ich persönlich bevorzuge aber ein einfaches Leerzeichen vor der öffnenden geschweiften Klammer)
      • Bei Aufrufen kein Leerzeichen nach Funktionsnamen, der öffnenden Runden Klammer und dem letzten Parameter
      • Leerzeichen nach Kommas zur Parametertrennung und der schließenden runden Klammer

    • Kommentare

      • Es sollte der C-Stil (// und /* */) anstatt dem Perl-Stil (#) verwendet werden
      • Blockkommentare werden eingerückt
      • Erste Zeile ist ein /**, bei den weiteren Zeilen ist ein Stern direkt unter dem ersten Stern der ersten Kommentarzeile zu setzen, mit einem Leerzeichen danach
      • Letzte Zeile ist der schließende */ Tag, mit der beschriebenen Instanz in der nächsten Zeile, ohne Leerzeile
      • Genaue Definitionen von Blockkommentaren in der oben verlinkten Dokumentation

    • OOP

      • Klassennamen beginnen mit Großbuchstaben, sowie Großbuchstaben bei jedem weiteren neuen Wort
      • Unterstriche werden nur verwendet, um die Klassenhierarchie auch in den Namen wiederzuspiegeln
      • Bei OOP werden private Funktionen (nicht protected) mit Unterstrich am Anfang deklariert
      • Die öffnende geschweifte Klammer soll in einer eigenen Zeile stehen
      • Es werden keine Klassen mit include/require oder _once eingebunden, stattdessen __autoload() oder eine personalisierte Version verwenden

    • Sonstiges

      • Konstanten werden immer komplett GROSS geschrieben, außer true, false, null, diese IMMER klein!
      • Einrücken mit 4 Leerzeichen, keine Tabulatoren
      • Zeilenlänge von um die 80 Zeichen (75-85 wird angegeben)
      • Eingebunden wird immer mit den _once Funktionen, welche kommt auf die Wichtigkeit des einzubindenden Codes an
      • Beispiel URLs sind example.com, .net oder .org
      • Es sollte für PHP Blöcke IMMER <?php ?> verwendet werden, nie Kurzformen
      • Zeilen sollten nur als LF erstellt werden, keine Mac CR oder Windows CRLF
      • Es wird in der Doc empfohlen, ASCII mit ISO-8859-1 zu verwenden, aber ANSI mit UTF-8 ohne BOM geht heute eigentlich auch und erlaubt auch mehr Zeichen in evtl. HTML Bereichen.

    Best Practices
    Hier habe ich eigentlich nicht wirklich viel zu sagen, im Grunde gibts nur zwei Links, ich hoffe, sie helfen trotzdem

    • Für die Entscheidung bei gewissen Codesnippets hilft diese Seite: The PHP Benchmark
    • Bei großen Projekten kann auch die Ungarische Notation von Variablen helfen (Apps Hungarian): Apps Hungarian
    • Zudem empfiehlt es sich, sich für wirklich große Sachen mit OOP vertraut zu machen, kann einem bei Benutzerverwaltung/Gästebucheintragen/allem mit mehreren Instanzen viel Arbeit abnehmen


    Ich hoffe, ich kann einigen hier den Weg zu sauberem Code von Anfang an weiter helfen, und auch den erfahrenen Jungs noch ein paar Tricks näher bringen (ich habe zB nicht gewusst, dass es SO große Unterschiede bei Schleifen geben kann).
    Wenn irgendetwas bei jemandem direkt Augenkrebs auslöst, bitte melden, genauso, wenn man noch weitere Tipps hat!

    Und wenn man nun stolz seinen suaberen Code im Forum präsentieren möchte (oder auch, wenn Fehler drin sind :D ), nutzt bitte gleich die Buttons über der Beitrags textarea!!! Die haben, Titel, welche angezeigt werden, wenn man mit der Maus drüberfährt, bitte nutzt die BB-Codes zur Codeformatierung!!!

    lauras: Vielleicht wäre es möglich, den Thread anzupinnen, ist, glaube ich, ein Thema, welches längerfristig wichtig ist, oder?

    Das ist jetzt nicht ganz das Gewünschte, ich habe das jetzt einfach aus einem meiner Projekte rauskopiert. Dies ist für eine dynamische Seite, welche URLs nach dem Schema http://beispiel.de/kontakt/ auf die Seite http://beispiel.de/index.php?seite=kontakt weiterleitet. Nun brauchst du noch eine index.php im Wurzelverzeichnis, welche dynamisch den Inhalt reinlädt.

    Der PHP Code fürs Nachladen sähe dann ungefähr so aus (nicht genau so, das ist zu unsicher! Erst die Seitenvariabe validieren!):

    PHP
    <body>
      <?php
        include($_GET["seite"]);
      ?>
    </body>

    Das funktioniert auf jeden Fall, für statische Seiten müsste ich selber versuchen das zu erstellen, das könnte länger dauern...