PHP
Inhaltsverzeichnis
Grundlagen
Variablen
Variablen beginnen mit dem Dollarzeichen $
Referenzen
$ersteVariable = 1; $zweiteVariable = &$ersteVariable; $zweiteVariable = 2; echo $ersteVariable; ==> Ausgabe: 2
Konstanten
define("Konstante", "Wert");
Beispiele:
define("GRUSS", "Hallo");
define("ZAHL", 20);
oder
constKonstante = "Wert";
const GRUSS = "Hallo"; const ZAHL = 20;
Es ist eine Konvention, Konstanten mit Großbuchstaben zu schreiben.
Innerhalb von Anführungszeichen werden Konstanten, anders als Variable, nicht interpoliert.
Definition mit true:
define("ZAHL", 20, true);
Hier wird nicht zwischen Groß- und Kleinschreibung unterscheiden, es würde als auch echo zahl; ausgewertet.
Vordefinierte Konstanten:
M_PI= 3.1415926535898
Magische Konstanten
Beispiel:
__LINE__: Angabe der Zeilennummer
Datentypen
Datentypen können sich in einem Skript ändern:
$a = "Hallo"; $a = 9;
Die Ausgabe der Datentypen erfolgt mit var_dump
var_dump($a);
Umwandlung von Datentypen:
$string = "44"; $zahl = (int) $string;
Operatoren
PHP verwendet die in der C-Familie üblichen Operatoren. Seit Version 5.6 wird auch der Operator ** für die Potenzierung verwendet:
$i = 4; $j = 2; echo $i ** $j; ==> Ausgabe 16
Alte Schreibweise: echo pow($i, $j);
Zeichenketten-Operatoren:
$a = "Hallo "; $b = $a . "Welt!"; // $b enthält jetzt den Text "Hallo Welt!"
echo $wochentag . ', den ' . $datum; *
Kurzschreibweise mit Operator .=:
$kleidung = "Hose"; $kleidung .= " und Pullover";
Operatoren-Reihenfolge:
Arrays durchsuchen
for
<?php
// On crée notre array $prenoms
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');
// Puis on fait une boucle pour tout afficher :
for ($numero = 0; $numero < 5; $numero++)
{
echo $prenoms[$numero] . '<br />'; // affichera $prenoms[0], $prenoms[1] etc.
}
?>
foreach
Es gibt zwei Schreibweisen:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
Die erste Form durchläuft das in array_expression angegebene Array. Bei jedem Durchlauf wird der Wert des aktuellen Elementes der Variable $value zugewiesen und der interne Array-Zeiger um eins erhöht (womit im nächsten Durchlauf das nächste Element betrachtet wird). Beispiel:
<?php
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');
foreach($prenoms as $element)
{
echo $element . '<br />'; // affichera $prenoms[0], $prenoms[1] etc.
}
?>
Die zweite Form schreibt zusätzlich den Schlüssel des aktuellen Elementes in jedem Durchlauf in die Variable $key. [1]
Beispiel:
<?php
$letters = array( 'A' , 'B' , 'C' ) ;
$numbers = array( 1 , 2 , 3 ) ;
$matrix = array( 'Letter' => $letters , 'Number' => $numbers ) ;
echo "<p>Start : {$matrix['Letter'][0]} </p>" ;
foreach( $matrix as $array => $list )
{
echo '<ul>' ;
foreach( $list as $key => $value ) { echo "<li>$array [ $key ] = $value " ; }
echo '</ul>' ;
}
?>[2]
print_r
print_r wird für das Debugging verwendet.
Für eine übersichtliche Ausgabe ist das Tag pre erforderlich:
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis',
'ville' => 'Marseille');
echo '<pre>';
print_r($coordonnees);
echo '</pre>';
?>
array_key_exists
Erst wird der zu suchende Schlüssel angegeben, dann das Array, in dem gesucht wird:
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis',
'ville' => 'Marseille');
if (array_key_exists('nom', $coordonnees))
{
echo 'La clé "nom" se trouve dans les coordonnées !';
}
if (array_key_exists('pays', $coordonnees))
{
echo 'La clé "pays" se trouve dans les coordonnées !';
}
?>
in_array
Prüfen, ob ein Wert im Array vorkommt:
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise', 'Framboise');
if (in_array('Myrtille', $fruits))
{
echo 'La valeur "Myrtille" se trouve dans les fruits !';
}
if (in_array('Cerise', $fruits))
{
echo 'La valeur "Cerise" se trouve dans les fruits !';
}
?>
array_search
Den Schlüssel für einen bestimmten Wert ermitteln:
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise', 'Framboise');
$position = array_search('Fraise', $fruits);
echo '"Fraise" se trouve en position ' . $position . '<br />';
$position = array_search('Banane', $fruits);
echo '"Banane" se trouve en position ' . $position;
?>
array_rand
Ermittelt eine zufällige Indexnummer aus dem Array:
$zufallszahl = array_rand($arrayname);
Funktionen
strlen: Länge einer Zeichenkette
str_replace: ersetzt eine Zeichenkette durch eine andere. $ma_variable = str_replace('b', 'p', 'bim bam boum');
strtolower: wandelt alle Buchstaben in Kleinschreibung um.
strtoupper: wandelt alle Buchstaben in Großschreibung um.
Zeit
Zeitzonen legt man folgerndermaßen fest:
date_default_timezone_set('Europe/Berlin');
getdate
date_default_timezone_set('Europe/Berlin');
$d = getdate();
echo $d['hours'].":".$d['minutes'];
echo '</p>';
date
Aktuelles Datum und Uhrzeit ausgeben:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Meine Website</title>
</head>
<body>
<h1>Meine Website</h1>
<p>Heute ist der <?php echo date('d/m/Y h:i:s'); ?>.</p>
</body>
</html>
date("Y") gibt die aktuelle Jahreszahl aus.
Funktionen erstellen
Beispiel:
<?php
// Ci-dessous, la fonction qui calcule le volume du cône
function VolumeCone($rayon, $hauteur)
{
$volume = $rayon * $rayon * 3.14 * $hauteur * (1/3); // calcul du volume
return $volume; // indique la valeur à renvoyer, ici le volume
}
$volume = VolumeCone(3, 1);
echo 'Le volume d\'un cône de rayon 3 et de hauteur 1 est de ' . $volume;
?>
Datenbank
MySQL
mysqli
$mysqli = new mysqli('localhost', 'root', '');
if (!$mysqli)
{
die("Konnte die Datenbank nicht öffnen.
Fehlermeldung: ". mysql_error());
}
echo "Erfolgreich zur Datenbank verbunden!<br>";
PDO
phpMyAdmin
Installation
Troubleshooting: mcrypt
Bei der Aktivierung phpenmod mcrypt kommt die Fehlermeldung WARNING: Module mcrypt ini file doesn't exist under /etc/php/7.0/mods-available.
Es muss folgendes Paket nachinstalliert werden:
php7.0-mcrypt
Troubleshooting: apache2.conf
Beim Aufruf im Browser kommt die Fehlermeldung " You don't have permission to access /phpmyadmin on this server."
==> In /etc/apache2/apache2.conf muss folgender Eintrag stehen:
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
Formulare
Beispiel
1. HTML-Datei "mwst.html" mit Formularstruktur:
<!doctype html>
<html>
<head>
<meta charset = "utf-8">
<title>Mehrwertsteuer</title>
<style type="text/css">
body {font-family: Arial;}
fieldset {
width: 300px;
border: 3px solid black;
}
legend {font-weight: bold;}
</style>
</head>
<body>
<form method="post" action="mwst.php">
<fieldset>
<legend>Bitte geben Sie den Brutto-Wert ein</legend>
<input type="text" name="brutto">
<input type="submit" value="Berechnen">
</fieldset>
</form>
</body>
</html>
2. PHP-Datei "mwst.php":
<?php
define("MWST",19.00); // aktueller MwSt.-Satz
$brutto = $_POST["brutto"]; // Formularauswertung
$netto =$brutto/(100+MWST)*100; // Netto berechnen
$mwst = $brutto-$netto; // MwSt. berechnen
?>
<!doctype html>
<html>
<head>
<charset = "utf-8">
<title>Mehrwertsteuer</title>
</head>
<body>
<p>Netto: <?= $netto ?></p>
<p>MwSt (<?= MWST ?> %): <?= $mwst ?></p>
<p>Brutto: <?= $brutto ?></p>
</body>
</html>
Validierung
empty()gibt TRUE zurück, wenn die übergebene Variabel leer ist oder null, NULL, FALSE.
is_numericgibt nur dann TRUE zurück, wenn der Wert eine Zahl ist.
preg_match()nimmt als Variablen einen regulären Ausdruck und ein Argument entgegen, in dem das Muster gesucht wird. Beispiel:
$email = $_POST['email'] ;
$pattern = '/\b[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}\b/' ;
if ( !preg_match( $pattern , $email ) )
{
$email = NULL ;
echo 'E-Mail-Adresse in falschen Format' ;
}
Sessions und Cookies
Die Codes für Sessions und Cookies müssen in der Datei ganz oben stehen, noch vor dem HTML-Code.
Sessions
Es gibt folgende Funktionen:
session_start()session_destroy()
Die Sitzungsdaten werden in das Array $_SESSION geschrieben.
<?php
session_start(); // On démarre la session AVANT toute chose
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Titre de ma page</title>
</head>
<body>
<p>Re-bonjour !</p>
<p>
Je me souviens de toi ! Tu t'appelles <?php echo $_SESSION['prenom'] . ' ' . $_SESSION['nom']; ?> !<br />
Et ton âge hummm... Tu as <?php echo $_SESSION['age']; ?> ans, c'est ça ? :-D
</p>
</body>
</html>
Cookies
Um ein Cookie zu schreiben, verwendet man die PHP-Funktion setcookie.
Man weist ihr normalerweise drei Parameter zu, in folgender Reihenfolge:
- Name des Cookies (ex. : pseudo ) ;
- Wert des Cookies (ex. : M@teo21 ) ;
- Ablaufdatum des Cookies, im Timestamp-Format (ex. : 1090521508 ).
<?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); ?>
Der Timestamp time() + 365*24*3600 bedeutet, dass das Cookie für ein Jahr gesetzt wird. Mit dem letzten Parameter true wird die Sicherheitsoption httpOnly gesetzt. [6]
In Dateien lesen und schreiben
Beispiel: Seitenaufrufe ausgeben
<?php
$datei = fopen('zaehler.txt', 'r+');
$aufrufe = fgets($datei); // Die erste Zeile wird eingelesen (Anzahl aufgerufener Seiten)
$aufrufe += 1; // Anzahl wird um 1 erhöht
fseek($datei, 0); // Cursor wird an den Anfang des Dokuments gesetzt.
fputs($datei, $aufrufe); // Die neue Anzahl von Seitenaufrufen wird geschrieben.
fclose($datei);
echo '<p>Diese Seite wurde ' . $aufrufe . ' Mal aufgerufen!</p>';
?>
Fehler und Debugging
Fehleranzeige einschalten:
- > /etc/php/7.0/apache2/php.ini > display_errors auf On stellen
Heredoc
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
curl
Es muss die Bibliothek libcurl vorhanden sein und zusätzlich das Paket php-curl installiert werden. Nach der Installation von php-curl muss Apache neu gestartet werden (in Ubuntu z. B. mit service apache2 restart).
Objektorientierung
Siehe Seite PHP - Objektorientierung
Links
| | |