Generic Table Generator
In de praktijk komt het vaak voor dat je een aantal velden uit een MySQL tabel in een HTML tabel wilt laten zien. Het is dan extra handig als je op de kolomkoppen kunt klikken om op het betreffende veld te sorteren. Als je twee keer na elkaar op dezelfde kolomkop klikt, wordt de sorteervolgorde omgedraaid. Bonus: in dit script zit de kortste manier verwerkt om tabelrijen om en om te kleuren ;-))) nJoy! groeten, Jan Koehoorn p.s. voor de oudgedienden: ja, ik weet dat ik al eens een tabelgenereer-script heb gemaakt. Dit is gewoon de nieuwste versie, met wat OOP erin verwerkt zodat beginners kunnen zien hoe dat in zijn werk gaat ;-) p.s.s. FireFox gebruikers kunnen dit script (en alle andere scripts op PHPhulp) een rating geven. Volg de instructies op deze pagina op.
[b]generic_table_generator.php[/b]
[code]
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL | E_STRICT);
require 'classes/class.core.php';
require 'classes/class.database.php';
$db = new database ();
// vul hier je eigen tabelnaam in
$tabelnaam = 'ckv_instellingen';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Generic Table Generator</title>
<style type="text/css">
@import 'oop.css';
</style>
</head>
<body>
<div id="container">
<div class="wrapper">
<?php
// vul hier de velden in die je wilt hebben
$velden = array ('naam', 'website', 'postcode', 'plaats');
// deze is voor in de querystring
$sql_str = implode (', ', $velden);
// kijken of $_GET['sort_by'] geset is. Zoniet: eerste arrayelement van $velden pakken
$sort_by = (isset ($_GET['sort_by'])) ? ($_GET['sort_by']) : ($velden[0]);
// beveiligingscheck: hij moet wel in de array $velden voorkomen
if (!in_array ($sort_by, $velden)) {
$sort_by = $velden[0];
}
// kijken of $_GET['sort_order'] geset is. Zoniet: 'ASC' pakken
$sort_order = (isset ($_GET['sort_order'])) ? ($_GET['sort_order']) : ('ASC');
// beveiligingscheck: het mag alleen ASC of DESC zijn
if ($sort_order != 'ASC' && $sort_order != 'DESC') {
$sort_order = 'ASC';
}
// querystring in elkaar sleutelen
$sql = "
SELECT " . $sql_str . "
FROM " . $tabelnaam . "
ORDER BY " . $sort_by . " " . $sort_order . "
";
if ($db->query ($sql)) {
echo '<h1>' . $tabelnaam . '</h1>';
echo PHP_EOL;
echo '<table>';
echo PHP_EOL;
$tbl_str = '<tr>';
// kolomkoppen in elkaar sleutelen
foreach ($velden as $veld) {
if ($veld == $sort_by) {
// na het uitvoeren van de query draaien we $sort_order om
// als er op dezelfde kolomkop geklikt wordt tenminste
$sort_order = ($sort_order == 'ASC') ? ('DESC') : ('ASC');
$tbl_str .= '<th><a href="?sort_by=' . $veld . '&sort_order=' . $sort_order . '" title="">' . $veld . '</a></th>';
}
else {
$tbl_str .= '<th><a href="?sort_by=' . $veld . '&sort_order=ASC" title="">' . $veld . '</a></th>';
}
}
$tbl_str .= '</tr>';
echo $tbl_str;
// voor de achtergrondkleur van de rijen
$color = 0;
while ($row = $db->fetch ()) {
echo PHP_EOL;
// rijen om en om kleuren; de SNELSTE manier!!! :-))))
echo '<tr class="bg' . ($color++) % 2 . '"><td>';
echo str_replace ('&', '&', implode ('</td><td>', $row));
echo '</td></tr>';
}
echo '</table>';
}
// als er errors zijn, laten zien
if ($db->has_errs ()) {
// in een div zetten, zodat je je eigen CSS kan maken
echo '<div class="errs">';
foreach ($db->get_errs () as $err) {
echo $err;
}
echo '</div>';
}
?>
</div>
</div>
</body>
</html>
[/code]
Het OOP gedeelte:
(deze staan bij mij in de map 'classes')
[b]class.core.php[/b]
[code]
<?php
class core {
protected $errs;
protected $msgs;
/*
* constructor
*/
public function __construct () {
$this->errs = array ();
$this->msgs = array ();
}
/*
* setters
*/
public function set_err ($err) {
array_push ($this->errs, $err);
}
public function set_msg ($msg) {
array_push ($this->msgs, $msg);
}
/*
* getters
*/
public function get_errs () {
return $this->errs;
}
public function get_msgs () {
return $this->msgs;
}
/*
* return the number of messages, if any
* @return int
*/
public function has_msgs () {
return count ($this->msgss);
}
/*
* return the number of errors, if any
* @return int
*/
public function has_errs () {
return count ($this->errs);
}
}
?>[/code]
[b]class.database.php[/b]
[code]
<?php
class database extends core {
private $db_host;
private $db_user;
private $db_pass;
private $db_name;
protected $res;
protected $affected_rows;
protected $num_rows;
public function __construct () {
parent::__construct ();
$this->db_host = '*****';
$this->db_user = '*****';
$this->db_pass = '*****';
$this->db_name = '*****';
if (!mysql_connect ($this->db_host, $this->db_user, $this->db_pass)) {
array_push ($this->errs, '<p>Connectie met DB is mislukt.</p>');
}
if (!mysql_select_db ($this->db_name)) {
array_push ($this->errs, '<p>Fout bij het selecteren van de database</p>');
}
}
public function query ($sql) {
if (!$this->res = mysql_query ($sql)) {
array_push ($this->errs, '<p>' . mysql_errno () . ': ' . mysql_error () . '</p>');
array_push ($this->errs, '<pre>' . htmlentities (str_replace ("\t", '', $sql)) . '</pre>');
return false;
}
else {
return true;
}
}
public function fetch () {
return mysql_fetch_assoc ($this->res);
}
public function get_affected_rows () {
return $this->affected_rows;
}
public function get_num_rows () {
return mysql_num_rows ($this->res);
}
public function get_ip () {
if (@getenv ($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = @getenv ($_SERVER['HTTP_X_FORWARDED_FOR']);
}
elseif (@getenv ($_SERVER['HTTP_CLIENT_IP'])) {
$ip = @getenv ($_SERVER['HTTP_CLIENT_IP']);
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
}
?>[/code]
Reacties
0