Tabellen sorteren

Status
Niet open voor verdere reacties.

comass

Gebruiker
Lid geworden
19 dec 2000
Berichten
456
Hoi,

Ik heb deze pagina gemaakt, voor het uitlezen van de dbase.

Code:
<head>
<style>
p {font-family: Verdana, Arial; font-size:11px} 
</style>
</head>
<body>
<?php 
include_once ("verbinding.php");

if ($del) { 
$query = mysql_query("SELECT * FROM boekingsformulier"); 
while ($list = mysql_fetch_object($query)) { 
$sql = "DELETE FROM boekingsformulier WHERE id='$del'"; } 
   // Voer SQL uit 
      mysql_query($sql) or die(mysql_error());        
 }
?>
<table border="0" width="100%">
        <tr BGCOLOR="#CCCCCC">
        <td width="42">
	   <p><font size="2">Soort</font></p>
        </td>
        <td width="8">
            <p><font size="2">Accomodatie</font></p>
        </td>
        <td width="11">
            <p><font size="2">Aankomst</font></p>
        </td>
        <td width="20">
            <p><font size="2">Vertrek</font></p>
        </td>
        <td width="36">
            <p><font size="2">Naam</font></p>
        </td>
        <td width="36">
            <p><font size="2">Adres</font></p>
        </td>
        <td width="71">
            <p><font size="2">Postcode</font></p>
        </td>
        <td width="76">
            <p><font size="2">Woonplaats</font></p>
        </td>
        <td width="38">
            <p><font size="2">Land</font> </p>
        </td>
        <td width="66">
            <p><font size="2">Telefoon</font></p>
        </td>
        <td width="46">
            <p><font size="2">E-mail</font></p>
        </td>
                <td width="50">
          <p><font size="2">Volws.</font></p>
        </td>
                <td width="43">
          <p><font size="2">Kind.</font></p>
        </td>
        <td width="76">
            <p><font size="2">Opmerking:</font></p>
        </td>
    </tr>
<?
$query = mysql_query("SELECT * FROM boekingsformulier"); 

$resultaat = mysql_query($query); 
//$aantal = mysql_num_rows($resultaat); 
$color_2 = ""; 
$color_1 = "#F9F5F5";

while ($list = mysql_fetch_object($query)) { 
    
if (!isset($color) || $color == $color_2){ 

$color = $color_1; 
} 
else{ 
$color = $color_2; 
}
   
?>
    <tr>
         <td bgcolor="<? echo $color;?>" width="42" align="left" valign="top">
            <p><? echo "$list->subject";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="8" align="left" valign="top">
            <p><? echo "$list->accomodatie";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="11" align="left" valign="top">
            <p><? echo "$list->aankomst";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="20" align="left" valign="top">
            <p><? echo "$list->vertrek";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="36" align="left" valign="top">
            <p><? echo "$list->aanhef";?> <? echo "$list->voorletter";?> <? echo "$list->achternaam";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="36" align="left" valign="top">
            <p><? echo "$list->adres";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="71" align="left" valign="top">
            <p><? echo "$list->postcode";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="76" align="left" valign="top">
            <p><? echo "$list->woonplaats";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="38" align="left" valign="top">
            <p><? echo "$list->land";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="66" align="left" valign="top">
            <p><? echo "$list->telefoon";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="46" align="left" valign="top">
            <p><? echo "$list->email";?></p>
        </td>
                <td bgcolor="<? echo $color;?>" width="50" align="left" valign="top">
            <p><? echo "$list->volwassenen";?></p>
        </td>
                <td bgcolor="<? echo $color;?>" width="43" align="left" valign="top">
            <p><? echo "$list->kinderen";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="76" align="left" valign="top">
            <p><? echo "$list->opmerking";?></p>
        </td>
    </tr>
    <?
} 
    ?>
</table> 
</body>

Nu wil kunnen gaan sorteren op:
  1. Soort
  2. Accomodatie
  3. Aankomst
  4. Vertrek
  5. Land

Wie kan mij helpen hoe dit moet?
 
Je kunt sorteren in SQL met behulp van het Order By statement:
http://www.w3schools.com/sql/sql_orderby.asp

Het beste kun je in je table headers een link opnemen om te sorteren, met een $_GET variabele erin, en als die geset is, aan de query een extra stukje plakken om te sorteren (het makkelijkst is misschien om standaard ook ergens op te sorteren, voor het gemak)

Dat ziet er dan ongeveer zo uit:

PHP:
$order_field = 'id';
if ( isset ( $_GET['orderby'] ) && in_array ( $_GET['orderby'], array ( 'land', 'soort', 'accomodatie', 'elk_ander_veld_waar_je_op_wilt_sorteren' ) ) {
  $order_field = $_GET['orderby'];
}
$order_type = 'ASC';
if ( isset ( $_GET['ordertype'] ) && $_GET['ordertype'] == 'ASC' || $_GET['ordertype'] == 'DESC' ) {
  $order_type = $_GET['ordertype'];
}

$sql = "SELECT * FROM boekingsformulier ORDER BY `" . $order_field . "` " . $order_type;

Let hierbij wel HEEL goed op dat je geen SQL injectie toestaat (zorg dat de gebruiker geldige informatie op MOET geven; want met bepaalde commando's kan hij anders je database beschadigen)

Als je er niet uit komt, moet je maar even laten zien wat je geprobeerd hebt :)
 
Hoi,

Ik heb hem zo gemaakt.

PHP:
<?php 
include_once ("verbinding.php");

if ($del) { 
$query = mysql_query("SELECT * FROM Nederlands"); 
while ($list = mysql_fetch_object($query)) { 
$sql = "DELETE FROM Nederlands WHERE id='$del'"; } 
   // Voer SQL uit 
      mysql_query($sql) or die(mysql_error());        
$order_field = 'id';
if ( isset ( $_GET['orderby'] ) && in_array ( $_GET['orderby'], array ( 'land', 'soort', 'accomodatie', 'aankomst', 'vertrek' ) ) {
  $order_field = $_GET['orderby'];
}
$order_type = 'ASC';
if ( isset ( $_GET['ordertype'] ) && $_GET['ordertype'] == 'ASC' || $_GET['ordertype'] == 'DESC' ) {
  $order_type = $_GET['ordertype'];
}
 
$sql = "SELECT * FROM boekingsformulier ORDER BY `" . $order_field . "` " . $order_type; }
?>

Maar krijg dan in deze regel een foutmelding:

PHP:
if ( isset ( $_GET['orderby'] ) && in_array ( $_GET['orderby'], array ( 'land', 'soort', 'accomodatie', 'aankomst', 'vertrek' ) ) {

Verder geef je aan dat ik met $_GET variabele in de tabel moet plaatsen, maar dit zegt mij even niets, hoe doe moet ik dit doen en waar?
Dit heb ik nu in de tabel staan:
PHP:
<? echo "$list->accomodatie";?>
 
Laatst bewerkt door een moderator:
Je mist een haakje aan het eind bij je foute regel :)

(In het vervolg is het handig als je er ook bij zet welke fout je krijgt, dat zoekt voor ons makkelijker ;))

Om een $_GET variabele mee te geven, moet je de url wijzigen, want daar worden ze uit gehaald.

Om een voorbeeld te geven; als je naar deze url (jouw topic) gaat:

www.helpmij.nl/forum/showthread.php?p=2679961

Dan wordt in PHP de variabele $_GET['p'] gezet met de waarde 2679961

Als je dus bijvoorbeeld de variabele $_GET['orderfield'] wilt zetten met als waarde 'accomodatie', en $_GET['orderby'] op 'DESC', dan moet je een link maken waar de gebruiker op kan klikken, op deze manier:

HTML:
<a href="www.jesite.nl/pagina.php?orderfield=accomodatie&orderby=DESC">Klik hier om te sorteren op accomodatie, aflopend.</a>

Je kunt zoveel $_GET variabelen zetten als je wilt; maar houd er rekening mee dat je URL maar ongeveer 255 tekens mag zijn :)
 
Hoi,

Ik krijg geen foutmeldingen meer :-)

Maar het sorteren lukt nog niet.

Dit heb ik er van gemaakt.
PHP:
$order_field = 'id';
if ( isset ( $_GET['orderby'] ) && in_array ( $_GET['orderby'], array ( 'land', 'subject', 'accomodatie', 'aankomst', 'vertrek' ) )) {

  $order_field = $_GET['orderby'];
}
$order_type = 'ASC';
if ( isset ( $_GET['ordertype'] ) && $_GET['ordertype'] == 'ASC' || $_GET['ordertype'] == 'DESC' ) {
  $order_type = $_GET['ordertype'];
}
 
$sql = "SELECT * FROM Nederlands ORDER BY `" . $order_field . "` " . $order_type; }

Boven mijn tabel heb ik nu staan:

HTML:
</td>
        <td width="42" align="center" valign="middle">
            <p><a href="http://www.domein.nl/test/forms/test_forms.php?orderfield=subject&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.domein.nl/test/forms/test_forms.php?orderfield=subject&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a></p>
        </td>
        <td width="8" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=accomodatie&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=accomodatie&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a></p>
        </td>
        <td width="11" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=aankomst&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=accomodatie&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a></p>
        </td>
 
Laatst bewerkt:
Je gebruikt de $_GET variabelen "orderfield" en "orderby". Dus:
PHP:
$order_field = 'id';
if ( isset ( $_GET['orderfield'] ) && in_array ( $_GET['orderfield'], array ( 'land', 'subject', 'accomodatie', 'aankomst', 'vertrek' ) )) {

  $order_field = $_GET['orderfield'];
}
$order_type = 'ASC';
if ( isset ( $_GET['orderby'] ) && $_GET['orderby'] == 'ASC' || $_GET['orderby'] == 'DESC' ) {
  $order_type = $_GET['orderby'];
}
 
$sql = "SELECT * FROM Nederlands ORDER BY `" . $order_field . "` " . $order_type; }
 
Laatst bewerkt:
Hoi,

Ook als ik dit verander, verandert er niets.

Code:
$order_field = 'id';
if ( isset ( $_GET['orderfield'] ) && in_array ( $_GET['orderfield'], array ( 'land', 'subject', 'accomodatie', 'aankomst', 'vertrek' ) )) {
$order_field = $_GET['orderfield'];
}
$order_type = 'ASC';
 if ( isset ( $_GET['orderby'] ) && $_GET['orderby'] == 'ASC' || $_GET['orderby'] == 'DESC' ) {
$order_type = $_GET['orderby'];
}
$sql = "SELECT * FROM Nederlands ORDER BY `" . $order_field . "` " . $order_type;

Dit is mijn pagina

PHP:
<head>
<style>
p {font-family: Verdana, Arial; font-size:11px} 
</style>
</head>
<body>
<?php 
include_once ("verbinding.php");

if ($del) { 
$query = mysql_query("SELECT * FROM Nederlands"); 
while ($list = mysql_fetch_object($query)) { 
$sql = "DELETE FROM Nederlands WHERE id='$del'"; } 
   // Voer SQL uit 
      mysql_query($sql) or die(mysql_error()); 
          $order_field = 'id';
      if ( isset ( $_GET['orderfield'] ) && in_array ( $_GET['orderfield'], array ( 'land', 'subject', 'accomodatie', 'aankomst', 'vertrek' ) )) {
      $order_field = $_GET['orderfield'];
      }

      $order_type = 'ASC';
      if ( isset ( $_GET['orderby'] ) && $_GET['orderby'] == 'ASC' || $_GET['orderby'] == 'DESC' ) {
      $order_type = $_GET['orderby'];
      }
      $sql = "SELECT * FROM Nederlands ORDER BY `" . $order_field . "` " . $order_type; }   
          
?>
<table border="0" width="99%" align="center">
        <tr BGCOLOR="#CCCCCC">
        <td align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="42" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=subject&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=subject&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a></p>
        </td>
        <td width="8" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=accomodatie&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=accomodatie&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a></p>
        </td>
        <td width="11" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=aankomst&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=accomodatie&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a></p>
        </td>
        <td width="20" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=aankomst&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?orderfield=vertrek&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a>&nbsp;</p>
        </td>
        <td width="36" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="36" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="71" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="76" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="38" align="center" valign="middle">
            <p><a href="http://www.comass.nl/test/forms/test_forms.php?order_field=land&orderby=ASC"><img src="plus.gif" width="15" height="15" border="0" alt="Oplopend sorteren"></a> 
            <a href="http://www.comass.nl/test/forms/test_forms.php?order_field=land&orderby=DESC"><img src="min.gif" width="15" height="15" border="0" alt="Aflopend sorteren"></a>&nbsp;</p>
        </td>
        <td width="66" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="46" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
                <td width="50" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
                <td width="43" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
        <td width="76" align="center" valign="middle">
            <p>&nbsp;</p>
        </td>
    </tr>
        <tr BGCOLOR="#CCCCCC">
        <td>
            <p>&nbsp;<img src="flag_nl.gif" width="16" height="10" border="0"></p>
        </td>
        <td width="42">
	   <p><font size="2">Soort</font></p>
        </td>
        <td width="8">
            <p><font size="2">Accomodatie</font></p>
        </td>
        <td width="11">
            <p><font size="2">Aankomst</font></p>
        </td>
        <td width="20">
            <p><font size="2">Vertrek</font></p>
        </td>
        <td width="36">
            <p><font size="2">Naam</font></p>
        </td>
        <td width="36">
            <p><font size="2">Adres</font></p>
        </td>
        <td width="71">
            <p><font size="2">Postcode</font></p>
        </td>
        <td width="76">
            <p><font size="2">Woonplaats</font></p>
        </td>
        <td width="38">
            <p><font size="2">Land</font> </p>
        </td>
        <td width="66">
            <p><font size="2">Telefoon</font></p>
        </td>
        <td width="46">
            <p><font size="2">E-mail</font></p>
        </td>
                <td width="50">
          <p><font size="2">Volws.</font></p>
        </td>
                <td width="43">
          <p><font size="2">Kind.</font></p>
        </td>
        <td width="76">
            <p><font size="2">Opmerking:</font></p>
        </td>
    </tr>
<?
$query = mysql_query("SELECT * FROM Nederlands"); 

$resultaat = mysql_query($query); 
//$aantal = mysql_num_rows($resultaat); 
$color_2 = ""; 
$color_1 = "#F9F5F5";

while ($list = mysql_fetch_object($query)) { 
    
if (!isset($color) || $color == $color_2){ 

$color = $color_1; 
} 
else{ 
$color = $color_2; 
}
?>
    <tr>
         <td bgcolor="<? echo $color;?>" width="22" align="center" valign="middle">
            <p> <? if ($list->subject=='boeking') { ?><img src="booking.gif" width="20" height="20" border="0" align="absmiddle" alt="Boeking"> <? } else { ?><img src="info.gif" width="20" height="20" border="0" align="absmiddle" alt="Informatie"><? } ?></p>
        </td>
         <td bgcolor="<? echo $color;?>" width="42" align="left" valign="top">
            <p><? echo "$list->subject";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="8" align="left" valign="top">
            <p><? echo "$list->accomodatie";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="11" align="left" valign="top">
            <p><? echo "$list->aankomst";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="20" align="left" valign="top">
            <p><? echo "$list->vertrek";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="36" align="left" valign="top">
            <p><? echo "$list->aanhef";?> <? echo "$list->voorletter";?> <? echo "$list->achternaam";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="36" align="left" valign="top">
            <p><? echo "$list->adres";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="71" align="left" valign="top">
            <p><? echo "$list->postcode";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="76" align="left" valign="top">
            <p><? echo "$list->woonplaats";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="38" align="left" valign="top">
            <p><? echo "$list->land";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="66" align="left" valign="top">
            <p><? echo "$list->telefoon";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="46" align="left" valign="top">
            <p><? echo "$list->email";?></p>
        </td>
                <td bgcolor="<? echo $color;?>" width="50" align="left" valign="top">
            <p><? echo "$list->volwassenen";?></p>
        </td>
                <td bgcolor="<? echo $color;?>" width="43" align="left" valign="top">
            <p><? echo "$list->kinderen";?></p>
        </td>
        <td bgcolor="<? echo $color;?>" width="76" align="left" valign="top">
            <p><? echo "$list->opmerking";?></p>
        </td>
    </tr>
    <?
} 
    ?>
</table> 
</body>
 
Je maakt nu wel een $sql aan met daarin de query, maar vervolgens voer je later in het programma gewoon een andere query uit, zónder order by, en die haalt de resultaten op...

Zorg dus dat je onderin de gemaakt query met de order by uitvoert, en niet zomaar een nieuwe erin stopt :)
 
Hoi,

Als ik het goed begrijp maak ik hier dus ergens een fout.
Maar wat doe ik fout?

Code:
<?php 
include_once ("verbinding.php");

if ($del) { 
$query = mysql_query("SELECT * FROM Nederlands"); 
while ($list = mysql_fetch_object($query)) { 
$sql = "DELETE FROM Nederlands WHERE id='$del'"; } 
   // Voer SQL uit 
      mysql_query($sql) or die(mysql_error()); 
$order_field = 'id';
if ( isset ( $_GET['orderby'] ) && in_array ( $_GET['orderby'], array ( 'land', 'subject', 'accomodatie', 'aankomst', 'vertrek' ) )) {

  $order_field = $_GET['orderby'];
}
$order_type = 'ASC';
if ( isset ( $_GET['ordertype'] ) && $_GET['ordertype'] == 'ASC' || $_GET['ordertype'] == 'DESC' ) {
  $order_type = $_GET['ordertype'];
}
 
$sql = "SELECT * FROM Nederlands ORDER BY `" . $order_field . "` " . $order_type; }
             
?>
 
Je zet de query, die de resultaten in de juiste volgorde ophaalt, in de variabele $sql.

Maar vervolgens doe je daar niks meer mee, en later in het programma haal je de resultaten ineens op met een andere query ->

PHP:
$query = mysql_query("SELECT * FROM Nederlands");
$resultaat = mysql_query($query);

Daar moet je dus de $sql gebruiken ipv die nieuwe:

PHP:
$resultaat = mysql_query ( $sql );

Probeer dat eens? :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan