Rolf B: Profillink richtig gemacht?

Beitrag lesen

Hallo Keta,

ich habe deinen PHP Code etwas eingerückt, um ihn lesbarer zu machen.

Auf Anhieb entdecke ich eine Menge Codefehler - aber vielleicht sind die ja auch beim Übertragen in den Post entstanden. So wie es da steht kann es selbst direkt nach Login nicht funktionieren.

  • Du weist $prfid zu, baust aber $id in den Link ein. $id ist undefiniert.
  • Du weist $_SESSION['uname'] zu, verwendest nachher aber $_SESSION['username']
  • Du verwendest SELECT *. Das tut man in Programmen nicht. Man gibt explizit jede Spalte an, die man haben will und schreibt nicht mehr hin, als man braucht. Allein schon der impliziten Dokumentation wegen. Es wird zwar oft und gerne falsch gemacht, das macht es aber nicht richtiger. SELECT * ist für interaktive Systeme wie phpmyadmin da.
  • Dein Code behandelt zwei Situationen: "Abgemeldet" und "Anmeldung submitted". Die dritte Situation ist "Weiter angemeldet" und das behandelst Du nicht. Du erkennst es daran, dass $_SESSION['username'] bereits gesetzt ist. Du KÖNNTEST auch noch prüfen, ob die Request-Methode (in $_SERVER['REQUEST_METHOD']) GET oder POST ist. Du solltest übrigens beim Login auch noch die userid in der Session speichern, dann brauchst Du nicht für jeden Aufruf in usertablex nachschauen, welche ID dieser User hat.
  • Dein Code behandelt eine Situation NICHT: Unbekannter Username eingegeben. In diesem Fall liefert execute dir FALSE, bzw. $row ist null. Hier musst Du aus der Verarbeitung aussteigen, es führt zu Fehlermeldungen und undefiniertem Verhalten, wenn Du einfach weitermachst.

Kein Fehler, aber aus meiner Sicht kein guter Stil:

  • Warum gibst Du den Logout-Link als echo aus? Eigentlich müssen nur $id und $_SESSION['username'] eingebaut werden, die kannst Du mit <?= ... ?> am gewünschten Ort einsetzen.
  • Du verwendest 1337speek in deinen Feld- und Variablennamen. Das ist uncool. Nenne sie richtig - es gibt tatsächlich Komponenten, die mit den Standardnamen besser funktionieren (z.B. Assistenzsysteme für Menschen mit Behinderung). Und wenn Du irgendwann mal deinen Code nach Zugriffen auf username durchsuchst, wirst Du Dich ärgern, uzern nicht gefunden zu haben.

Optimierungstipps:

  • Die Variable $submyt brauchst Du nicht, du kannst isset($_POST['subm1t']) abfragen. Hier merkt man übrigens klar den Nachteil von 1337 Variablen: Du musst Hirnschmalz investieren, um jederzeit im Kopf zu haben, wo in der Submit - subm1t - submyt Kette Du bist. Hirnschmalz ist beim Programmieren ein knappes Gut, spar ihn Dir für wichtige Dinge auf.
  • <div id='outer-main'> - wozu brauchst Du das? Es ist das einzige Element vom body. Kannst Du die CSS Eigenschaften von #outer-main nicht direkt auf body anwenden?
  • <div id='content'> könnte ein <main> Element sein
  • Das <hr> unter dem <h1>Herzlich Willkommen</h1> könnte möglicherweise durch padding und border-bottom am h1 Element ersetzt werden.
  • <div id='logonform'> könnte vermutlich weg. Die id kann ans form selbst wandern, und der <br> hinter dem </form> vermutlich durch eine padding oder margin Eigenschaft ersetzt werden.
  • Das gerade angesprochene <hr> und <br> sind "Schmuck-Markup". Man legt damit das Layout fest. So etwas gehört aber ins CSS.

Diese Tipps sind möglicherweise unpassend, weil Du Rahmenbedingungen hast, die hier nicht erkennbar sind und die deine Implementierung nötig machen. In dem Fall ignoriere sie einfach.

Rolf

--
sumpsi - posui - clusi