Waarschuwing: dit is geen tutorial, maar een soort code-snippet.
Ik heb vandaag wat met PHP aangekloot en het is me gelukt om 2 werkende classes te maken; ImageClass en MySQLClass. Met ImageClass kun je 'on-the-fly' plaatjes maken, een postcounterplaatje of een profielcounterplaatje bijvoorbeeld. Hij is niet heel erg uitgebreid, je kunt het plaatje nu alleen nog maar een achtergrondkleur geven en er tekst op zetten. De GD-module voor PHP moet geïnstalleerd zijn om ImageClass te kunnen gebruiken! Met MySQLClass, je raadt het al, kun je verbinding maken met een MySQL-database. Hij is nu nog niet erg uitgebreid, but it does the job.
ImageClass:
<?php
class ImageClass
{
var $_ih;
var $_size_x;
var $_size_y;
function ImageClass($size_x, $size_y)
{
$this->_ih = imagecreatetruecolor($size_x, $size_y);
if (!$this->_ih)
die("Could not create an image stream (GD)");
$this->_size_x = $size_x;
$this->_size_y = $size_y;
}
function FillBackground($r, $g, $b, $a = 0)
{
$color = imagecolorallocatealpha($this->_ih, $r, $g, $b, $a);
imagefilledrectangle($this->_ih, 0, 0, $this->_size_x - 1, $this->_size_y - 1, $color);
imagecolordeallocate($this->_ih, $color);
}
function Output($release = true)
{
header("Content-Type: image/png");
imagepng($this->_ih);
if ($release)
{
$this->Release();
}
}
function Release()
{
imagedestroy($this->_ih);
}
function PrintText($text, $font, $text_size, $x, $y, $r, $g, $b, $a, $text_angle)
{
$color = imagecolorallocatealpha($this->_ih, $r, $g, $b, $a);
@imagettftext($this->_ih, $text_size, $text_angle, $x, $y, 0 - $color, $font, $text)
or die ("Could not print text");
imagecolordeallocate($this->_ih, $color);
}
function GetImageHandle()
{
return $this->_ih();
}
}
?>
Een beschrijving van de functies:
De constructor
Uitwerking:
In de constructor wordt het plaatje gecreërd, en wordt de class geïnitialiseerd.
Parameters:
$size_x: de breedte van het plaatje.
$size_y: de hoogte van het plaatje.
Teruggeefwaarde:
Geen
FillBackground
Uitwerking:
Met deze functie kan de achtergrond van het plaatje gevuld worden.
Parameters:
$r: de R-waarde van de achtergrondkleur [0-255].
$g: de G-waarde van de achtergrondkleur [0-255].
$b: de B-waarde van de achtergrondkleur [0-255].
$a: de alphawaarde van de achtergrondkleur [0-127].
Teruggeefwaarde:
Geen
Output
Uitwerking:
Met deze functie kan het plaatje weergegeven worden.
Parameters:
$release [optioneel, standaard = true]: als deze parameter true is, wordt het plaatje automatisch uit het geheugen verwijderd [true/false].
Teruggeefwaarde:
Geen
Release
Uitwerking:
Met deze functie kan het plaatje uit het geheugen verwijderd worden.
Parameters:
Geen
Teruggeefwaarde:
Geen
PrintText
Uitwerking:
Met deze functie kan er tekst op het plaatje geprint worden. ($text, $font, $text_size, $x, $y, $r, $g, $b, $a, $text_angle)
Parameters:
$text: de te printen tekst.
$font: de bestandsnaam van het lettertype, vergeet de 'ttf'-extensie niet!
$text_size: de grootte van de tekst.
$x: de x-coordinaat van de plek waar de tekst moet beginnen.
$y: de y-coordinaat van de plek waar de tekst moet beginnen
$r: de R-waarde van de achtergrondkleur [0-255].
$g: de G-waarde van de achtergrondkleur [0-255].
$b: de B-waarde van de achtergrondkleur [0-255].
$a: de alphawaarde van de achtergrondkleur [0-127].
$text_angle: de hoek waaronder de tekst geprint moet worden.
Teruggeefwaarde:
Geen
GetImageHandle
Uitwerking:
Met deze functie kan de handle van het plaatje verkregen worden.
Parameters:
Geen
Teruggeefwaarde:
De handle van het plaatje.
Een stukje voorbeeldcode:
<?php
class MySQLClass
{
var $_user;
var $_psw;
var $_db;
var $_host;
var $_conn;
var $_connected;
var $_lasterr;
function MySQLClass($user, $psw, $db, $host = 'localhost')
{
$this->_user = $user;
$this->_psw = $psw;
$this->_db = $db;
$this->_host = $host;
$this->_connected = false;
$this->_lasterr = '';
}
function Connect()
{
$this->_conn = mysql_connect($this->_host, $this->_user, $this->_psw);
if (!mysql_select_db($this->_db, $this->_conn))
return false;
$this->_connected = true;
return true;
}
function Query($query)
{
if (!$this->_connected)
{
$this->_lasterr = 'Query has been called while not connected';
return false;
}
$result = mysql_query($query, $this->_conn);
return $result;
}
function Close()
{
mysql_close($this->_conn);
$this->_connected = false;
$this->_conn = null;
}
function Select($table, $fields = '*', $where = null)
{
$query = 'SELECT ' . $fields . ' FROM ' . $table;
if ($where != null)
{
$query .= ' WHERE ' . $where;
}
return $this->Query($query);
}
function FreeResult($result)
{
mysql_free_result($result);
}
}
?>
Een beschrijving van de functies:
De constructor
Uitwerking:
In de constructor wordt de class geïnitialiseerd.
Parameters:
$user: de MySQL-gebruiker om verbinding mee te maken.
$psw: het MySQL-wachtwoord om verbinding mee te maken.
$db: de te gebruiken database.
$host [optioneel, standaard = 'localhost']: de host waar verbinding mee gemaakt moet worden
Teruggeefwaarde:
Geen
Connect
Uitwerking:
Met deze functie kan er verbinding worden gemaakt met de MySQL-database.
Parameters:
Geen
Teruggeefwaarde:
true als het verbinding maken gelukt is.
false als het verbinding maken mislukt is.
Query
Uitwerking:
Met deze functie kan er een query uitgevoerd worden.
Parameters:
$query: de uit te voeren query
Teruggeefwaarde:
Het resultaat van de query, false als het uitvoeren van de query mislukt is.
Close
Uitwerking:
Met deze functie kan de verbinding met de MySQL-database verbroken worden
Parameters:
Geen
Teruggeefwaarde:
Geen
Select
Uitwerking:
Met deze functie kan een select-query uitgevoerd worden.
Parameters:
$table: de MySQL-table waarin de select-query uitgevoerd moet worden.
$fields [optioneel, standaard = '*']: de MySQL-fields die geselecteerd moeten worden.
$where [optioneel, standaard = null]: de MySQL-kolommen die geselecteerd moeten worden.
Teruggeefwaarde:
Het resultaat van de query, false als het uitvoeren van de query mislukt is.
FreeResult
Uitwerking:
Met deze functie kan het resultaat van een query 'opgeschoond' worden
Parameters:
$result: het op te schonen resultaat.
Teruggeefwaarde:
Geen
Een stukje voorbeeldcode:
<?php
// Met dit stukje code kun je het aantal posts van een lid van een IPB 2.1.x forum opvragen, vanuit de database.
require_once('mysqlclass.php'); // MySQLClass moet in mysqlclass.php zitten
$uid = 1; // Het ID van het lid
$mysql = new MySQLClass('user', 'pass', 'aaf'); // Zet hier je eigen gegevens neer...
if (!$mysql->Connect()) // Verbinden
die ("An error occured in the MySQL module");
$result = $mysql->Select('ibf_members', 'posts', 'id=' . $uid); // Voer een select-query uit
$row = mysql_fetch_assoc($result); // Verkrijg een array van het resultaat
if (!$row) // Is de array leeg?
die ("UID invalid"); // Zo ja, dan is waarschijnlijk het uid fout
$posts = $row["posts"]; // Het aantal posts
$mysql->FreeResult($result); // Resultaat opschonen
$mysql->Close(); // Verbreek verbinding
echo $posts; // Geef het aantal posts weer.
?>
Disclaimer: deze classes mag je vrijelijk gebruiken en veranderen, maar wil je mij wel bij de credits vermelden als de een van deze classes gebruikt? Bij voorbaat dank .
Waarschuwing: dit is geen tutorial, maar een soort code-snippet.
Ik heb vandaag wat met PHP aangekloot en het is me gelukt om 2 werkende classes te maken; ImageClass en MySQLClass. Met ImageClass kun je 'on-the-fly' plaatjes maken, een postcounterplaatje of een profielcounterplaatje bijvoorbeeld. Hij is niet heel erg uitgebreid, je kunt het plaatje nu alleen nog maar een achtergrondkleur geven en er tekst op zetten. De GD-module voor PHP moet geïnstalleerd zijn om ImageClass te kunnen gebruiken! Met MySQLClass, je raadt het al, kun je verbinding maken met een MySQL-database. Hij is nu nog niet erg uitgebreid, but it does the job.
ImageClass:
Een beschrijving van de functies:
Een stukje voorbeeldcode:
Een beschrijving van de functies:
Een stukje voorbeeldcode:
Disclaimer: deze classes mag je vrijelijk gebruiken en veranderen, maar wil je mij wel bij de credits vermelden als de een van deze classes gebruikt? Bij voorbaat dank
.
Suggesties/verbeteringen/fouten/andere dingen? Posten kreng
.