Ik heb een php-pagina geschreven die initieel wordt aangeroepen met een link en vervolgens naar zichzelf verwijst om de gebruiker de mogelijkheid te geven een tabel te sorteren op een zelfgekozen kenmerk. Hiervoor gebruik ik een variabele $Sortby die bij het lezen van de database wordt gebruikt als sorteringscriterium. Ik krijg echter telkens foutmeldingen. Zit er een fout in het script of maak ik een denkfout (en kan het dus niet wat ik wil). Hieronder het script:
<HTML>
<HEAD>
</HEAD>
<BODY>
Sorteer het repertoire op <SELECT NAME = "Sortby">
<FORM ACTION = "repertoire.php" METHOD = GET>
<OPTION VALUE = "">kies een optie</OPTION>
<OPTION VALUE = "pagina">paginanummer</OPTION>
<OPTION VALUE = "titel">titel</OPTION>
<OPTION VALUE = "componist">componist/arrangeur</OPTION>
<OPTION VALUE = "project">project</OPTION>
</SELECT>
<INPUT TYPE = SUBMIT NAME = "SUBMIT" VALUE = "Verzenden!">
<BR><BR>
<table border='0' cellpadding='0' cellspacing='10' style='border-collapse: collapse' bordercolor='#111111' width='100%'>
<tr>
<th width='5%' bgcolor='#FFFFFF' align='left'><i><b><font face='Arial' size='2'>Naam</font></b></i></th>
<th width='5%' bgcolor='#FFFFFF' align='left'><i><b><font face='Arial' size='2'>Naam</font></b></i></th>
<th width='50%' bgcolor='#FFFFFF' align='left'><i><b><font face='Arial' size='2'>Naam</font></b></i></th>
<th width='20%' bgcolor='#FFFFFF' align='left'><i><b><font face='Arial' size='2'>Telefoon</font></b></i></th>
<th width='20%' bgcolor='#FFFFFF' align='left'><i><b><font face='Arial' size='2'>
E-mailadres</font></b></i></th>
</tr>
<?php
require ("../db_access.php");//haalt gebruikersgegevens voor de database op
$db = mysql_connect($Host, $Gebruiker, $Wachtwoord);
# opent de verbinding
mysql_select_db($DBnaam, $db);
#kiest de database
$sql = "SELECT * FROM repertoire ORDER BY $Sortby";
$result = mysql_query($sql);
#voert de query uit
while ($row = mysql_fetch_array($result))
echo ("<td>$row[jaar]</td><td> $row[pagina]</td><td> $row[titel]</td><td> $row[componist] </td><td> $row[project]</td>");
?>
</BODY>
</HTML>
Voor de volledigheid nog even de foutmelding:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/w/wfnet.nl/HTML/repertoire.php on line 35
Voor de volledigheid nog even de foutmelding:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/w/wfnet.nl/HTML/repertoire.php on line 35
Als Sortby leeg is geeft hij een error dus probeer dit:
<?php
#kiest de database
if($Sortby==""){
$Sortby="titel";
}
$sql = "SELECT * FROM repertoire ORDER BY `$Sortby`";
?>
Dank Bram! Dit werkt. Nu zit ik alleen nog met het probleem dat, als je een keuze maakt voor een sorteercriterium, dit niet overgenomen wordt in het script (althans, ik krijg geen nieuw gesorteerde output). Ik blijk dus twee problemen te hebben...
Het formulier was wel een rommeltje! Dat krijg je als je snel iets wil maken. Toch doet het script nog niet wat ik wil. De sorteervolgorde blijft hangen op de waarde die ingesteld wordt indien $Sortby leeg is, onafhankelijk van de keuze die gemaakt wordt. De pagina repertoire.php ziet er nu als volgt uit:
<HTML>
<HEAD>
</HEAD>
<BODY>
<FORM ACTION = "repertoire.php" METHOD = "GET">
Sorteer het repertoire op <SELECT NAME = "Sortby">
<OPTION VALUE = "titel">kies een optie</OPTION>
<OPTION VALUE = "pagina">paginanummer</OPTION>
<OPTION VALUE = "titel">titel</OPTION>
<OPTION VALUE = "componist">componist/arrangeur</OPTION>
<OPTION VALUE = "project">project</OPTION>
</SELECT>
<INPUT TYPE = "SUBMIT" VALUE = "Verzenden!">
</FORM>
<BR><BR>
<table border='0' cellpadding='0' cellspacing='10' style='border-collapse: collapse'
require ("../db_access.php");//haalt gebruikersgegevens voor de database op
$db = mysql_connect($Host, $Gebruiker, $Wachtwoord);
# opent de verbinding
mysql_select_db($DBnaam, $db);
#kiest de database
if($Sortby==""){
$Sortby="titel";
}
$sql = "SELECT * FROM repertoire ORDER BY '$Sortby'";
$result = mysql_query($sql);
#voert de query uit
while ($row = mysql_fetch_array($result))
echo ("<tr><td>$row[jaar]</td><td> $row[pagina]</td><td> $row[titel]</td><td>
Heb al van alles geprobeerd, maar niets lukt. De waarde uit het keuzemenu wordt overigens wel gewoon weergegeven als repertoire.php&Sortby=project (bijvoorbeeld). Wie weet raad??
require ("../db_access.php");//haalt gebruikersgegevens voor de database op
$db = mysql_connect($Host, $Gebruiker, $Wachtwoord);
# opent de verbinding
mysql_select_db($DBnaam, $db);
#kiest de database
?>
->
<?php
require ("../db_access.php");//haalt gebruikersgegevens voor de database op
$db = mysql_connect($Host, $Gebruiker, $Wachtwoord);
# opent de verbinding
mysql_select_db($DBnaam, $db);
#kiest de database
$Sortby = $_POST['Sorby'];
?>
require ("../db_access.php");//haalt gebruikersgegevens voor de database op
$db = mysql_connect($Host, $Gebruiker, $Wachtwoord);
# opent de verbinding
mysql_select_db($DBnaam, $db);
#kiest de database
?>
->
<?php
require ("../db_access.php");//haalt gebruikersgegevens voor de database op
$db = mysql_connect($Host, $Gebruiker, $Wachtwoord);
# opent de verbinding
mysql_select_db($DBnaam, $db);
#kiest de database
$Sortby = $_GET['Sorby'];
?>