ilch Forum » Allgemein » HTML, PHP, SQL,... » [PHP] Mein Anfang, Review durch Profis

Geschlossen
  1. #1
    User Pic
    MaddinXx Mitglied
    Registriert seit
    15.02.2007
    Beiträge
    787
    Beitragswertungen
    40 Beitragspunkte
    Guten Abend liebe ilch Commuity

    Nachdem ich HTML und CSS nun lange genug studiert habe, möchte ich endlich den Weg in Richtung Entwicklung einschlagen und habe mich deshalb für die nahe liegende Entscheidung entschieden, erst mal mit PHP zu beginnen.

    Glücklicherweise gibt es im Internet zahlreiche Tutorials etc., mit welchen ich heute doch für mich (ihr werdet lachen, aber ich bin zufrieden) einen grossen Schritt gemacht habe.

    Da diese Tutorials jedoch meist nur inspirieren (so soll es ja sein), ist es schwierig sich ein Bild davon zu machen, ob der geschriebene Code den nun Sinn macht.

    Deshalb hier eigentlich mein Anliegen
    Ich weiss, dass es hier eine grosse Menge talentierter PHPler gibt. Da aller Anfang schwer ist und sich vor allem aus Erklärungen/Erkenntnissen lernen lässt, würde ich es sehr begrüssen wenn ein Blick auf meine Codezeilen geworfen werden könnte.

    Grundsätzlich frage ich mich vor allem, ob ich das ganze richtig angehe und ob meine Vorgehensweisen Sinn machen. Es gibt sicher einiges, was ein Erfahrener Programmierer in dieser Form lächerlich findet, aber wie gesagt: Da kennt man noch nicht alles und vor allem gibt es viel zu lernen.

    Ich hoffe, mein Anliegen ist eingermassen klar und nicht doof. Auf jeden Fall würde ich mich ungemein freuen, wenn ihr mir bei meinem Lernprozess helfen würdet lächeln

    Da es einige Dateien sind macht ein ZIP Download Sinn, der Link dazu hier: cl.ly/0D0M1K010L3G3r1h3n2c

    Man soll zwar nichts auf die Palme treiben, aber wenn jemand sogar bereit wäre mit mir gemeinsam ein GIT Repo zu "betreuen", in welchen Hinweise im Code angebracht, Änderungen gepusht etc. werden, - das wäre ganz grosses Kino und würde viel bringen denke ich. Dann wäre direkt ersichtlich was gemacht wurde, warum und sowieso.

    Also liebe Leute, Ihr seht ich kann es kaum abwarten tiefer in die Materie zu gelangen. Ich bin woah - bin und weg davon!

    // Edit: Angaben zu den "Scripten" darf natürlich nicht fehlen

    1) Userliste
    - Einfaches Ein-/Austragen
    - Erkennung doppelter Einträge
    - Überprüfung der Eingabe (preg_match)

    2) Login
    - Einfaches Login
    - Cookie Rückkehrerkennung (nicht fertig)

    Bei beiden Scripts weiss ich, dass es in diesem Umfang keinen Sinn macht, eine eigene config.php und functions.php zu machen. Dennoch finde ich das wichtig, weil es bei grösseren Projekten nötig sein wird (auch hier, ist diese Überlegung überhaupt richtig?)

    Die Datenbanken die nötig sind, sind aus der config.php ersichtlich.

    An dieser Stelle bedanke ich mich,
    viele Grüsse
    MaddinXx


    Zuletzt modifiziert von MaddinXx am 14.03.2012 - 19:49:08
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Revolution Hall Of Fame
    Registriert seit
    14.08.2006
    Beiträge
    1.688
    Beitragswertungen
    109 Beitragspunkte
    Hey, den Schritt finde ich gut, diesen hab ich selbst hinter mir, dies ist allerdings nun ein paar Jahre her.

    Vorweg, aller Anfang ist schwer, und die die Lachen und meinen Sie können alles besser, haben auch einmal klein angefangen :-)

    Im großen und ganzen sehen deine Scripte gut aus, sicherlich kann man es optimieren. Vorweg deine Struktur gefällt mir aber das erwartet man ja von einem der sich sonst mit <div> tags beschäftigt :-)


    Das mit den externen classen und Funktionen find ich persönlich, super.
    Aber hier kannst du 10 Leute fragen und bekommst unterschiedliche Antworten.
    Bei kleinen Scripten sicher unnötig aber schaden tut es nicht.
    Ich für mich, nennne dateien (Funktionen oder Klassen) immer mit dem zusatz class_ oder func_.

    Wichtig ist halt beim Umgang mit Datenbanken immer das Überprüfen der Nutzereingaben. (Stichwort SQL Injection)
    Daraus ergeben sich auch viele NO GO´s z.B. das Einbinden (include ($_GET['file']); ) von Funktionen oder Klassen mittels $_GET, wobei das auch geht aber !immer! überprüft werden muss.



    Bei großen Projekten würde ich dir auch empfehlen Funktionen und Klassen direkt ordentlich zu Dokumentieren. So kannst du später einfach eine Doku erstellen.
    bsp.
     
          /**
           * tags demonstration
           * @author this tag is parsed, but this @version tag is ignored
           * @version 1.0 this version tag is parsed
           */


    Später, solltest du dann auch Code und Templates ordentlich trennen aber das ist alles zukunftsmusik.

    Auch musst du das Rad nicht immer neuerfinden, was später immer ein Blick Wert ist, sind Frameworks. (ähnlich dem 960.gs oder andern Grid Frameworks (CSS) ) nur für PHP mit Fertigen Klassen und Funktionen.


    Zuletzt modifiziert von Revolution am 14.03.2012 - 21:43:01
    Kreativ, modern, Conversion und Usability optimiert
    individuelles Webdesign für ein optimales Erscheinungsbild
    404studios
    1 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    MaddinXx Mitglied
    Registriert seit
    15.02.2007
    Beiträge
    787
    Beitragswertungen
    40 Beitragspunkte
    Hallo Revolution

    Vielen Dank, dass du dir die Zeit genommen hast den Beitrag zu lesen und eine Antwort zu schreiben. Das schätze ich sehr lächeln

    PHP Frameworks sind mir durchaus bekannt, ich habe mir hier vor allem mal CodeIgniter ins Auge gefasst, da eine grosse Anzahl CMS darauf basieren, unter anderem auch einige, die ich selbst im Einsatz habe/hatte.

    Hier stellt sich für mich die Frage: Ist es sinnvoll, gleich mit einem Framework zu beginnen oder nicht? Auch hier habe ich im WWW einige interessante Artikel gefunden. 50% davon sagen ja, 50% nein. Der Streitpunkt ist vor allem, soll man zwei Dinge parallel lernen (und jeweils schauen wie macht man es in beiden / was sind Vor-/nachteile), oder sich zuerst das Wissen aneignen, welches dann für ein Framework nötig sind.
    Was ist deine persönliche Meinung?

    Genau, Design und Code trennen ist wichtig. Ich denke, ich werde das bald mal beachten. Bei diesen zwei ersten Scripts war mir das allerdings Schnuppe, da ich einfach mal PHP testen wollte lächeln

    Was ich allerdings ganz interessant finde, ist das Thema Sicherheit (was du auch aufgreifst). Grundsätzlich ist es ja so (wenn ich das richtig sehe), dass vor allem GET abgesichert werden muss. Ich habe hier allerdings einige Mühe das zu verstehen, darum gleich mal ein Beispiel wo ich es so gut wie möglich probiert habe:

    # CHECK IF DELETION IS NEEDED
    if (isset($_GET['delete'])) {
    
    	# CREATE VAR FROM GET
    	$delete = $_GET['delete'];
    
    	# CHECK IF IT IS AN INT
    	if (preg_match('/^([0-9]+)$/', $delete)) {
    
    		# CREATE ARRAY OF VALID IDs
    		$tasks = array();
    		$arraysql = "SELECT * FROM tasks";
    		$arrayquery = $mysql->query($arraysql) or die ($mysql->eror());
    
    		# ADD IDs TO ARRAY
    		while ($ids = $arrayquery->fetch_object()) {
    			array_push($tasks, $ids->id);
    		}
    
    		# CHECK IF ID IS IN ARRAY
    		if (in_array($delete, $tasks)) {
    
    			$deletesql = "DELETE FROM tasks WHERE id = '".$delete."'";
    			$deletequery = $mysql->query($deletesql);
    
    			# CONGRATULATE
    			if ($deletequery) {
    				$notification = "The task has been deleted successfuly!";
    				$notificationtype = "success";
    			} else {
    				$notification = "An unknown error encountered!";
    				$notificationtype = "error";
    			}
    
    		} else {
    			$notification = "Their is no task with this ID!";
    			$notificationtype = "error";
    		}
    
    	} else {
    		$notification = "Permissions denied! You are not allowed to do that!";
    		$notificationtype = "error";
    	}
    
    }


    Das ist der Löschvorgang bei einem neuen Script. Zuerst überprüfe ich, ob der Wert eine Zahl ist. Danach erstelle ich ein Array aller korrekten IDs und prüfe, ob die ID darin vorkommt.
    Ist das ein richtiger Ansatz?

    Was mich daran stört ist, dass man in der URL die Zahl einfach manuell ändern kann und nicht gezwungen ist, über den Delete Button zu gehen. Wie löst man das?
    Eine Variante wäre ein POST Formular, aber ich kann mir nicht vorstellen, dass überall ein Formular drum sein muss, um das zu lösen.
    Hier wäre ich sehr dankbar, wenn ich einen Anstoss bekäme, wie man das richtig macht lächeln

    Ansonsten möchte ich mich nun bald SESSIONS und COOKIES zuwenden. Mal schauen was das bringt lächeln

    Also dann, ich danke dir und hoffe, auch auf die neuen Anliegen eine Antwort zu bekommen.

    Grüsse & ein schönes Wochenende
    MaddinXx
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Revolution Hall Of Fame
    Registriert seit
    14.08.2006
    Beiträge
    1.688
    Beitragswertungen
    109 Beitragspunkte
    hey, na super soviel geschrieben und nun ist alles weg.

    Also auf ein neues.
    Ich würde so früh wie nur möglich auf den Zug Frameworks springen.
    Aber es kommt halt drauf an was du machen möchtest, für kleine Scripte ist es zuviel, ebenso die Trennung von Code und Layout. Bei größeren Sachen ist es fast schon pflicht ein Framework zunutzen oder selbst eines zu erstellen.
    Um den Punkt PHP Grundlagen, wirst du auch so nicht drum rum kommen :-)


    Das Thema Sicherheit ist sehr komplex und grade zuanfang nicht ganz easy.
    Grade zu anfang ist es schwer an alle diese Varianten und möglichkeiten zudenken. Wichtig ist halt das du POSTs und GETs prüfst, dein Ansatz mit den Zahlen ist richtig. Verlass sich einfach nicht drauf, nur weil den Input z.B. Tel. Nr. heißt, das man da nicht auch mal Buchstaben und Sonderzeichen eingeben kann. Das gilt auch für geschützte Bereiche wie Backend.

    Da kommt aber noch ne menge mehr, Dateiupload ist z.B. einer.


    Übergabe der Variablen
    Du kannst natürlich GET benutzen, da spricht nichts gegen. Auch hier gibt es möglichkeiten es Sicher zu bekommen.

    Ich hab dazu für ein Projekt was auf Clientseite mit VisualBasic läuft und auf dem Server mit PHP ein Algorithmus geschrieben.
    Da ich keine DB Zugansdaten in dem Programmcode haben möchte!

    In diesem fall sieht der Link wie folgt aus:
    con.php?header=DE481423EDF74FC7E7FDFFC1BDAF01F8

    und die Rückgabe ist ebenfalls Verschlüsselt.

    Beim Thema GET, ließt man gerne bei google, was in Verbindung mit Base64, das ist aber keine wirkliche Sicherheit.


    Eine andere möglichkeit sind z.B. Session Variablen.

    EDIT:
    Du schreibst ja bereits selbst, dass dein Lösch-Script das Problem hat das ein User X einfach die ID ändern kann. Das ist in der Tat ein Problem.

    Hier kommt es aber meiner ansicht nach auf die Einsatz bedingung an, wenn es in einem Internen Bereich Backend ist, macht das nichts.

    Da du in der Funktion nocheinmal Prüfen kannst, ob der UserX das recht hat, z.B. über die Userrechte.





    Zuletzt modifiziert von Revolution am 17.03.2012 - 19:20:05
    Kreativ, modern, Conversion und Usability optimiert
    individuelles Webdesign für ein optimales Erscheinungsbild
    404studios
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten