PHP: Unterschied zwischen den Versionen

Aus m-wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 25: Zeile 25:


== PHP-Funktionen ==
== PHP-Funktionen ==
Für Regex siehe [[Suche mit regulären Ausdrücken (regex)]]
  $datum = getdate() -> Array -> $jahr = $datum["year"]; -> usw.
  $datum = getdate() -> Array -> $jahr = $datum["year"]; -> usw.
  $x = preg_match("x", $test) -> true, wenn das Suchmuster x in $test gefunden wird
  $x = preg_match("x", $test) -> true, wenn das Suchmuster x in $test gefunden wird
Zeile 51: Zeile 52:
  magic_quotes_gpc -> Alle Ausgaben mit Backslash versehen aus Sicherheitgründen -> wenn on, für Ausgaben vom Benutzer stripshlashes() verwenden.   
  magic_quotes_gpc -> Alle Ausgaben mit Backslash versehen aus Sicherheitgründen -> wenn on, für Ausgaben vom Benutzer stripshlashes() verwenden.   
  $x = stripshlashes($x) -> $x hat jetzt keine Backslashes mehr drin.
  $x = stripshlashes($x) -> $x hat jetzt keine Backslashes mehr drin.
   
 
== Befehle ==
== Befehle ==
  switch ($x) { // Die Werte dürfen auch Wertbereiche sein (case 4-7). Default ist nicht obligatorisch. O-hne break gehts zum nächsten bis zum default.
  switch ($x) { // Die Werte dürfen auch Wertbereiche sein (case 4-7). Default ist nicht obligatorisch. O-hne break gehts zum nächsten bis zum default.

Version vom 26. Juli 2020, 23:23 Uhr

Einführung

Buch: PHP Ein praktischer Einstieg

Kapitel HTML

Wichtige Befehle für HTML

Befehl Beispiel Auswirkung Bemerkung
<ul></ul> Unsortierte Liste:<ul><li>Eintrag 1</li><li>Eintrag 2</li></ul> Unsortierte Liste:
  • Eintrag 1
  • Eintrag 2
Liste mit Aufzählungszeichen
<ol></ol> Sortierte Liste:<ol><li>Eintrag 1</li><li>Eintrag 2</li></ol> Sortierte Liste:
  1. Eintrag 1
  2. Eintrag 2
Liste mit Nummerierung
<textarea></textarea> Ein Eingabefenster: <textarea rows = "2" cols = "3" name = "Test">Bitte Text eingeben</textarea> Ein Eingabefenster: <textarea rows = "2" cols = "3" name = "Test">Bitte Text eingeben</textarea> Wird im Wiki nicht dargestelllt ;-)
<select></select> <select name = "x"><option value = "x" /><option value = "y" /></select> <select name = "Farben"><option value = "Grün" /><option value = "Rot" /></select> Auswahlliste -> Rückgabewert unter name mit value.
<input type = "radio"/> <input type = "radio" name = "x" value = "y" /> <input type = "radio" name = "Auswahl" value = "Ja" /><input type = "radio" name = "Auswahl" value = "Nein" /> Der Name fasst die Optionen zusammen. Es kann nur ein Wert gewählt werden, der dann zurückgegeben wird.
<input type = "checkbox" /> <input type = "checkbox" name = "x" checked = "checked" /> <input type = "checkbox" name = "Wahl[]" checked = "checked" /> Es kommt ein Array zurück. Wenn keine Option angewählt ist, dann erscheint der Wert nicht in der Rückgabeliste.
<form></form> <form enctype = "multipart/form-data"></form> - -

PHP-Funktionen

Für Regex siehe Suche mit regulären Ausdrücken (regex)

$datum = getdate() -> Array -> $jahr = $datum["year"]; -> usw.
$x = preg_match("x", $test) -> true, wenn das Suchmuster x in $test gefunden wird
  - Am Anfang und am Schluss steht ein beliebiges (identisches) Begrenzerzeichen. Meist / oder #
  - ^ am Anfang -> Das Suchmuster muss von Beginn weg übereinstimmen und darf nicht erst später auftauchen (Hallo wird gesucht -> haHallo ist dann falsch)
  - \ -> Das nächste Zeichen verliert seine Sonderbedeutung und wird als normales Zeichen behandelt
  - \d -> beliebige Ziffer,
  - * -> Das vorherige Zeichen darf beliebig oft hintereinander auftauchen (auch 0 Mal) (x* wird gesucht -> () ist korrekt und (xxxxxx) auch)
    ? -> Es darf 0 oder 1 Mal auftauchen,
    + -> 1 oder mehrmals
  - [] Das Zeichen muss aus dem Vorrat aus der Klammer stammen. Mengen wie [a-zA-Z] für alle Buchstaben usw. sind möglich.
  - () Die nachfolgende Anweisung gilt für den gesamten Klammerausdruck
  - {x} Das vorherige Zeichen muss x Mal nacheinander vorkommen
  - $ am Schluss -> Das letzte Zeichen muss auch das letzte Zeichen im String sein (Hallo wird gesucht -> Hallo1 ist falsch)
  - Bsp.: /^\d*[05]$/ -> Am Anfang beliebig viele Zahlen (\d), dann eine 0 oder 5, welche am Stringende sein müssen. (1110, 5, 0 -> ok und 111, 7, 0051 -> nak)
          /^(\d{4}[\s\-]?){4}$/ -> Zuerst 4 Ziffern, dann max. ein Trennzeichen (Leerschlag oder -) (z.B. 1234-)
                                   und da dieser Suchausdruck in Klammern ist gefolgt von {4} muss dies 4 Mal hintereinander vorkommen.
                                   Z.B.: Kreditkarte (1234-1234-1234-1234) -> Achtung -> 1234-1234-1234-1234- wäre hier auch möglich.
          /^(\d{2})0[2-9]$/ -> Zuerst 2 beliebige Ziffern, dann eine 0 und zuletzt eine Zahl von 2-9.
          /^\d+$/ -> Enthält nur Ziffern
          /^[^\W\d_]([^\W\d_]|[\-\'\s\.])*$/ -> Beginnt mit Buchstaben und hat anschliessend nur Buchstaben oder Bindestriche, Leerzeichen und Apostrophe
  - Unterausdrücke auswerten: mit einem zusätzlichen Parameter kann man noch einen Rückgabewert abfragen. Jede Klammer gibt nämlich deb Wert in ihr
    in diesen zusätzlichen Parameter, so dass man später noch weiter einschränken kann. Etwa beim Bp. mit den 2 Ziffern, kann man dann mit
    $match[1] abfragen, ob die 2 Ziffern im gewünschten Bereich sind.
$x = uniqueid("") -> Eindeutige ID aus der Systemzeit und Ziffern. Kann etwa für Dateinamen auf dem Server verwendet werden oder als Salt.
magic_quotes_gpc -> Alle Ausgaben mit Backslash versehen aus Sicherheitgründen -> wenn on, für Ausgaben vom Benutzer stripshlashes() verwenden.  
$x = stripshlashes($x) -> $x hat jetzt keine Backslashes mehr drin.

Befehle

switch ($x) { // Die Werte dürfen auch Wertbereiche sein (case 4-7). Default ist nicht obligatorisch. O-hne break gehts zum nächsten bis zum default.
  case "y":   // Nach dem case darf auch direkt das break ohne Befehl kommen, wenn gewünscht.
    ...
    break;
  case "z":
    ...
    break;
  default:
    ...
}
exit(); Beendet die Ausführung des Scripts

Codebeispiele

Datei prüfen und hochladen: Seite 78
Dateien per include einbinden und nur per Script ausführen -> Siehe Anhang A für Apache
  -> Wenn POST leer, dann html einbinden mit Formular und exit();, sonst Code zur Auswertung. So kann man das Ganze etwas verschlanken.
  -> if (basename($_SERVER["SCRIPT_FILENAME"]) == "gewünschtes script.php") {exit(); } // oder auch mehrere. Wenn diese Zeile am Anfang steht, bricht das File ab, wenn es nicht von diesem Script aufgerufen wird.

Objektorientierung

Objektdaten = Eigenschaften, Werte oder Properties (Objekteigenschaft)
Objektmethoden = Funktionen

- Klassen werden vor der Verwendung erstellt und mit include eingebunden.

- Da in den Funktionen der Klasse nur lokale oder per Parameter übergebene Variablen bekannt sind,
  müssen auch klasseninterne Variablen mit $this->variable angesprochen werden.

Klasse -> Objekt:
class Rechteck {
  var Länge;
  var Breite;
  
  function Fläche () {
    return $this->Länge * $this->Breite;
  } // end function Fläche
} // end class Rechteck

$testRechteck = new Rechteck;
$testRechteck->Länge = 5;
$testRechteck->Breite = 4;
echo $testRechteck->Fläche(); // ergibt 20

Vererbung:
class Quader extends Rechteck {
  var Höhe;
  
  function Volumen () {
    return $this->Höhe*Fläche();
  } // end function Volumen
} // end class Quader

Alle Funktionen und Werte werden vererbt und stehen zur Verfügung

$testQuader = new Quader;
$testQuader->Länge = 7;
$testQuader->Breite = 3;
$testQuader->Höhe = 5;
echo $testQuader->Volumen(); // ergibt 105

Konstruktor:
Funktion, welche beim Erstellen aufgerufen wird. Kann aber auch ganz normal aufgerufen werden.
Name entspricht Klasse. Wird nach der Variablendefinition definiert, damit man diese Variablen
auch gleich initialisieren kann.
Will man in einer vererbten Klasse auch noch den Konstruktor der Oberklasse aufrufen, so geht dies
mit $this->Oberkonstruktor(). Wird nicht aut. gemacht, da meist nicht nötig.

class test {
  var $miau;
  
  function test() {
    $this->miau = true;
  } // end function test
} // end class test

Will man gleich Werte von ausserhalb übernehmen und testen im Konstruktor...
  var $x_ok;
  var $y_ok;
  
  function test ($x = "", $y = "") {
    $this->testVar($x);
    $this->testVar($y);
  } // end function test
  
  function testVar($testvariable) {
    if ($testvariable == "muh") { $this->x_ok = $testvariable }
  } // end function testVar
  
  Falls die Methode mehrere unterschiedliche Variablen prüft, muss man halt mit einem Rückgabewert arbeiten und nicht direkt setzen.
  
  $x_ok = $this->testVar($x);
      
  function testVar($testvariable) {
    if ($testvariable == "muh") {
      return $testvariable
    }
    else {
      return "";
    }
  } // end function testVar
  
  Mit Werten wird das Objekt folgendermassen erzeugt:
  
  $objekt = new Objekt("muh", "miau");
  $objekt2 = new Objekt("muh"); // Da die Parameter mit = "" drin sind, wird der zusätzliche Wert standardmässig gesetzt.
  
  

Objekte kopieren / referenzieren

Beim zuweisen an ein neues Objekt $new = $old werden sämtliche Werte kopiert.
Will man eine Referenz, so wird mit & zugewiesen: $new = &$old -> beide verweisen auf das gleiche Objekt.

Links

Webseite Beschreibung
webhostlist.de Liste von Providern mit php
phpmag.de Zeitschrift für php
php-ev.de php-verein mit Nachrichten und Tipps
dclp-faq.de die deutsche php faq.
phpclasses.org frei verfügbare php Klassen
php-center.de Professionell, doch gute Tutorials
php-homepage.de viele vorgefertigte Scripts und Artikel zu php
phpwelt.de Scripts und Tutorials
selfphp.info Gute Doku
php-archiv.de Scripts mit Infos