PHP

Aus m-wiki
Zur Navigation springen Zur Suche springen

Buch: PHP Ein praktischer Einstieg

Kapitel HTML:

<ul> und <ol> für unsortierte oder sortierte Liste. Die einzelnen Einträge sind dann jeweils <li>

<textarea rows = "x" cols = "y" name = "z">
<select name = "x"><option value = "x" /></select> //Auswahlliste -> Rückgabewert unter name mit value.
<input type = "radio" name = "x" value = "y" />y
<input type = "radio" name = "x" value = "z" />z -> Unter x gibt es den value
<input type = "checkbox" name = "x" checked = "checked" />y -> name ist vorhanden (Wert "on"), wenn angeklickt, sonst nicht vorhanden in POST-Array
form -> Bei Dateianhang -> enctype = "multipart/form-data" -> Als Parameter angeben

PHP-Funktionen:

$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

Allgemein:


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:

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