Skip to content

Kungfu App about PHP, OOP, PDO, MVC and more kindly provided by Rene Esposito, adjusted by me :D

Notifications You must be signed in to change notification settings

Svendolin/Kungfu-App

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub commit activity GitHub contributors GitHub forks GitHub last commit GitHub code size in bytes

 Content: 💬😀👍


Folder: Content:
affenschwanz "Affenschwanz-Prinzip" mit ISSET / FILTER_VAR and SANITIZING
API (i) Searchbar mit TMDB (The Movie DB Datenbank) with API for direct database request
bootstrap_formulare Formular with Bootstrap
datum_Zeit Date Time
einfaches_cms Easy CMS without Database
einfaches_cms_db Not-so-easy CMS with Database
einstieg OOP (i) Classes / Superclasses / Method (class with function) / Extends / Constructors / functions / modificators
fit_fuer_MySQL MySQL exercise
formular_validierung Email / Regex Password / String length (filled fields)
formular-elemente How to write a form properly (labels, buttons, POST)
joins Innerjoin / Leftjoin / Joins for Tables / Primary- Foreign Key + Index / namespaces
login Procedural Login with password HASH and password VERIFY
OOP_uebungen (i) Dateiupload (Image) / Formular Validation without DB but with ERRORMESSAGES / Image Gallery
pagination_Seiteninhalt (i) Showing content splitted on various pages (1 of 7 etc)
PDO (i) Connect to database / Query a database / Using CRUD-Operations / Apply the MVC Model / Login with PDO / Login and registration with PDO
sessions Mistakes / redirect / write / destroy
weiterfuehrend_OOP (i) Continuing with Frameworks
zusMaterial Additional Material


 Licensing: ✅


  • Basic structure, basic comments and design belongs to Rene Esposito, Instructor of https://www.sae.edu/

  • Adjustments are made by me, Sven Kamm, for a better personal understanding and comfortable usage in the future



 Before to start: ✅


Useful steps:

  1. Make sure you installed XAMPP or MAMP to work with a localhost on an apache-server
  2. Copy this in your htdocs folder to work with your PHP-files
  3. Have you heared about MVC (Model View Controller)? here you go: https://www.youtube.com/watch?v=3OKOe7CraGY

Why OOP?

  • OOP uses seperate files with concerning tasks - Its better for group work and organized processes
  • Do more in less time: Develop together, changes of code can be made collectively
  • You can re-use the code (less code to compile)
  • Easier to build larger websites
  • Basic PHP (Procedural PHP) still has to be learned for the basic understanding

Why MVC?

  • it's a design pattern who takes care of database processes and CRUD-Operations

  • When you chose the way to write PHP-Code with OOP, you automatically start working to use MVC

  • Although connecting to MySQL-Database the procedural way is improved with i = MYSQLI, but for every other file you have to duplicate the code. MVC makes it much easer (1 to 3 are three different "people" or classes):

    0) We want to share our secrets and content: DB
    1) Model = Is the "CEO", which knows everything about the database stuff, connecting to database for example)
    2) View = "Sells stuff for custommers" and works as a communicator in between (gets data from the model and tries to sell it to the controller)
    3) Controller = "Custommer who wants to buy stuff" (where the users do their input and catch infos from the model)
    


 OOP with MVC: "Kurz und knackig" - "Short and Crisp" 🍪


[GER]

  • Alles wird in Objekte beschrieben
  • Jedes Objekt hat Eigenschaften
  • In den Eigentschaften speichern wir Daten in Form von Funktionalitäten (Methoden)
  • Prozesse zeigen wir mit Methoden auf. Ein Haus z.B mit verkaufen() / abreissen() etc. || Methoden werden immer so dargestellt: Beispiel()

[ENG]

  • Everything is described in OBJECTS
  • Each OBJECT has PROPERTIES
  • In properties we store data in the form of functionalities (METHODS)
  • We show processes with METHODS. A house, for example, with sell() / demolish() etc. || Methods are always represented like this: Example()


  !IMPORTANT: USEFUL TIPS: 🔥


I) Use DOTS (.) to interrupt a string:

$dsn = 'Blabla hello world' . $interruption . 'string goes on';

II) Use BACKSLASH ( \ ) before inverted commas ( " ) to interrupt the closing of a string ( \ " ):

$code .= "<p><a href=\"movie.php?id=".$out['id']."\">Zum Film</a></p>";
/*
1) <a href="" src="" nuten auch Anführungszeichen! Setze ein \ davor um den String nicht abzubrechen!
2) Wird ein String interrupted I) mit ". .", so setzen wir KEIN \ davor!
*/

III) Pro tip: Use ( ' ) and ( " ) to avoid taking care of Tip II) with ( \ ):

$code .= '<p><a href="movie.php?id=".$out['id']."">Zum Film</a></p>';

IV) < label > and < input > - Who is who?

<div>
   <label for="vorname">Vorname</label> // for="" des Labels zugehörig zur id="" des Inputs
   <input type="text" id="vorname" name="vorname" value="<?=$vornameValue?>"><br> // name="" wichtig für Affenschwanz Duchgang / value="" PHP Inhalte aus Datenbank anzeigen
</div>


 OOP and PDO: Important TERMS in this WEBAPP_KUNGFU: 📈


Term (word): Explenation:
"INSTANZIERUNG" -> $instanz => "Bauplan" (Wichtig: Nach -> NICHT Dollarzeichen verwenden, da Variable dadurch instanziert wird)
"AUSGABE" $ausgabe = Ausgabenvariable "Fernseher", um "Bauplan" durch Ausrufen der Instanz-> anzuzeigen
"new" Instance a class from .class File to Main-File to create a new object (A)
PROCEDURAL PHP Regular PHP with tons of code with NO SEPERATE FILES AND CONCERNING TASKS vs:
OOP PHP with MVC Object Oriented Programming which uses a design pattern called Model View Controller
MVC - Model View Controller In OOP, we divide the code into certain areas / files: 1)=> A model file (connecting to database) 2)=> A view file (to show what the user has done) and 3)=> A control area (where users do their input), and link them together.
PDO PHP Data Object, which helps to connect to database in OOP {{{ PDO > CRUD_beispiel / loginWithPDO }}} (Top)= PDO > MySQLi > MySQL =(flop)
QUERIES Databaserequests. Be sure to use prepared statements to guarantee the maximum amount of safety! To run a query: prepare() > bindParam() > execute()
ARRAY Data structure that stores one or more similar type of values in a single name
CLASS (I) A OOP-package of Methods and Properties
METHOD (II) + (visability) A OOP-function ...() in a class {} (I) - Each method has an unique relation to the class you nested it inside of it {}
PROPERTY (III) + Visability: "Eigenschaft in OOP": A variable "$" in a class {} to capture a value in this variable + you HAVE TO define the visability as public, protected or private...
"public" Visability-Accessmodifier: "The counter is open for all" TIP: At first, set everything to Public to make sure your project works.
"protected" Visability-Accessmodifier: "The counter is closed to the public, department among themselves can continue to operate". With "protected", the superclass can "lock the door", the subclasses "act as emergency keys"
"private" Visability-Accessmodifier: With "private", access can neither be guaranteed via main and class files, nor via class inheritance.
$this $this-Keyword is used to call Methods (II) and Properties (III) in a class (I) "Bauch der Instanzierung"
OBJECT (A) with "new" in main-processing-document Instance ("Instanzierung") of a class with an allocated memory ("Sammlung von Variablen") in the MAIN FILE (index file) => We can define it as a "BLUEPRINT"
MEMBERS The "called" Methods (II) and Properties (III) in an object (A)
CONSTRUCTOR function __construct() => Konstruktor-Methode-Infrastrukur ("Grundversorgung einer Methode"(II)) am Anfang einer Klasse (Destructor = Am Ende einer Klasse)
INHERITANCE with: "Vererbung" with Superclasses (HEREDITARY = VERERBEND) and Subclasses (INHERITED = ERBEND)
SUPERCLASS > SUBCLASS Subclasses are CHILDS, subordinated and inherited of their PARENTS, known as Superclasses
EXTENDS Keyword: "subclass of" => class HUND extends HAUSTIER = Therefore: "Hund ist eine Subklasse von Haustier"


1.1 METHODE (OHNE PROPERTIES) - EINE AUSGABE: --- (Click HERE to view in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */

// 0) METHODE definieren: Funktion "rechne()" in einer Klasse "QuadratZahl1"
// Ausgelagert in .class-Ordner require("class/QuadratZahl1.class.php");
class QuadratZahl1 {

	// +(Methode)+
	function rechne($anna) {
		$resultat = $anna * $anna;
		return $resultat; // return, kein echo notwendig
	}
}

/* ---- MAIN FILE (PROCESSING FILE) ---- */

// 0) Auf das ausgelagerte File zugreifen
require("class/QuadratZahl1.class.php");

// 1) Object-Instanzierung (Instanz erhält mit "new"-Anweisung die Spezielkraft, Klasse wird mit seinem Namen instanziert)
$instanz = new QuadratZahl1();

// 1.1) OPT: var_dump() zeigt den Inhalt dieser Klasse auf
var_dump($instanz);

// 2) Aufrufen in der Instanzvariable mit Parameter (hier 5) und als Ausgabevariable definieren für das spätere Echo
$ausgabe = $instanz -> rechne(5);

/* ---- MAIN FILE HTML ---- */

// 3) Als echo im HTML ausgeben
echo $ausgabe; // 25

1.2 METHODE (OHNE PROPERTIES) - MEHRERE OBJEKT-AUSGABEN: --- (Click HERE to view in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */
class QuadratZahl1 {

	// +(Methode)+
	function rechne($anna) {
		$resultat = $anna * $anna;
		return $resultat; // return, kein echo notwendig
	}
}

/* ---- MAIN FILE ---- */
require("class/QuadratZahl1.class.php");

// + (Object 1) +
$instanz1 = new QuadratZahl1();
$ausgabe1 = $instanz1 -> rechne(5);

// + (Object 2) +
$instanz2 = new QuadratZahl1();
$ausgabe2 = $instanz2 -> rechne(8);

// + (Object 3) +
$instanz3 = new QuadratZahl1();
$ausgabe3 = $instanz3 -> rechne(15);

/* MAIN FILE HTML */
echo "Erste Ausgabe: ".$ausgabe1."<br>";
echo "Zweite Ausgabe: ".$ausgabe2."<br>";
echo "Dritte Ausgabe: ".$ausgabe3;

1.3 METHODE - MIT PROPERTY (EIGENSCHAFT) und VALUE + public + $this + MEHREREN AUSGABEN: --- (Click HERE to view in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */
class QuadratZahl2 {
	
  // public-EIGENSCHAFT "PROPERTY" ist wie eine "VOREINSTELLUNG" in Variable $AntwortSatz. d.h:
  // Wir geben im Bauch des Antwortsatzes automatisch diesen String mit:

	// +(Property mit Value)+ (Dieser String wird der DEFAULT-WERT sein von dieser property) 
	public $AntwortSatz = "Das Resultat ist: "; 
	
	// +(Methode)+
	function rechne($anna) {
		/* $this (Zugreifen, was innerhalb der Klasse definiert wurde)
		- Mit $this wird auf die Eigenschaft zugegriffen, die in allen Methoden sichtbar sind 
			("Im Bauch der Methode suchen")
		- Mit $this macht man einen Verweis auf das eigene Objekt aus der VOREINSTELLUNG
		- Beachte, dass das $-Zeichen vor "AntwortSatz" fehlt!!!
		*/
		$resultat = $this->AntwortSatz.$anna * $anna;
		
		return $resultat;
	}
}

/* ---- MAIN FILE ---- */
require("class/QuadratZahl2class.php");

$instanz = new QuadratZahl2();
$ausgabe1 = $instanz -> rechne(5); // "rechne()" kümmert sich um "25", public gibt den String mit
$ausgabe2 = $instanz -> AntwortSatz; // Hier geben wir nur den String mit

/* ---- MAIN FILE HTML ---- */
echo $ausgabe1; // Das Resultat ist 25
echo $ausgabe2; // Das Resultat ist

1.4 METHODE - MIT PROPERTY (EIGENSCHAFT) OHNE VALUE (ft. D.Krossing) ---

/* ---- Beispiel ---- */
/* ---- .CLASS FILE AUSGELAGERT ---- */

// +(Class)+
class Person {
	// +(Properties ohne default Wert)+
	public $name;
	public $eyeColor;
	public $age;
	
	// +(Methods)+
	public function setName($name) {
		$this->name = $name;
	}
}

/* ---- MAIN FILE ---- */

require("class/...");
// +(Object)+

$instanz = new Person();
$ausgabe = $instanz -> setName("Sven"); 

/* ---- MAIN FILE HTML ---- */
echo $ausgabe; // Sven

2.1 KONSTRUKTOR-METHODE: --- (Click HERE to view in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */
class Konstruktiv {

	// +(Property)+ (Schlüsselwort Ausgabe)
	public $ausgabe;

	// +(Konstruktormethode)+ (Hier wird die GRUNDVERSORGUNG angegeben = WAS DAS OBJEKT ZUM ÜBERLEBEN BRAUCHT)
	function __construct() { // Immer mit 2x _ schreiben 
		$string = "Ich wurde geboren am ";
		$string .= date("d.m.y")." um ";
		$string .= date("H:i:s");
		// Hier wird mit echo gearbeitet, dies jedoch nur aus didaktischen Gründen (KEIN RETURN)!!!
		echo $string; // KEIN return sondern direkt das echo, wenn man __construct() verwendet
	}

}

/* ---- MAIN FILE ---- */
require("class/Konstruktiv.class.php");

$instanz = new Konstruktiv();

/* ---- MAIN FILE HTML ---- */
// "ausgabe" NICHT $ausgabe nach -> da instanziert
echo $instanz -> ausgabe; // Ich wurde geboren am (Timestamp Datum) um (Timestamp Zeit)

2.2 KONSTRUKTOR-METHODE MIT BRIEFKASTENVARIABLEN, WELCHE PARAMETER EMPFÄNGT: --- (Click HERE to view in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */
class KonstruktivPara {
	
	// Die Konstruktormethode empfängt Parameter (Briefkastenvariablen reinschreiben)

	// +(Constructor-Method)+
	function __construct($param1,$param2) {
		$str = "Guten Tag ";
		// Hier wird mit echo gearbeitet, dies jedoch nur aus didaktischen Gründen!!!
		echo $str.$param1." ".$param2;
	}
}

/* ---- MAIN FILE ---- */
require("class/KonstruktivPara.class.php");
// Die Konstruktormethode wird mit Parameter in Form von x2 Strings"" aufgerufen
// Instanzierung mit new und Klassenname() (In $instanz ist der ganze Bauplan):
$instanz = new KonstruktivPara("Peter","Muster");

2.3 KONSTRUKTOR-METHODE MIT MEHREREN AUSGABEN: --- (Click HERE to view in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */
class Kreisberechnung {

	// +(Properties)+
	public $flaeche = "";
	public $umfang = "";
	
	// +(Konstruktormethode)+
	function __construct($radius) {
		// Aufrufen der Hilfs-Methoden
		$this -> flaeche = $this -> calculateArea($radius);
		$this -> umfang = $this -> calculateCircumference($radius) ;
	}
	
	// Hilfs-Methode für das Berechnen der Kreisfläche
	public function calculateArea($r) {
		$fl = $r * $r * pi();
		$flGerundet = round($fl, 2);
		$flAntwort = "Die Kreisflaeche betraegt: ".$flGerundet;
		return $flAntwort;
	}
	
	// Hilfs-Methode für das Berechnen des Kreisumfangs
	public function calculateCircumference($r) {
		$um = 2 * $r * pi();
		$umGerundet = round($um, 2);
		$umAntwort = "Der Kreisumfang betraegt: ".$umGerundet;
		return $umAntwort;
	}
}

/* ---- MAIN FILE ---- */
require("class/Kreisberechnung.class.php");
$instanz = new Kreisberechnung(5);
// Lesen der Eigenschaften
$ausgabe1 = $instanz -> flaeche;
$ausgabe2 = $instanz -> umfang;

/* ---- MAIN FILE HTML ---- */
echo $ausgabe1;
echo "<br>";
echo $ausgabe2;

3.1 VERERBUNG (INHERITANCE) SUPER- SUBKLASSENBEZIEHUNG: --- (Click HERE to view in folder) ---

/* ---- ERSTES .CLASS FILE AUSGELAGERT (SUPERKLASSE) ---- */
//  * Superklasse *
class Haustier {
	// Es hat drin: + Porperties (Eigenschaften) für ALLE Haustiere
	public $geschlecht;
	public $name;
	public $art;
		
	// Es hat drin: + Methode für ALLE Haustiere
	function WasBinIch() {
		$string = "Über mich: Ich bin ein/e ";
		$string .= $this->art.", "; // $this = Referenz auf Objekt public $art
		$string .= "ich heisse ".$this->name;
		$string .= " und ich bin ".$this->geschlecht;
		return $string;
	}
}

/* ---- ZWEITES .CLASS FILE AUSGELAGERT (SUBKLASSE) ---- */
// Hier braucht's das Schlüsselwort "extends"
// Somit ist diese Klasse HUND offiziell eine Subklasse von HAUSTIER
class Hund extends Haustier {
		
	// Diese METHODE gibt's NUR HIER, in der Subklasse
	function bellen() {
		$meineWoerter = "Wuff, Wuff";
		return $meineWoerter;
	}
}

/* ---- MAIN FILE ---- */
require("class/Haustier.class.php");
require("class/Hund.class.php");

// Instanziiert wird hier NUR DIE SUBKLASSE! - "new Hund()" reicht
// Trotzdem stehen darauf die Mitglieder der Superklasse im Objekt zur Verfügung.
$instanz = new Hund();

// Eigenschaften schreiben, man beachte:
// diese gehören zur Instanz der Subklasse, obwohl sie in der Superklasse definiert wurden!!!
// Über die Instanz ansprechen:
$instanz -> geschlecht = "männlich";
$instanz -> name = "Waldi";
$instanz -> art = "Hund";

// 1) Methode der SUPERKLASSE aufrufen, man beachte:
// diese gehört zur Instanz der Subklasse, obwohl sie in der Superklasse definiert wurde!!!
$ausgabe1 = $instanz -> WasBinIch();

// 2) Methode der SUBKLASSE aufrufen:
$ausgabe2 = $instanz -> bellen();

/* ---- MAIN FILE HTML ---- */
echo $ausgabe1;
echo "<br>";
echo $ausgabe2;

3.2 VERERBUNG SICHTBARKEIT mit ACCESS MODIFIER PROTECTED an Methoden (WIRD AKZEPTIERT): --- (Click HERE to view _4 in folder) ---

  • ((Kurz => "Eltern schützen, Kind frei laufen lassen"))
/* ---- ERSTES .CLASS FILE AUSGELAGERT (PROTECTED-SUPERKLASSE) ---- */
//  * Superklasse *
class SchatzkisteProtected {

	protected function zeigeCodeFuerSchatz() { 
		$source = "<img src=\"bilder/treasurechest.png\">";
		return $source;
	}
}

/* ---- ZWEITES .CLASS FILE AUSGELAGERT (SUBKLASSE) ---- */
//  * Subklasse *
/* Hier definieren wir die Subklasse welche nicht geschützt ist ABER mit internem ZUGRIFF auf Superklasse */
class SchatzkisteKind extends SchatzkisteProtected {

	public function KindMethode() {
		// Aufruf einer Methode in der Superklasse, die mit protected definiert ist
		$raus = $this -> ZeigeCodeFuerSchatz();
		return $raus;
	}
}

/* ---- MAIN FILE ---- */

require("class/SchatzkisteProtected.class.php");
require("class/SchatzkisteKind.class.php");
$instanz = new SchatzkisteKind();
/* Zugriff auf eine öffentliche Methode der SUBKLASSE,
   die (intern) auf eine Methode der Superklasse zugreift,
   welche ihrerseits mit protected definiert ist:
	 Sprich: Superklasse verschliesst die Tür, die Subklasse ist unser Notschlüssel! */
$ausgabe = $instanz -> KindMethode();

/* ---- MAIN FILE HTML ---- */
echo $ausgabe;

3.3 VERERBUNG SICHTBARKEIT mit ACCESS MODIFIER PRIVATE an Methoden (WIRD ABGEBLOCKT): --- (Click HERE to view _5 in folder) ---

/* ---- ERSTES .CLASS FILE AUSGELAGERT (SUPERKLASSE) ---- */
//  * Superklasse *
class SchatzkistePrivate {

	/* Opt:
	- Ändere private zu protected, um die Subklasse zu schützen und den Error hier zu löschen! Somit kann die Subklasse 	           ihren part übernehmen
	- Ändere private zu public, so wird die Superklasse direkt ausgeführt und die Subklasse wäre eigentlich hinfällig
	*/
	private function zeigeCodeFuerSchatz() { 
		$source = "<img src=\"bilder/treasurechest.png\">";
		return $source;
	}
}

/* ---- ZWEITES .CLASS FILE AUSGELAGERT (SUBKLASSE) ---- */
//  * Subklasse *
// Hier braucht's ebenfalls das Schlüsselwort "extends"
/class SchatzkisteKind2 extends SchatzkistePrivate {

	public function KindMethode() {
		// Aufruf einer Methode in der Superklasse SchatzkistePrivate, die mit private definiert ist
		// Dies schlägt fehl
		$raus = $this -> ZeigeCodeFuerSchatz();
		return $raus;
	}
}

/* ---- MAIN FILE ---- */

require("class/SchatzkistePrivate.class.php"); // Auslagerung der Superklasse (set to private)
require("class/SchatzkisteKind2.class.php"); // Auslagerung der Subklasse (set to public)
$instanz = new SchatzkisteKind2();
// 1) Zugriff auf eine öffentliche Methode der Subklasse SchatzkisteKind2...
// 2) ...die (intern) auf eine Methode der Superklasse SchatzkistePrivate zugreift...
// 3) ...welche ihrerseits mit private definiert ist.
// 4) Das schlägt fehl! Der Notschlüssel
$ausgabe = $instanz -> KindMethode();

/* ---- MAIN FILE HTML ---- */
echo $ausgabe;

3.4 Wie kann man den ACCESS MODIFIER private korrekt anwenden? --- (Click HERE to view _6 in folder) ---

/* ---- .CLASS FILE AUSGELAGERT ---- */
class SchatzkistePrivatePlus {
	// Properties kann man mit Sichtbarkeit schalten, METHODEN enbenfalls!
	// Somit setzen wir die ertse Methode auf PRIVATE...
	private function zeigeCodeFuerSchatz() {
		$source = "<img src=\"bilder/treasurechest.png\">";
		return $source;
	}
	// ...und die zweite Methode auf PUBLIC:
	// Innerhalb der KLASSE kann auf die obige Methode zugegriffen werden, auch wenn diese mit private definiert ist:
	public function zweiteMethode() {
		$sourceVonOben = $this -> zeigeCodeFuerSchatz();
		return $sourceVonOben;
	
	}
}

/* ---- MAIN FILE ---- */

require("class/SchatzkistePrivatePlus.class.php");
$instanz = new SchatzkistePrivatePlus();
// Zugriff auf eine öffentliche Methode,
// die (intern) auf eine andere Methode der gleichen Klasse zugreift,
// welche ihrerseits mit private definiert ist
$ausgabe = $instanz -> zweiteMethode();

/* ---- MAIN FILE HTML ---- */
echo $ausgabe;

 PDO: Execute Queries = prepare - bind - execute 💡


1.1. Arbeiten mit CRUD Statements via PDO (Verbindung zur Datenbank) --- (Click HERE to view folder) ---

/* Localhost siehe: http://localhost/OOP/webapp_kungfu/PDO/CRUD_beispiel/create.php (Create ist hier der "index.php") */

// Welche Funktionen haben die Files?

* SimpleCRUD.class.php = Verwaltungsfile von Klassen und Methoden [prepare() > bindParam() > execute()] + PDO Datenbankzugriff
* credentials.php = Datenbankangaben
* create.php = Index.php File mit Inputfelder [CRUD = Create]
* read.php = Lesefile [CRUD = Read]
* read_erweitert.php = Tabelle mit [CRUD = Read, Update, Delete]
* update.php = Update mit ID, wenn User fon read_erweitert.php auf UDPATE klickt [CRUD = Update]

1.2. Beispiel eines simplen Logins (sign in) OHNE Registrierung (no sign up) --- (Click HERE to view folder) ---

/* Localhost siehe: http://localhost/OOP/webapp_kungfu/PDO/loginWithPDO/login_form.php (login_form ist hier der "index.php") */

// Welche Funktionen haben die Files?

* SimpleCRUD.class.php = Verwaltungsfile von Klassen und Methoden [prepare() > bindParam() > execute()] + PDO Datenbankzugriff
* credentials.php = Datenbankangaben
* login_form.php = Index.php File quasi, Login-Formular mit Inputfelder 
* login_tabelle.sql = Datenbankformular, wo 2 Nutzer bereits erstellt sind, siehe: test_user.txt
* success.php = Privater Bereich, falls Login erfolgreich

// Falls man PASSWÖRTER HASHEN möchte...

1) Im Browser anzeigen lassen:
echo password_hash("YourPasswordHere", PASSWORD_DEFAULT); 

2) Rauskommentieren und Username sowie Passwort aufschreiben
3) Passender Hash zum Passwort wird zur SQL-Liste hinzugefügt



About

Kungfu App about PHP, OOP, PDO, MVC and more kindly provided by Rene Esposito, adjusted by me :D

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published