PHP

PHP einbetten

PHP wird mit HTML gemischt. Man erzeugt eine HTML Seite mit den erforderlichen HTML-Elementen und speichert diese Datei mit der Endung php ab.

Nun kann man in der HTML Seite an beliebigen Stellen und mehreren Stellen PHP Code einfügen, welcher auf dem Server generiert wird. Das bedeutet, man sieht nie den Code im Browser sondern nur den ausgeführten Code.

<?php ....dein PHP Code.... ?>

echo etwas in die Seite schreiben

<?php
echo "Hallo Welt";
?>

Mit echo kann man etwas ausgeben lassen. Mehrere Ausgaben werden mit Punkt . voneinander getrennt.

<?php
echo "Hallo" . "Welt";
?>

mehr zu echo

Kommentar

Es gibt einzeilige Kommentare mit // und mehrzeilige Kommentare. /* */
<?php
//einzeiliger Kommentar
echo "Hallo";
/*ein mehrzeiliger
Kommentar */
echo "Welt";
?>

Variablen

Eine Variable ist ein Container in dem etwas gespeichert wird. Eine Variable beginnt mit einem Dollarzeichen.

$preis = 30;
echo "Der Preis ist: ".$preis." Euro";

Datentyp

Es gibt folgende Datentypen

Der Datentyp muss nicht explizit angegeben werden. Anhand des zugewiesenen Wertes ergibt sich der Datentyp. Der Datentyp einer Variablen kann sich ändern.

Variablen Namen

Es gelten folgende Regeln für die Namensvergabe

Zahlen

$ganzZahl = 40;
$kommaZahl = 4.4;
$grossZahl = 4e6; // 4000000 oder 4 x 10 hoch 6
$kleinZahl = 4e-3; // 0.004 oder 4 x 10 hoch -3

40
4.4
4000000
0.004

Zahlen kann man auch in Anführungszeichen schreiben. Dabei gelten folgende Regeln.

Umwandeln, Konvertieren in eine Zahl mit doubleval() oder intval().

Rechenoperatoren

In PHP gibt es die gleichen arithmetischen Operatoren wie in Javascript.

Formular Übertragung

Beispiel

Die Formulardaten werden in einem HTML Formular an ein PHP- Programm / Seite verschickt. Dort werden sie mit POST oder GET empfangen.
Damit kein böswilliger Code in die Programmierung gelangt, werden alle HTML-spezifischen Zeichen mit htmlentities() in die entsprechenden Entities umgewandelt.

formular.html

<form action="formular.php" method="post">
<p>
<label>Vorname<br>
<input type="text" name="vorname">
</label>
</p>
<p>
<label>Nachname<br>
<input type="text" name="nachname">
</label>
</p>
<p><input type="submit"></p>
</form>

formular.php

<?php
$vorname = htmlentities($_POST["vorname"]);
$nachname = htmlentities($_POST["nachname"]);
echo $vorname." ".$nachname;
?>

Formular in gleicher Datei auswerten

Beispiel

Wenn man ein Formular nicht an eine weitere Php-Datei schicken möchte, sondern die Daten des Formulars in der gleichen Datei auswerten möchte, muss man im PHP Code überprüfen ob die gesendeten Variablen vorhanden sind und ob in einem oder mehreren Eingabefeldern eine Eingabe gemacht wurde.

if (isset($_POST["var1"])) {
if ($_POST["var1"] != '' && $_POST["var2"] != '') {
echo "Ihre Zahlen sind: ". htmlentities($_POST["var1"])." und ".htmlentities($_POST["var2"]);
}

Mit else könnte man noch auf die verschiedenen Situationen reagieren und entsprechende Ausgaben machen, wie im Beispiel.

mySQL Datenbank anzeigen

Im folgenden Beispiel muss zuvor eine Tabelle in einer Datenbank angelegt werden. Das kann man mit PHP-MyAdmin machen. Die Datenbank heißt firma die Tabelle heißt personen und hat die
Felder: name, vorname, id, geburtstag

Zuerst muss eine Verbindung zur Datenbank erstellt werden mit @new mysqli() Das @Zeichen sorgt dafür, dass keine Fehlerausgaben gemacht werden. Fehlerausgaben könnten Informationen enthalten, die für böswillige Zwecke genutzt werden könnten.
Die Parameter in myqli() sind: Adresse zur Datenbank, Anmeldename, Passwort, Datenbankname
In diesem Beispiel geht es um eine lokale Datenbank beispielsweise wamp oder xamp.

$con->set_charset("utf8");
Dann wird der Zeichensatz angegeben utf-8.

if($con->connect_error)
exit("Fehler bei der Verbindung");

Dann wird überprüft, ob die Verbindung erfolgreich war. Mit exit wird eine Fehlerausgabe gemacht und alle weiteren Befehle abgebrochen.

$sql = "SELECT * FROM personen";
Eine mySQL Code wird erstellt.

if($res = $con->query($sql)){........}
query() Der query Befehl der Klasse mysqli führt den mySQL Code aus. Ist die Abfrage richtig formuliert, wird eine Referenz auf die KLasse mysqli_result geliefert, welche in diesem Beispiel der Variable $res zugewiesen wird. Diese Methode liefert true, wenn es erfolgreich war.

num_rows eine Eigenschaft von mysqli_result liefert die Anzahl der Datensätze.

mit fetch_assoc() in einer while Schleife durchläuft man die einzelnen Datensätze. Die Feldelemente beinhalten die Datenbankfeldnamen als Schlüssel und die Datenbankfeldwerte als Wert.
In diesem Fall werden sie mit echo ausgegeben, stattdessen könnte man die Felder auch in einem Array speichern.

Zum Schluß wird $res und $con geschlossen.

<?php
$con = @new mysqli("", "root","","team");
$con->set_charset("utf8");
if($con->connect_error)
exit("Fehler bei der Verbindung");
$sql = "SELECT * FROM mitglieder";

if($res = $con->query($sql)){
if($res->num_rows == 0)
echo "kein Eintrag in der Datenbank.";

while($dsatz = $res->fetch_assoc())
{
//Datum formatieren
$bDay = date("d.m.Y",strtotime($dsatz["geburtstag"]));
echo $dsatz["name"]." , "
. $dsatz["vorname"]." , "
. $dsatz["id"]." , "
.$bDay."<br>";
}
$res->close();
}else
exit("Fehler bei der Abfrage");
$con->close();
?>

Gezielte mySQL Abfrage

PHPMyAdmin ist ein Programm, welches in der Regel bei einem Provider installiert ist. Auch bei einer lokalen Datenbank wie XAMP oder Wamp ist es mit installiert. Mit diesem Programm kann man gezielt Abfragen machen, neue Zeilen einfügen, Tabellen erstellen etc. und bekommt dann auch den mySQL Befehl angezeigt. Diese mySQL Befehl kann man dann auch für die Programmierung nutzen.

Im folgenden ein Beispiel aus eine Datenbank namens team und einer Tabelle nammens mitglieder. Es werden die Felder name und lohn ausgegeben, aber nur die Felder, wo lohn größer gleich 2000 und kleiner gleich 3600 ist. Die Tabelle wird absteigend nach dem Feld id geordnet.

Der Aufbau dieses und des vorigen Beispiels ist sehr ähnlich. Lediglich die Namen der Datenbank, Tabelle und Felder sowie die mySQL Anweisung sind anders.

$con = @new mysqli("", "root", "", "team");
$con->set_charset("utf8");
if ($con->connect_error)
exit("Fehler bei der Verbindung");
$sql = "SELECT name, lohn FROM mitglieder WHERE lohn >= 2000 AND lohn <= 3600 ORDER BY id DESC";

if ($res = $con->query($sql)) {
if ($res->num_rows == 0)
echo "kein Eintrag in der Datenbank.";

while ($dsatz = $res->fetch_assoc())
echo $dsatz["name"] . " , "
. $dsatz["lohn"] . " , ";
$res->close();
} else
exit("Fehler bei der Abfrage");
$con->close();

SQL-Operatoren

WHERE

In der WHERE Klausel können verschiedene Operatoren eingesetzt werden.

SQL Operatoren
Operator Info
= gleich
<> ungleich
> größer als
>= größer gleich
< kleiner als
<= kleiner gleich
LIKE Vergleich von Zeichenketten
Like Operator

Der LIKE Operator bietet die Möglichkeit Zeichenketten oder auch nur Teile von Zeichenketten einzugeben. Die Zeichenkette muss in Hochkommata eingefügt werden. Man kann hier auch Platzhalter einsetzen. ein % Prozentzeichen steht für eine beliebige Anzahl unbekannter Zeichen. Ein _ Unterstrich steht für genau ein unbekanntes Zeichen.

Im folgendem Beispiel werden alle Felder mitglied mit Anfangsbuchstaben M angezeigt

"SELECT * FROM mitglied WHERE name LIKE 'M%' ORDER BY name";

mehrere Auswahlbedingunen

Mehrere Auswahlbedingungen lassen sich verknüpfen mit folgenden Operatoren

logische Operatoren
Operator Info
NOT Der Wahrheitswert wird umgekehrt aus true wird false
AND Alle Bedingungen müssen zutreffen
OR Mindestens eine der Bedingungen muss zutreffen

 

ORDER BY

Mit ORDER BY kann man die Reihenfolge bestimmen. Man gibt das Feld an welches die Reihenfolge bestimmen soll, oder man gibt mehrere Felder mit Komma getrennt an. Das erste bestimmt die Reihenfolge. Sollte es 2 gleiche Felder geben, bestimmt dann das zunächst angegebene die weitere Reihenfolge.

ASC ascendant bedeutet aufsteigend DESC descendant absteigend. Aufsteigend ist der Normalfall und muss nicht extra angegeben werden.

MySQL prepared Statement

Datensatz einfügen

Wenn man eine SQL Abfrage aufgrund von Formulareingaben macht, kann man diese SQL Anweisungen auch als prepared Statements programmieren. Dadurch hat man einen Schutz vor SQL-Injections (schädlicher Code über Eingabefelder). Ein weiterer Vorteil ist, dass man diese Statements öfter nutzen kann.

In diesem Beispiel sollen aus den Formularfeldern name, vorname, id die Inhalte in die Datenbankfelder name, vorname, id eingefügt werden.

Die Methode prepare() der Klasse mysqli bereitet das prepared Statement vor. Es gibt soviele Fragezeichen wie Werte als Platzhalter. Tritt kein Fehler auf, wird eine Referenz auf die Klasse mysqli_stmt geliefert. Darüber wird die Methode bind_param() aufgerufen. Dort werden die Platzhalter mit den Feldern verbunden. Der erste Parameter von bind_param beinhaltet Buchstaben, die den Datentyp für das jeweilige Feld angibt.

Dann folgen die übermittelten Werte des Formulars. Die Reihenfolge und Anzahl muss übereinstimmen. bind_param liefert im Erfolgsfall true .

Die Methode execute() führt das prepared Statement aus.

$ps = $con->prepare("INSERT INTO personen (name, vorname,id ) VALUES(?,?,?)");
$ps->bind_param("ssi", $_POST["name"][0], $_POST["vorname"][0], $_POST["id"][0]);
$ps->execute();
$ps->close();
    

Datensatz anzeigen, auswählen, ändern.

Beispiel Auswahl

In diesem Beispiel wird ein Datensatz geändert. Dazu gibt es 3 PHP Seiten. highscoreAuswahl.php, highscoreAendern.php, highscoreUpdate.php.

highscoreAuswahl.php

Es wird ein Datensatz in einem Formular in einer Tabelle dargestellt. Der Index des jeweiligen Tabellenfeldes wird den Werten von Radiobuttons zugwiesen. Die Radibuttons haben in diesem Beispiel das Attribut name="auswahl" Der ausgwählte Radiobutton wird an eine neue PHP Seite übertragen. Anfang und Ende des Formulars inklusive Tabelle werden in HTML erstellt.

HTML

<form action="highscoreAendern.php" method="post">
<table>
<tr>
<td>Auswahl</td>
<td>Vorname</td>
<td>Nachname</td>
<td>Punkte</td>
</tr>

PHP

<?php
$con = new mysqli( "Adresse", "Anmeldung", "Passwort", "Datenbank" );
$con->set_charset( "utf8" );
$res = $con->query( "SELECT * FROM highscore" );

while ( $dsatz = $res->fetch_assoc() ) {
echo "<tr>";
echo "<td><label><input type='radio' name='auswahl' value='" . $dsatz[ "nr" ] . "'>";
echo $dsatz[ "nr" ] . "</label></td>";
echo "<td>" . $dsatz[ "vorname" ] . "</td>";
echo "<td>" . $dsatz[ "nachname" ] . "</td>";
echo "<td>" . $dsatz[ "punkte" ] . "</td></tr>";
}
$res->close();
$con->close();
?>

HTML

</table>
<p class="center">
<input type="submit" value="Datensatz anzeigen">
</p>
</form>

highscoreAendern.php

Hier wird ein Datensatz anhand des übermittelten Radiobuttons name="auswahl" angezeigt.
$sql = "SELECT * FROM highscore WHERE nr = " . intval($_POST["auswahl"]);
Die einzelnen Werte der Datenbankfelder werden den Werten von Formularfeldern zugewiesen.
<p><label><input type='text' name='vorname' value='" . $dsatz["vorname"] . "'> Vorname</label>
So kann man diese Formularfelder ändern und an die Seite highscoreUpdate.php schicken. Der Index, welcher in der Datentabelle und im Formularfeld nr heißt, wird mittels eines input type="hidden" übermittelt.

PHP

<?php
if (isset($_POST["auswahl"])) {
$con = new mysqli( "Adresse", "Anmeldung", "Passwort", "Datenbank" );
$con->set_charset("utf8");
$sql = "SELECT * FROM highscore WHERE nr = " . intval($_POST["auswahl"]);
$res = $con->query($sql);
$dsatz = $res->fetch_assoc();
echo "<p class='center'>Bitte neue Inhalte eintragen und speichern.</p>";
echo "<form action='highscoreUpdate.php' method='post'>";
echo "<p><label><input type='text' name='vorname' value='" . $dsatz["vorname"] . "'> Vorname</label></p>";
echo "<p><label><input type='text' name='nachname' value='" . $dsatz["nachname"] . "'> Nachname</label></p>";
echo "<p><label><input type='text' name='punkte' value='" . $dsatz["punkte"] . "'> Punkte</label></p>";
echo "<input type='hidden' name='nr' value='" . $_POST["auswahl"] . "'>";
echo "<p><input type='submit' value='speichern'></p></form>";
$res->close();
$con->close();
} else {
echo "<p>Keine Auswahl getroffen.</p>";
}
?>

highscoreUpdate.php

Anhand des Index nr wird der Datensatz mit einem prepared Statement aktualisiert.

<?php
$nr = $_POST["nr"];
echo $nr. $_POST["vorname"].$_POST["punkte"];
$con = new mysqli( "Adresse", "Anmeldung", "Passwort", "Datenbank" );
$con->set_charset("utf8");
$ps = $con->prepare("UPDATE highscore SET vorname = ?, nachname = ? , punkte = ? WHERE nr = $nr");
$ps->bind_param("ssi", $_POST["vorname"], $_POST["nachname"], $_POST["punkte"]);
$ps->execute();
if ($ps->affected_rows > 0)
echo "<p class='center'>Der Datensatz wurde geändert.</p>";
else
echo "Es wurden keine Änderung vorgenommen.";
$ps->close();
$con->close();
?>

PHP nach Javascript

Php erledigt Aufgaben wie auf Datenbanken zugreifen, Daten laden, Daten speichern, während Javascript im Browser ausgeführt wird und mehr so Aufgaben übernimmt wie auf Usereingaben zu reagieren. Wie bekommt man beides unter einen Hut?

siehe auch Beitrag auf lima-city

Eine Möglichkeit ist, dass ein Array welches in PHP vorliegt, in ein Javascript Array übertragen wird. Dazu schreibt man den PHP Block in den Scriptblock von Javascript und nutzt echo, um den Javascript Code zu erzeugen.

Im folgenden Beispiel könnte das 2dimensionale Array $verb auch aus einer Datenbank oder CSV Datei geladen worden sein. Das Array $ verb wird dann eins zu eins mit json_encode() in das Javascript Array fragen übertragen.

<?php
$verb[0] = ["abuse", "Mißbrauch"];
$verb[1] = ["accomplish","vervollständigen"];
$verb[2] = ["boost","verstärken"];
?>
<script>
<?php
$jsarray = json_encode($verb);
echo("var fragen = $jsarray;");
?>
console.log(fragen[1][0]);
</script>

HTACCESS / Ordner mit Passwort schützen

1. Erzeuge eine PHP-Datei mit folgenden Code:

<?php echo dirname(__FILE__); ?>

Speichere diese PHP Datei in dem Verzeictschnis ab, welches geschützt werden soll, lade Sie hoch und rufe Sie mit dem Webbrowser aus.

Es wird der Pfad auf dem Webserver ausgegeben. Kopiere die Zeile.

2. Rufe diesen Link auf. Sollte der link nicht mehr gültig sein, suche bei google nach einem htaccess Genearator.

http://www.htaccesseditor.com/gr.shtml

Wähle Standard Athentifizierung und

Gebe unter Schritt 2 den kopierten Pfad ein aber setze an das Ende /.htpasswd

Setze einen Anmeldenamen und ein Passwort ein und klicke auf Erstellen. Unten erscheint ein Code.

3. Nun rufen wir einen Texteditor auf und kopieren den erzeugten Code für die .htaccess

AuthUserFile /pfad/den/die/phpdatei/angezeigt/hat/.htpasswd
AuthGroupFile /dev/null
AuthName "Password Protected Area"
AuthType Basic

<limit GET POST>
require valid-user
</limit>

Speichere diese Datei mit der Bezeichnung .htaccess im gleichen Ordner ab und lade Sie hoch.

(ACHTUNG!! DEN PUNKT vor htaccess nicht vergessen!)

 

3. Nun benötigen wir noch die .htpasswd

Kopiere die generierte Zeile aus dem Htaccessgenerator.

Öffne den Texteditor und füge die Zeile in eine neue Textdatei ein.

Beispiel Code:
benutzername:$1$flVPU.Vb$sDdtz1m9UzS09YBdiiOpUH.

Speichere diese Datei unter dem Namen .htpasswd im gleichen Verzeichnis ab und lade sie hoch.

Fertig. Beim Aufruf des Ordners im Browser wird man nach Benutzernamen und Passwort gefragt.

 

Impressum / Datenschutz


Pastor Pixel