PHP

Aus Flinkwiki
Wechseln zu: Navigation, Suche
Seitenübersicht
Zur Seite "PHP - Objektorientierung"
Zur Seite "Programmiersprachen im Internet und in Netzwerken"
Zur Seite "Webprogrammierung"


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>

[3]


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>

[4][5]


Validierung

  • empty() gibt TRUE zurück, wenn die übergebene Variabel leer ist oder null, NULL, FALSE.
  • is_numeric gibt 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' ;
  }


E-Mail

E-Mail versenden




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:

  1. Name des Cookies (ex. : pseudo ) ;
  2. Wert des Cookies (ex. : M@teo21 ) ;
  3. 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


| | |