Duda con jQuery, Ajax, PHP

Iniciado por Arm144, 24 Febrero 2017, 23:08 PM

0 Miembros y 1 Visitante están viendo este tema.

Arm144

Hola buenas tengo la siguiente duda. Necesito realizar una ordenación en orden ascendente o descendente de las columnas de una tabla cargada desde una BD.

Esta ordenación se realiza al pulsar sobre (por ejemplo) columna nombre. la primera vez seria orden ascendente y si volvemos a pulsar descendente.

El problema reside en que no consigo cambiar el valor de la query de ASC a DESC.

Por favor help me haha.

P.D: presento los trozos de código pertinentes.

jQuery:

function ordenacion(ordenacion){
if(tipo=="ASC"){
tipo="DESC";
}else{
tipo="ASC";
}
if(ordenacion=="tdUser"){
ordenar= "order by nombreUsuario "+tipo;
}if(ordenacion=="tdNombre"){
ordenar= "order by nombrePropio "+tipo;
}if(ordenacion=="tdApellidos"){
ordenar= "order by apellidos "+tipo;
}if(ordenacion=="tdDni"){
ordenar="order by DNI "+tipo;
}if(ordenacion=="tdFecha"){
ordenar="order by fechaNacimiento "+tipo;
}
enviarConsulta();
}

function enviarConsulta(){
var dataString=ordenar;
$.ajax({
type: "POST",
url: "colocarTabla.php",
data: {info : dataString},
success: function(data){
$("#mostrarTabla").html(data);
}
});
}


Php:

$ordenar=$_POST['info']??"";
$busqueda="SELECT * FROM  personas ".$ordenar;
$resultado = consulta($busqueda);
echo $busqueda;
$xml="<?xml version=\"1.0\"?>\n";
$xml.="<personas>";
while($dato=$resultado->fetch()){
$xml.= "<persona>";
$xml.= "<nombreUsuario>".$dato['nombreUsuario']."</nombreUsuario>";
$xml.= "<nombrePropio>".$dato['nombrePropio']."</nombrePropio>";
$xml.= "<apellidos>".$dato['apellidos']."</apellidos>";
$xml.= "<DNI>".$dato['DNI']."</DNI>";
$xml.= "<fechaNacimiento>".$dato['fechaNacimiento']."</fechaNacimiento>";
$xml.= "</persona>";
}
$xml.= "</personas>";
$personas=new SimpleXMLElement($xml);
?>

<table>
<tr>
<td><a id='tdUser' onClick="ordenacion('tdUser');">Usuario</a></td>
<td><a id='tdNombre' onClick="ordenacion('tdNombre');">Nombre</a></td>
<td><a id='tdApellidos' onClick="ordenacion('tdApellidos');">Apellidos</a></td>
<td><a id='tdDni' onClick="ordenacion('tdDni');">Dni</a></td>
<td><a id='tdFecha' onClick="ordenacion('tdFecha');">Fecha</a></td>
</tr>
<?php 
foreach ($personas->persona as $fila){
echo "<tr><td>".$fila->nombreUsuario."</td>";
echo "<td>".$fila->nombrePropio."</td>";
echo "<td>".$fila->apellidos."</td>";
echo "<td>".$fila->DNI."</td>";
echo "<td>".$fila->fechaNacimiento."</td></tr>";
}
?>

</table>

cassiani

Hola, no envíes código SQL por Ajax, envía sólo el nombre del campo por el que quieres filtrar y el tipo de ordenación y luego en PHP recoge los parámetros, filtra los y arma tu Query.

Otra cosa, no pases al query lo que viene directamente por post, debes filtrarlos antes.



Herminio0

Mira, yo entendí algo como esto y lo haría así.
HTML:

  <input type="button" value"usuario" data="usuario" clases="ordenarTipo">
<Input type="button" value="nombre" data=nombre" clases="ordenarTipo">


Jquery:

$(".ordenarTipo").Click(function(){
  Var tipo =  $(this).attr("data");
  $.ajax({
  type: "POST",
    url: "colocarTabla.php",
   data: {
      tipo: tipo
    },
   success: function(data){
   $("#mostrarTabla").html(data);
  }
});
});


Y ya en colocarTabla.php solo recoges el parámetro y haces un If dependiendo el valor que traiga:

<?php
$tipo 
$_POST["tipo"];
 If(
$tipo == "usuario"){
   
$consulta SELECT FROM personas ORDER BY nombreUsuario DESC
 
}else if($tipo== "nombre")
  
$consulta SELECT *FROM personas ORDER BY nombrePropio DESC

?>



Ya depende de ti también pasar a la variable tipo el valor y como lo quieres, si ASC O DESC, suerte.