/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-02/php4.txt


Themen:
- Formulare
- Sessions
- Dateien/Verzeichnisse
- Cross Site Skripting - XSS

- Kommunikation zwischen Webbrowser/Webserver
- HTTP-Protokoll
- Cookies

DNS-Server und Webserver: Unterschiedliche Server

1.) Name des Servers
2.) ...

Anfrage des Webbrowsers

GET index.php HTTP/1.1.
Host: localhost

Antwort:

HTTP/1.1 200 OK
Date:
Server: 
X-Powerd-By:
Transfer-Encoding:
Content-Type:

201b

<body>...

Response-Code: 200 OK, Seite wurde gefunden

201b bedeutet: 8129 = 8kByte - so lang sind die Daten

1.) Request
2.) Response

- Nachrichtenkopf: Header
- Response-Code
- Nachrichtenkörper: Body

8 verschiedene Anfrage-Typen: Response-Types:
- GET
- POST (Gleich wie GET, aber eventuell andere Parameter)
- HEAD (Das gleiche, aber ohne BODY)
- PUT (Lädt Datei auf Server hoch)
- DELETE (Löscht Datei auf dem Server)
- TRACE (Der Server liefert die Antwort, wie er sie bekommen hat - wurde unterwegs manipuliert?)
- OPTIONS
- CONNECT (Verschlüsselte Verbindung über PROXY)

Response-Code

200 OK
301 Moved Permanently
400 Bad Request
404 Not found

Cookies: HTTP: Zustandsloses Protokoll

Der Wert eines Cookies kann im HTTP-Header übertragen werden

Nutzen:
- Speichern von benutzerdefinierten Einstellungen
- Sessions
- Sammeln von Surfgewohnheiten

Sitzungscookies

 <?php
 setcookie ("meinCookie", "Inhalt des Cookies", time()+3600);
 echo "Cookie wurde gesendet.<BR />\n";
 ?>
 <A HREF="getcookie.php">Cookie auslesen</A>

 
PHP-Beispiel-Codes
- setcookie.php
- getcookie.php

PHP-Functions:
- setcookie (...)
- getcookie (...)

Parameter der Funktion cookie
- Name des Cookies
- Inhalt des Cookies
- Abgelaufen

(3 Parameter)

Zugriff auf Cookie

$_COOKIES ["Name des Cookies"];
$_COOKIES [];

Globale Variablen 
$_GET []: Für Addressleiste
$_POST []: Für Formulare
$_COOKIES []: Für Cookies

Stichwort: Global assoziatives Array

Formulare, was lernen?
- Formulare entwerfen
- Listen und Mehrfachauswahlen
- Benutzereingaben überprüfen
- Affenformular
- Übertragungsmöglichkeiten
- Passwortabfrage

Formulare bestehen aus zwei Komponenten
- HTML-Code
- Skript (PHP, ..)


<HTML>
<HEAD><TITLE>Formular</TITLE></HEAD>
<BODY>
 <FORM ACTION="formular1.php" METHOD="GET">
 Vorname: <INPUT TYPE="text" NAME="vorname" /> <BR />
 Nachname: <INPUT TYPE="text" NAME="nachname" /> <BR />
 <INPUT TYPE="submit" VALUE="Los gehts!" />
 </FORM>
 </BODY>
</HTML>

Formulare werden mit dem FORM-Tag definiert. 

- FORM-Tag
- Attribut ACTION 
- Parameter POST (Welcher HTTP-Request kommt zum Einsatz)

Eingabefelder:
- Textfelder TYPE="text"
- Passwordfelder TYPE="password"    
- Checkboxen TYPE="checkbox"
- Schaltflächen TYPE="submit", verbunden mit ACTION 

NAME: Eindeutiger Name 

Entweder POST oder GET 

$_POST ["name1"];
$_GET ["name2"];

Listen in Formularen

SELECT-Tag

<HTML>
<HEAD><TITLE>Einfache Liste</TITLE></HEAD>
<BODY>
 <FORM ACTION="list.php" METHOD="GET">
 <SELECT NAME="auswahl">
 <OPTION>Apfel</OPTION>
 <OPTION>Birne</OPTION>
 <OPTION>Banane</OPTION>
 <OPTION>Grapefruit</OPTION>
 </SELECT>
 <INPUT TYPE="submit" VALUE="Abschicken">
 <FORM>
 </BODY>
</HTML>

echo $_GET ['auswahl'];

Mehrfachauswahlen - SELECT-Tag, MULTIPLE Attribut   

<?php
 $wahl = $_GET['auswahl'];
 for ($i=0; $i < sizeof($wahl); $i++) {
    $wert = current($wahl);
    echo $wert ."<BR />\n";
    next($wahl);
}
?>


isset ()


Affenformular

Passwörter:

FORM INPUT TYPE="password"
Dann mit MD5 speichern

md5 ("password");

Sessions:

1.) session_start ();
2.) Session-ID
3.) $_SESSION []

Session-ID's ohne Cookies seit PHP 5.3 nicht mehr unterstützt

session_destroy ();

DBMS

Relationale Datenbank, Relation, Tupel

Datentypen:
- Ganzzahlen
- Fließkommazahlen
- Zeichenketten
- binäre Datentypen 

BIT 
TINYINT
BOOL BOOLEAN
SMALLINT
MEDIUMINT
INT INTEGER
BIGINT

Fließkommazahlen

FLOAT
DOUBLE
DECIMAL

CHAR
VARCHAR (M)
TINYTEXT TEXT MEDIUMTEXT LONGTEXT

BINARY
VARBINARY
TINYBLOB BLOB MEDIUMBLOB LONGBLOB

DATE
TIME 
DATETIME
TIMESTAMP

CREATE TABLE

mysql -u root -p -v < xyz.sql

DROP DATABASE 'xyz'
CREATE DATABASE 'xyz'
DROP TABLE 'abc'
CREATE TABLE 'abc' ('name1' VARCHAR (64), 'name2' VARCHAR (64))
INSERT INTO 'abc' VALUES ("Hallo", "Welt");
SHOW TABLES IN 'xyz'
USE 'xyz'
SELECT * FROM 'abc'
SELECT * FROM 'abc' WHERE expression
INSERT INTO 'abc' ('name1', 'name2') VALUES ("Hallo", "Welt");
DELETE FROM 'abc' WHERE expression

SELECT * FROM 'abc' JOIN 'def'

USING

SHOW DATABASES;
SET PASSWORD;

mysql_connect ();
mysql_close ();
mysql_query ();
mysql_error ();
mysql_real_escape_string ();
mysql_select_db ();
mysql_fetch_row ();
mysql_fetch_assoc ();
mysql_num_rows ();
mysql_num_fields ();
mysql_result ();

$handle = mysql_connect ('127.0.0.1', user, password);

if ($handle) ...
else ...

$query = "SELECT * FROM 'abc';

$result = mysql_quere ($query);

$row = mysql_fetch_assoc ($result);



In C 

int factorial(int x) {
    if (x <= 1)
        return 1;

    return x * factorial(x - 1);
}

In Python

def factorial(x):
    if x <= 1:
        return 1

    return x * factorial(x - 1)
    
Hallo Welt:

print "Hallo Welt!"

Perl:

  if   (<Bedingung>) {<Anweisungen>}
 [elsif (<Bedingung>) {<Anweisungen>}]
 [else         {<Anweisungen>}]
 
Ruby

# Definiere „Funktion“
def meine_funktion
  puts "Hier bin ich"
end

# Kann in andern Objekten wie eine Funktion benutzt werden
class ABC
  def gib_meine_funktion_aus
    meine_funktion
  end
end
mein_abc = ABC.new
mein_abc.gib_meine_funktion_aus # => Hier bin ich
mein_abc.meine_funktion # => Fehlermeldung, private method `meine_funktion' called


SDL:

#include <SDL2/SDL.h>

Definitionen:

SDL_Event event;
SDL_Window* window = NULL;
SDL_Surface* surface = NULL;

atexit (SDL_QUIT)

Aufrufe

SDL_Init (SDL_INIT_VIDEO);

window = SDL_CreateWindow ();
surface = SDL_GetWindowSurface (window);
SDL_PollEvent (&event)
SDL_DestroyWindow (window);


SDL_Init ();
SDL_CreateWindow ();
SDL_GetWindowSurface ();
SDL_PollEvent ()
SDL_DestroyWindow ();

SDL_Rect src, dst;

src.x;
sry.y;
src.w;
src.h;

dst.x;
dst.y;
dst.w;
dst.h;

image->w;
image->h;

SDL_FillRect ();
SDL_SetColorKey ();
SDL_KeyState ();
SDL_FillRect ();
SDL_BlitSurface ();
SDL_Flip ();
SDL_FreeSurface ();
SDL_LoadBMP ();

image = SDL_LoadBMP ("tux.bmp");

MySQL nach Excel exportieren:

 header('Content-Type: application/xls');
 header('Content-Disposition: attachment; filename=info.xls');
 

 
$connect = mysqli_connect("hostname", "username", "password", "db_name");
if(isset($_POST["submit"]))
{
 $query = "SELECT * FROM users";
 $res = mysqli_query($connect, $query);
 if(mysqli_num_rows($res) > 0)
 {
 $export .= '
 <table> 
 <tr> 
 <th> id </th>
 <th>firstname</th> 
 <th>lastname</th> 
 <th>dob</th> 
 
 </tr>
 ';
 while($row = mysqli_fetch_array($res))
 {
 $export .= '
 <tr>
 <td>'.$row["id"].'</td> 
 <td>'.$row["firstname"].'</td> 
 <td>'.$row["lastname"].'</td> 
 <td>'.$row["dob"].'</td> 
 
 
 </tr>
 ';
 }
 $export .= '</table>';
 header('Content-Type: application/xls');
 header('Content-Disposition: attachment; filename=info.xls');
 echo $export;
 }
}

Einfache Filterung

SELECT * FROM kunden WHERE name = 'a coding project'

Filterung mit Suchefunktion

SELECT * FROM kunden WHERE name LIKE '%coding%'

Filterung zwischen zwei Werten

SELECT * FROM kunden WHERE id BETWEEN 1 AND 5

Filterung mit Subselect

SELECT * FROM kunden WHERE name IN (SELECT name FROM names)

Einfache Sortierung

SELECT * FROM kunden ORDER BY name,id DESC

Spalte hinzufügen

ALTER TABLE kunden ADD column strasse VARCHAR(255);

Benutzer erstellen

GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY 'passwort';



The INNER JOIN keyword selects records that have matching values in both tables.

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;




SELECT 
  SUM(b.anzahl), 
  p.produkt
FROM 
  bestellung b,
  produkt p  
WHERE
  b.pr_id = p.id
GROUP BY
  p.produkt



SELECT 
  SUM(b.anzahl), 
  p.produkt
FROM 
  bestellung b
INNER JOIN 
  produkt p ON (b.pr_id = p.id)
GROUP BY
  p.produkt


  
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

JOIN 
INNER JOIN 
LEFT JOIN 
RIGHT JOIN 



Doppelte Einträge verhindern
DISTINCT-Anweisung

SELECT DISTINCT vorname FROM users ORDER BY vorname
SELECT DISTINCT vorname, nachname FROM users ORDER BY vorname, nachname



EXCEL

=SUMME (A3;B5)
=SUMME (A2:A14)

Anzahl:

=ANZAHL(E1:F4)

Höchst und Tiefswerte Ermitteln:

MIN ()
MAX ()

Durschnitt:

MITTELWERT ()

Logische Prüfung 

=WENN (BEDINGUNG; DANN; SONST)

=WENN (C9="Montag";"Okay";"anderer Tag")

=WENN(A1=“blau“;

=WENN(A5>100;A5-(A5*2%);A5)

=SUMMENPRODUKT
=HÄUFIGKEIT



<?php
$pdo = new PDO('mysql:host=localhost;dbname=databasename', 'username', 'password');
 
$sql = "SELECT * FROM users";
foreach ($pdo->query($sql) as $row) {
   echo $row['email']."<br />";
   echo $row['vorname']."<br />";
   echo $row['nachname']."<br /><br />";
}
?>

$stmt = $db->query ("SELECT * FROM codes");
$result = $stmt->fetchAll (PDO::FETCH_BOTH);