Hallo
Ik ben nieuw, al wat ouder dan de gemiddelde bezoeker en hopelijk doe ik hier niets fout.... Ik ben net begonnen met php en sql en probeer bovenstaand script uit. Zie http://www.phphulp.nl/php/scripts/1/424/
Het volgende stukje heb ik veranderd:
$sql = "SELECT * FROM $tb_name ORDER BY $order_by order_type";
Het is nu zo:
$sql = "SELECT * FROM $tb_name WHERE van <= '$jaartal' AND tot >= '$jaartal' ORDER BY $order_by $order_type";
van en tot zijn mijn kolomnamen.
Dat werkt goed als ik in plaats van $jaartal een echt jaartal invul bijvoorbeeld 1870. $jaartal komt uit een formulierveld. De records worden wel opgehaald, maar bij het sorteren verdwijnt het resultaat.
Het lijkt te maken te hebben met de plaats waar ik het volgende in het script van Jan Koehoorn zet:
als je variabelen gebruikt in een query of iets anders tussen quotes, is het de bedoeling dat je die overstap laat meelezen met een .
in dit opzicht is het dus:
<?php
$sql = "SELECT * FROM $tb_name WHERE van <= '".$jaartal."' AND tot >= '".$jaartal."' ORDER BY ".$order_by." ".$order_type;
?>
De . geeft geen verbetering. Maar met error_reporting krijg ik:
Notice: Undefined index: id in /home/virtual/site123/fst/var/www/html/phptest/sorteer.php on line 77
Notice: Undefined index: id in /home/virtual/site123/fst/var/www/html/phptest/sorteer.php on line 78
En als ik daarna ga sorteren dan krijg ik een extra melding:
Notice: Undefined index: jaartal in /home/virtual/site123/fst/var/www/html/phptest/sorteer.php on line 61
Hierbij de code van het originele script zoals geschreven door Jan Koevoets.
Zonder mijn eigen select query.
Ook het orginele script blijkt de "Notice: Undefined index: id in" foutmelding te geven. Als leek heb ik hier geen kijk op.
<?php
require ("../../cgi-bin/login_inc_kaal.php");
error_reporting(E_ALL);
ini_set('display_errors',1);
$db_name = "dbhe";
$tb_name = "raadsleden";
function display_table ($db_name, $tb_name) {
# haal de namen en het aantal velden op
$fields = mysql_list_fields ($db_name, $tb_name);
$columns = mysql_num_fields ($fields);
# als er op een kolomkop geklikt is, is de naam van die kolom
# beschikbaar via $_GET
if (isset ($_GET['order_by'])) {
$order_by = $_GET['order_by'];
}
else {
$order_by = 'id';
}
if (isset ($_GET['order_type']) && !isset ($_GET['action'])) {
$order_type = $_GET['order_type'];
if ($order_type == 'ASC') {
$order_type = 'DESC';
}
else {
$order_type = 'ASC';
}
}
else {
$order_type = 'ASC';
}
echo '<table>';
echo '<tr>';
echo '<th>edit</th>';
echo '<th>delete</th>';
# de titelrij van de tabel in elkaar zetten
# zorgen dat de kolomkoppen aanklikbaar zijn
for ($i = 0; $i < $columns; $i++) {
echo "\n";
echo '<th>';
$fieldname = mysql_field_name ($fields, $i) ;
echo "<a href=\"?order_by=$fieldname&order_type=$order_type\">$fieldname</a>";
echo '</th>';
}
$sql = "SELECT *
FROM $tb_name
ORDER BY $order_by $order_type";
$res = mysql_query ($sql) or die (mysql_error ());
while ($row = mysql_fetch_array ($res)) {
echo "\n";
echo '<tr>';
# via deze links kun je de pagina uitbreiden met delete of edit
echo "<td><a href=\"?action=edit&id=$row[id]&order_by=$order_by\">edit</a></td>";
echo "<td><a href=\"?action=delete&id=$row[id]&order_by=$order_by\">delete</a></td>";
for ($i = 0; $i < $columns; $i++) {
echo '<td>';
echo $row[$i];
echo '</td>';
}
echo '</tr>';
}
echo '</tr>';
echo '</table>';
}
display_table ("dbhe", "raadsleden");
?>