Estás cometiendo varios errores simplemente por tratar de agarrar y usar el código, sin entenderlo bien.
El código que te puse yo, funciona por sí sólo. Haz un archivo que tenga sólo eso y ejecútalo. Trata de entender cómo funciona y entonces adáptalo al tuyo.
Tus errores:
Código PHP:
// Valores por defecto y re-seteo de la sesión.
$item = 'item_1';
"item_1" era un valor de ejemplo. Ni siquiera existe en tu caso. En lugar de "item_1" tienes que poner el valor por defecto por el que se debe ordenar.
Código PHP:
$result = "mysql_query('SELECT * FROM producto ORDER BY '.$_SESSION['ultimo_item'].' '.$_SESSION['ultimo_sentido'].'')";
Esto sí no hace falta explicarlo mucho. mysql_query() es una función, no debe ir dentro de la cadena. En mi ejemplo, te mostraba la consulta en pantalla para que veas cómo iba cambiando.
Código PHP:
href='prueba.php?var=$item_1&order=$param'
Otra vez, en tu caso no existe ninguna variable llamada $item_1. En lugar de eso van los nombres de los campos. Y tampoco existe ninguna variable llamada $param, que para eso estamos utilizando la sesión.
- Otro error que estás cometiendo es meter toda la tabla dentro del "while" con lo que generarías tooooda la tabla para cada registro. Hay que sacar la definición de la tabla y la primera fila (con los títulos). Sólo deja dentro del while la fila que se va a construir varias veces.
El código debería quedar algo así:
Código PHP:
<?php
session_start();
include(conexion.php);
$var[0] = 'id';
$var[1] = 'cod_producto';
$var[2] = 'descripcion';
$var[3] = 'precio';
$var[4] = 'exento';
$var[5] = 'unidad_medida';
$var[6] = 'inventariable';
$var[7] = 'observacion';
$var[8] = 'cambio_de_sujeto';
if (isset($_GET['var'])){
$item = $_GET['var']; // Aquí faltaría comprobar si $_GET['var'] tiene un valor permitido.
} else {
// Valores por defecto y re-seteo de la sesión.
$item = 'cod_producto';
$_SESSION['ultimo_item'] = '';
}
if (!isset($_SESSION['ultimo_item']) || $_SESSION['ultimo_item'] != $item) {
// Si es la primera vez que carga la página
// o se está cambiando el item por el que se ordena
$_SESSION['ultimo_item'] = $item;
$_SESSION['ultimo_sentido'] = 'asc';
} else {
// Si se hizo clic en el mismo que ya estaba ordenado antes
// Sólo hay que cambiar el sentido:
if ($_SESSION['ultimo_sentido'] == 'asc') {
$_SESSION['ultimo_sentido'] = 'desc';
} else {
$_SESSION['ultimo_sentido'] = 'asc';
}
}
//-----------------------------------------------------------------------
echo '<table border="0">
<tr>
<td width="100"><a href="prueba.php?var=cod_producto">Codigo Producto</a></td>
<td width="100"><a href="prueba.php?var=descripcion">Descripcion</a></div></td>
<td width="100"><a href="prueba.php?var=precio">Precio</a></td>
<td width="100"><a href="prueba.php?var=exento">Exento</a></td>
<td width="100"><a href="prueba.php?var=unidad_medida">Unidad Medida</a></td>
<td width="100"><a href="prueba.php?var=inventariable">Inventariable</a></td>
<td width="100"><a href="prueba.php?var=observacion">Observacion</a></td>
<td width="100"><a href="prueba.php?var=cambio_de_sujeto">Cambio Sujeto</a></td>
</tr>';
$result = mysql_query('SELECT * FROM producto ORDER BY '.$_SESSION['ultimo_item'].' '.$_SESSION['ultimo_sentido']);
while ($file = mysql_fetch_array($result)){
echo '<tr>
<td width="100">'.$file[1].'</td>
<td width="100">'.$file[2].'</td>
<td width="100">'.$file[3].'</td>
<td width="100">'.$file[4].'</td>
<td width="100">'.$file[5].'</td>
<td width="100">'.$file[6].'</td>
<td width="100">'.$file[7].'</td>
<td width="100">'.$file[8].'</td>
</tr>';
}
echo '</table>';
?>
Saludos,