Website opkuis

Momenteel ben ik bezig met een grote opkuis van mijn webhosting. Dat is typisch zo’n projectje dat van lange duur is, maar toch hoop ik daar snel mee rond te zijn. Het onderdeel van de muziekpiraterij artikelen wordt op dit ogenblik volledig geherprogrammeerd zodat er wat meer functionaliteit zal ingebouwd worden naar doorzoekbaarheid en catalogisering. Ik hoop van dan af ook terug met de regelmaat van de klok nieuwe artikelen te kunnen posten. Op dit ogenblik staan er meer dan 1000 links nog in de wachtrij…

Enter Songbird, Exit iTunes of eerder WinAmp of MediaMonkey?

Songbird
Songbird logo

Het ging niet lang meer duren, zo bleek al uit een van mijn vorige berichten. Ik heb iTunes nu definitief naar de prullenbak verwezen en Songbird geïnstalleerd. Wat een verademing, of toch niet helemaal?? Continue reading “Enter Songbird, Exit iTunes of eerder WinAmp of MediaMonkey?”

Combichrist & Rammstein in het sportpaleis

rammstein
Rammstein logo

Ben zojuist terug van het Sportpaleis waar Rammstein zich van zijn beste kant liet zien. Of dit muzikaal of theatraal was laten we in het midden :-). The show must go on, en dat moet Till (de zanger) ook gedacht hebben tijdens de eerste twee nummers. Het geluid leek werkelijk nergens op en van zang was dan ook niet veel verstaanbaar. Continue reading “Combichrist & Rammstein in het sportpaleis”

Klantenservice iBood / Lacie

Begin 2009 kocht ik online via iBood een Lacie Internet Space van 1 TB. Na 8 maanden gebruik (waarvan nauwelijks enkele dagen intensief) begaf de controller van de harde schijf het. Vermoedelijk…, want ik hoorde de harde schijf niet meer opspinnen. Het blauwe indicatielampje in de witte behuizing brandde echter nog wel. Continue reading “Klantenservice iBood / Lacie”

Terug uit Mexico

Olá amigos!

Ondertussen al twee weken terug uit Mexico – Cancun – Playa Del Carmen en al bekomen van een kleine jetlag. We verbleven in ‘Riu Palace Mexico’ in Playa Del Carmen, een klein uurtje rijden van de luchthaven van Cancun. Playa Del Carmen is zowat het Knokke van Mexico, toch zeker dat deel waar alle hotels staan. Als Mexicaan kom je er al niet binnen tenzij je je paspoort of andere papieren achterlaat aan de ‘plaatselijke’ controle. Om Mexico te leren kennen, blijf je best niet in die kunstmatige site hangen tenzij je graag ongestoord aan het strand wil liggen of je naam hagedis is…

hagedis

Continue reading “Terug uit Mexico”

Posting HTML forms with special characters, while keeping your database clean.

The best practice when storing data in a database is to store it in its most purest form.
When allowing users to edit data through HTML webpages you need to encode some characters so your HTML-forms won’t break. You can do this by using htmlspecialchars (or htmlentities). Below is an example with htmlspecialchars where only the double quotes are escaped (ENT_COMPAT flag).

Mind the accept-charset in the form value: I try to work with UTF-8 and UTF-8 only. (see your collation in mySQL is also set to UTF-8!)

You can run this on code on localhost (e.g. XAMPP)

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>htmlspecialchars (utf-8 encoding)</title>
</head>
<body>
<h1>htmlspecialchars (utf-8 encoding)</h1>
<h2>Before form post</h2>
<?php
$dbvalue = "String: ? < > ' - \" `´& % ‰ € ® 2011";
$formvalue = htmlspecialchars($dbvalue, ENT_COMPAT,"UTF-8");
?>
<p><strong>String</strong> is a value coming from a database record in its cleanest form: <span style="color:green;"><?php echo htmlspecialchars($dbvalue); ?></span> </p>
<p>For use in a text form, especially the double quotes, must be encoded so the <em>value=&quot;&quot;</em> doesn't break. We use <strong>htmlspecialchars</strong> (ENT_COMPAT) function. ENT COMPAT only forces double quotes to be changed into &amp;quot; (besides < > ? &)</p>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" accept-charset="UTF-8">
	<label>String:
	<input name="string" type="text" value="<?php echo $formvalue; ?>" size="50" /></label>
	<br />
	The value of title inside this form looks like <span style="color:red;"><?php echo htmlspecialchars($formvalue); ?></span><br />
	<input name="submit" type="submit" value="submit this form" />
</form>
<?php if($_POST){ ?>
<h2>Yes, the form was posted</h2>
<p>When the form is <strong>submitted</strong>, the <strong>string</strong> field will again have a value in its purest form (no &amp;quot; values but &quot;) (not the htmlspecialchars formatting)</p>
<p><strong>String</strong> has submitted value: <span style="color:green;">
	<?php echo $_POST['string']; ?>
	</span></p>
<?php } ?>
</body>
</html>

Foreign Key Constraints en Display fields in phpMyAdmin

Een van de handigheden in phpMyAdmin is dat je bij een aantal storage engines zoals innoDB  en myISAM een ‘display field’ kan instellen.

Het display field is eigen aan phpMyAdmin en heeft niets met mySQL te maken. Wanneer je een display field aanmaakt via phpMyAdmin zal zich dat niet vertaald zien in bvb mySQL Workbench.

Bij INNODB kan dit ook nog een extra aanvulling zijn op  foreign keys .

Bij het invoegen van een record wordt automatisch een drop down lijst gegeven van de mogelijke opties wanneer een relatie gelegd is naar een andere tabel. Indien een foreign key constraint bestaat voor een bepaald veld wordt niet alleen een ID getoond naar de verwijzende tabel, maar ook een omschrijving (display field) van de verwijzende tabel. Dit biedt het voordeel dat je niet eerst de verwijzende tabel moet openen en daar gaan zoeken naar de juiste ID.

Laten we uitgaan van het voorbeeld dat je ook op Wikipedia kan terugvinden. Een tabel waarin je de namen van je klanten bewaart en een tabel waarin de bestellingen van alle klanten opgesomd zijn. Elke bestelling wordt geplaatst door een bepaalde klant. In de bestellingentabel definiëren we dus een foreign key naar de tabel klanten.

Tabel 1: klanten

id
naam

Tabel 2: bestellingen

id
artikel
klant (foreign key naar klanten.id)

Het ‘display field’ instellen gebeurt in de ‘relation view’ van de verwijzende tabel (namelijk klanten). Deze relation view is toegankelijk in het structuur menu van de tabel. Als display field kies je in dit geval dus ‘naam’.

Wanneer je nu bestellingen gaat invoeren via phpMyAdmin krijg je bij het invulveld klant een dropdown lijst te zien met de namen (en bijhorende id) uit de klantentabel. Het voordeel is dus dat je niet in een apart venster eerst de id moet gaan opzoeken die bij een bepaalde naam hoort.

Als je meer dan 200 klanten hebt, zal er geen dropdown meer verschijnen, maar een zoekvenster. (zie pmaWiki)

Er is wel een nadeel verbonden aan ‘display fields’. Ze worden namelijk niet geëxporteerd bij het nemen van backup van de database. Dit komt omdat de ‘display field’ een functie is van phpMyAdmin zelf, en niet van MySQL.