PHP und MySql

Allgemeines


Ziel ist es so wenig wie möglich Daten über das Netz zu schicken. Dies bedeute, dass nicht bei jeder Anforderung die komplette Seite neu aufgebaut werden soll. Es bietet sich dazu die Verarbeitung mit JavaScript und AJAX an.

Ich benutze deshalb PHP in der Regel dazu Daten, über einen AJAX Request, aus der Datenbank zu selectieren und als XML zurück zu geben.

Weiter benutze ich PHP dazu, Daten, die aus einem HTML-Formular über AJAX übertragen werden, in die Datenbank einzupflegen.

Die Verarbeitung in JavaScript hat den Vorteil, dass das Formular geprüft werden kann und ggf. Variablen verändert werden können.

Grundsätzlich arbeite ich mit XML-Daten. Sollte das bei großen Datenmengen ein Problem werden, muss man individuell eine Trennzeichenlösung finden.

Datenbankverbindung herstellen


Zuerst muss die MySql-Datenbank geöffnet werden.

Die geschieht am Besten in einer seperaten PHP-Datei, die dann mit

require_once ('mysqli_open.inc');

eingebunden wird. Damit kann das Öffnen der DB in allen PHP-Scripts verwendet werden.

   $v_host = "localhost";
   $v_user = "DBUSER";
   $v_pass = "DB-PASSWORT";
   $v_database = "DB-NAME";
   $e_db = mysqli_connect($v_host, $v_user, $v_pass, $v_database );

/*  ggf. Meldung ausgeben     
if ( mysqli_connect_errno() )
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
else
  {
  echo 'Success... ' . mysqli_get_host_info($dblink) . "\n";
  }
*/

MySql Select in PHP aufbereiten


Mit den übergebenen Parameter wird zunächst die SQL-Anweisung zusammengesetzt.

$v_qry="select feld1 ,
       feld2 ,
       feld3
  from tabelle
 where 1=1";

if ( !empty($v_param1) )
{
  $v_qry = $v_qry." and feld1 = \"".$v_param1."\" ";
}
 
if ( !empty($v_param2) )
{
  $v_qry = $v_qry." and feld2 = \"".$v_param2."\" ";
}

Ergebnis des Selects in PHP verarbeiten


Mit mysqli_query wird der oben erstellte Select ausgeführt. Die zweite Zeile gibt im Fehlerfall die Fehlermeldung aus. Dies lasse ich aber in der Produktivanwendung weg, damit etwaige Angreifer keine zusätzlichen Informationen erhalten.

  $e_dbErgebnis = mysqli_query($e_db, $v_qry)
       OR die("Error: ".$v_qry."<p>".mysqli_error()."<\p>");

Die Trefferliste wird mit einer Schleife abgearbeitet.

Mit mysqli_fetch_array wird ein Satz in ein Array geladen. Innerhalb der Schleife wird dann jedes Feld verareitet.

  while ($v_zeile = mysqli_fetch_array($e_dbErgebnis, MYSQLI_ASSOC)) 
  {
    $v_feld1   = rawurlencode($v_zeile["DB-Feldname1"]);
    $v_feld2   = $v_zeile["DB-Feldname2"];
    ... weitere Verarbeitung ... 
  } 

Mit mysqli_num_rows wird die Anzahl der gefunden Sätze ermittelt.

Hier muss das Element von mysqli_query übergeben werden.

  $v_anz = mysqli_num_rows($e_dbErgebnis);

Bei Insert, Update oder Delete Anweisungen kann mit mysqli_affected_rows die Anzahl der verarbeiteten Sätze ermittelt werden.

Hier muss das Element von mysqli_connect übergeben werden.

  $v_anz = mysqli_affected_rows($e_db);

AJAX Request und PHP Rückgabe


Hier wird die grundsätzliche Arbeitsweise dargestellt.

In JavaScript wird ein AJAX-Request erzeugt und die Daten hinzugefügt.

Der AJAX-Request wird an PHP geschickt.

Die PHP-Seite gibt die Daten als HTML oder XML zurück.

Nicht realisiert ist hier die eigentliche Datenbankverarbeitung.

Die Felder Wert1 und Wert2 werden als Parameter übergeben. Ist das Feld nicht ausgefüllt, wird leer zurückgegeben.

In der Auswahlliste ist eine Mehrfachauswahl möglich. Die selektierten Einträge werden in ein Array übernommen. Diese Array wird an PHP übergeben. In PHP stehen die Werte des Array getrennt durch Komma in einem String. Dieser kann mit explode wieder in ein Array umgewandelt werden.

header( 'Content-type: text/xml; charset=utf-8' );

Ausgabe aus PHP

Die Felder Wert 1 und Wert 2 werden eins zu eins zurückgegeben. Als Parameter 3 werden alle markierten Werte in der Auswahlliste zurückgegeben und als Parameter 4 der zweite selektierte Wert aus der Auswahlliste. Ist keiner ausagewählte wird leer angezeigt.

          

Senden (Text)

Für den Button Senden (Text) ist ein Eventlistener installiert. Es wird die Funktion sendenAjaxText aufgerufen. In dieser Funktion wird der AJAX-Request vorbereitet und gesendet.

sendenAjaxText()

Die Funktion sendenAjaxText ruft die PHP-Datei phpReturnText.php auf. Die PHP-Datei gibt die übergebenen Parameter als Text/HTML zurück.

phpReturnText.php

Beim Ajax-Event load wurde die Funktion dataShowText() angegeben. Diese Funktion löscht zunächst den Anzeigebereich und zeigt dann das Ergebnis aus der PHP-Datei an.

dataShowText()

Senden (XML)

Für den Button Senden (XML) ist ein Eventlistener installiert. Es wird die Funktion sendenAjaxXML aufgerufen. In dieser Funktion wird der AJAX-Request vorbereitet und gesendet.

sendenAjaxXML()

Die Funktion sendenAjaxXMLruft die PHP-Datei phpReturnXML.php auf. Die PHP-Datei gibt die übergebenen Parameter als XML zurück.

Achtung! Damit es keine bösen Überraschungen mit < und > Zeichen in den XML-Daten gibt, sollten die Variablen in PHP mit rawurlencode($var1) codiert werden.

phpReturnXML.php

Beim Ajax-Event load wurde die Funktion dataShowXML() angegeben. Diese Funktion löscht zunächst den Anzeigebereich. Aus dem XML werden die Werte selektiert und angezeigt.

dataShowXML()

Datei mit PHP hochladen


Zum Hochladen einer Datei auf den Server muss im Formtag unbedingt enctype="multipart/form-data" angegeben werden.

Zur Dateiauswahl muss der input type file sein.

Die hier verwendete PHP-Datei hat keine Einschränkung bei Typ oder Größe der Datei. Das birgt natürlich ein Sicherheitsrisiko.

Im PHP-Script stehen die folgende Variablen zur Verfügung:

$_FILES['datei']['name']
Name der Datei, die ausgewählt wurde.

$_FILES['datei']['tmp_name']
Name der Datei im temporären Verzeichnis auf dem Server.

$_FILES['datei']['size']
Größe der Datei in Bytes.

$_FILES['datei']['type']
MIME-Type der Datei.

Die Datei wird temporär auf den Server geladen und muss im PHP-Script verschoben werden. Dies geschieht mit move_uploaded_file. Das Zielverzeichnis muss die Berechtigung zum Schreiben für alle Benutzer haben (777);

In diesem Beispiel wird das Hochladen verhindert, indem der move_uploaded_file nicht ausgeführt wird.

Formtag anzeigen phpDateiUpload.php

PHP Aufruf und Variablenübergabe (Get)


Eine PHP-Seite wird mit name.php aufgerufen.

Variablen werden mit name.php?name1=wert1&name2=wert2 übergeben (Get-Methode).

Bei der Anzeige der Seite werden die Parameter/Variablen in der URL angezeigt. Außerdem wird noch der Name und der Value des Buttons mitgeliefert (&senden=Senden)

Checkbox

Die PHP-Datei sieht so aus:

<?php
/* Ausgabe und Zeichensatz     
   html - Ausgabe wird als HTML Code verarbeitet 
   xml  - Ausgabe wird als XML interpretiert - Fehler wenn kein XML 
   text - Ausgabe wird als Text interpretiert und abgefragt ob die Ausgabe gespeichert oder mit Editor angezeigt werden soll */
header( 'Content-type: text/html; charset=utf-8' );

/* Übergeben Variablen verarbeiten */

$var1 = trim($_GET['getWert1']); 
$var2 = trim($_GET['getWert2']);

var_dump($_GET['getWert1']); 
echo "
"; var_dump($_GET['getWert2']); echo "
"; print ("Variable 1: -->".$var1."<--<br>"); print ("Variable 2: -->".$var2."<--"); ?>

PHP Aufruf und Variablenübergabe (Post)


Eine Seite, bei der die Variablen mit POST übergeben werden sollen, kann nur über ein Formular mit methode="post" aufgerufen werden.

Bei der Anzeige der Seite werden die Parameter/Variablen nicht in der URL angezeigt. Es wird noch der Name und der Value des Buttons mitgeliefert (&senden=Senden)

Die PHP-Datei sieht aus wie oben nur das GET durch POST ersetzt wird.

IP-Adresse des Clients ermitteln


IP-Adresse mit PHP ermitteln

$ip    =    $_SERVER['REMOTE_ADDR'];
echo $ip;