<?PHP
// sessie starten
// we slaan alle gegevens op in een sessie
// ob_start
// we gebruiken af en toe een header()
// error reporting op E_ALL zetten
// zo krijgen we alle fouten te zien
// en kunnen we ze makkelijk oplossen
// verbinding maken met de MySQL server
// ik gebruik hier "or die()" voor als de verbinding
// niet gelukt is
// dit i.v.m. dat de pagina toch afgebroken MOET worden
// verbinding maken met de database
// hier hetzelfde als bij MySQL_Connect met de "or die()"
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> -= Rss Maker =- </title>
</head>
<body>
<?PHP
// actie includen die ervoor zorgt dat we opnieuw kunnen
// beginnen met het maken van een rss
include("action/opnieuw.php");
// kijken of er een action is geset in de url
if(!IsSet($_GET['action'])) {
// nee, niet het geval
// kijken of er al een sessie geset is om daar mee
// verder te kunnen gaan
if(!IsSet($_SESSION['aantal']) && !IsSet($_SESSION['tabel']) && !IsSet($_SESSION['velden'])) {
// er is nog geen sessie geset
// dus we gaan nu eens vragen hoeveel velden de gebruiker
// wil hebben in zijn/haar rss bestand
// er is op de verstuur knop gedrukt
if($_SERVER['REQUEST_METHOD'] == "POST")
{
// kijken of het getal ook echt een getal is d.m.v. "regex"
{
// ja, het is echt een getal dus zetten we het aantal in
// de sessie
$_SESSION['aantal'] = $_POST['aantal'];
// pagina refreshen
header("Location: ".$_SERVER['REQUEST_URI']); } else
{
// het getal bleek geen getal te zijn
// error weergeven en een "Keer terug-link"
echo "Je hebt geen (juist) aantal ingevuld!<br />"; echo "<a href='javascript:history.go(-1);'>Keer terug</a>."; }
} else
{
// er is nog niet op de knop gedrukt
?>
<form method="post" action="<?=$_SERVER['REQUEST_URI'];?>">
<table border="1" width="800">
<tr>
<th colspan="2">
Velden met een * zijn verplicht!
</th>
</tr>
<tr>
<td width="200">
Aantal velden: *
</td>
<td width="600">
<input type="text" name="aantal" value="" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Volgende" />
<input type="reset" name="reset" value="Leeg velden" />
</td>
</tr>
</table>
</form>
<?PHP
// einde van het eerste formulier + posten
}
} else if(IsSet($_SESSION['aantal']) && !IsSet($_SESSION['tabel']) && !IsSet($_SESSION['velden']) && !IsSet($_SESSION['order']) && !IsSet($_SESSION['ascdesc']) && !IsSet($_SESSION['limit']['begin']) && !IsSet($_SESSION['limit']['eind'])) {
// de sessie aantal is geset, de andere sessies nog niet
// dus we gaan nu een formulier neerzetten voor de andere waarden
// van de sessies
if($_SERVER['REQUEST_METHOD'] == "POST")
{
// er is op de verstuur knop gedrukt
// variabele $sError aanmaken voor het opslaan v.d. errors
$sError = "";
// veld 'tabel' is leeg
if(empty($_POST['tabel'])) {
$sError .= "Je hebt geen tabelnaam ingevuld!<br />";
}
// veld 'order' is leeg
if(empty($_POST['order'])) {
$sError .= "Je hebt niet ingevuld waarop geordend moet worden!<br />";
}
// veld 'limit_begin' is leeg of geen getal
{
$sError .= "Je hebt geen begin voor de limit ingesteld!<br />";
}
// veld 'limit_eind' is leeg of geen getal
{
$sError .= "Je hebt geen eind voor de limit ingesteld!<br />";
}
// veld 'ascdesc' is leeg
if(empty($_POST['ascdesc'])) {
$sError .= "Je hebt de manier niet geselecteerd waarop geordend moet worden!<br />";
}
// onze velden ophalen
for($i = 0; $i < $_SESSION['aantal']; $i++)
{
// veld 'veld_$i' is leeg
if(empty($_POST['veld_'.$i])) {
$sError .= "Je hebt veldnaam ".($i+1)." niet ingevuld!<br />";
}
}
// er is een error
{
// error weergeven met "Keer terug-link"
echo "<a href='javascript:history.go(-1);'>Keer terug</a>."; } else
{
// geen error
// onze veldnamen in een array zetten
for($i = 0; $i < $_SESSION['aantal']; $i++)
{
$aVelden[] = $_POST['veld_'.$i];
}
// onze tabel naam in een sessie zetten
$_SESSION['tabel'] = htmlEntities($_POST['tabel'], ENT_QUOTES
); // velden in een sessie zetten
// let op de implode, deze zet een ", " tussen alle waarden v.d. array
// onze order in een sessie zetten
$_SESSION['order'] = htmlEntities($_POST['order'], ENT_QUOTES
); // onze ASC of DESC in een sessie zetten
// limit begin in de sessie zetten
$_SESSION['limit']['begin'] = htmlEntities($_POST['limit_begin'], ENT_QUOTES
); // limit einde in de sessie zetten
$_SESSION['limit']['eind'] = htmlEntities($_POST['limit_eind'], ENT_QUOTES
); // pagina refreshen
header("Location: ".$_SERVER['REQUEST_URI']); }
} else
{
// het formulier voor de waardes in te vullen
?>
<form method="post" action="<?=$_SERVER['REQUEST_URI'];?>">
<table border="1">
<tr>
<th colspan="2">
Velden met een * zijn verplicht!
</th>
</tr>
<tr>
<td width="200">
Tabelnaam: *
</td>
<td width="600">
<input type="text" name="tabel" value="" />
</td>
</tr>
<tr>
<td width="200">
Ordenen op: *
</td>
<td width="600">
<input type="text" name="order" value="" />
<select name="ascdesc">
<option value="asc">Oplopend</option>
<option value="desc">Aflopend</option>
</select>
</td>
</tr>
<tr>
<td width="200">
Limit begin: *
</td>
<td width="600">
<input type="text" name="limit_begin" value="" />
</td>
</tr>
<tr>
<td width="200">
Limit eind: *
</td>
<td width="600">
<input type="text" name="limit_eind" value="" />
</td>
</tr>
<?PHP
for($i = 0; $i < $_SESSION['aantal']; $i++)
{
?>
<tr>
<td width="200">
Veldnaam <?=$i+1;?>: *
</td>
<td width="600">
<input type="text" name="veld_<?=$i;?>" value="" />
</td>
</tr>
<?PHP
}
?>
<tr>
<td colspan="2">
<a href="<?=$_SERVER['REQUEST_URI'];?>?action=opnieuw">Opnieuw beginnen</a>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Volgende" />
<input type="reset" name="reset" value="Leeg velden" />
</td>
</tr>
</table>
</form>
<?PHP
}
} else if(IsSet($_SESSION['aantal']) && IsSet($_SESSION['tabel']) && IsSet($_SESSION['velden']) && IsSet($_SESSION['order']) && IsSet($_SESSION['ascdesc']) && IsSet($_SESSION['limit']['begin']) && IsSet($_SESSION['limit']['eind'])) {
// al onze waarden van de sessie zijn geset
// nu gaan we de query maken
// variabele voor de query
$sQuerySelect = "SELECT ".$_SESSION['velden']." FROM ".$_SESSION['tabel']." ORDER BY ".$_SESSION['order']." ".$_SESSION['ascdesc']." LIMIT ".$_SESSION['limit']['begin'].", ".$_SESSION['limit']['eind'];
// query uitvoeren
// ook hier weer "or die()" achter het uitvoeren
// pagina MOET worden
// onze variabele maken voor de output
// die in het bestand moet komen
$sOutput = '<rss version="2.0">'."\n";
$sOutput .= "<channel>\n";
$sOutput .= "<type>".ucFirst($_SESSION['tabel'])."</type>\n"; $sOutput .= "<generator> -= Rss Maker V1 =- </generator>";
// while loop om overal door heen te lopen
{
// explode op ", " in onze sessie 'velden'
$aVelden = explode(", ", $_SESSION['velden']); $sOutput .= "<item>\n";
// for loopje om door de array 'velden' heen te wandelen
for($i = 0; $i < count($aVelden); $i++) {
// output erbij schrijven
$sOutput .= "<".$aVelden[$i].">".$aFetchSelect[$aVelden[$i]]."</".$aVelden[$i].">\n";
}
// item stoppen
$sOutput .= "</item>\n";
}
$sOutput .= "</channel>\n";
$sOutput .= "</rss>";
// einde van de output
// bestand openen om naar te schrijven
if(!$rFile = fopen("files/".$_SESSION['tabel'].".xml", "w+")) {
// bestand kan niet worden geopend
echo "Error!- Kan het bestand niet openen!"; } else
{
// bestand is geopend
// kijken of we de output kunnen schrijven
{
// nee, output kan niet geschreven worden
echo "Error!- Kan de output niet in het bestand schrijven!"; } else
{
// output is succesvol geschreven
echo "De output is succesvol in het bestand geschreven!<br />"; }
}
}
} else
{
// er is een action geset
switch($_GET['action'])
{
// action is "opnieuw"
case "opnieuw":
// functie "opnieuw" uitvoeren
break;
}
}
?>
</body>
</html>