Ver Mensaje Individual
  #8 (permalink)  
Antiguo 26/04/2006, 09:51
sarverok007
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
De acuerdo Asunto arreglado

Bien, asunto arreglado, tu idea era buena Notwen pero no me servia, por que yo en mi tabla si le doy a los encabezados reorganizo todo denuevo segun el campo clickeado de la tabla de manera ASC o DESC, y entonces la paginas ya no necesariamente han de estar en el mismo orden, pero ya esta solucionado.
Lo que hago es que cuando en el sevidor se ejecuta el codigo PHP creo una variable de session 'listacheked' donde guardo los checkbox que hay cargados al cargar la pagina, entonces si borro alguno no se pasara por post a la siguiente pagina, con lo que aplicando el operador de diferencia array_diff_assoc obteno los campos que en un principio estaban checked en esa pagina y ya no lo estan, asi que me voy a la variable de session 'listadoCanciones' y simplemente hago un unset de los campos que no deverian estar, despues cargo en la variable 'listadoCanciones' los campos que he pasado por post y listo. No me importa si he cambiado el orden de mostrar los elementos al cargar la nueva pagina o si el orden de los elementos en la tabla que el usuario ve sigue igual. Funciona perfecto, eso si he desabilitado la funcion F5 de recargar la pagina mientras se insertan datos en el formulario.
Y aqui hos dejo el codigo (RESUMIDO) por si alguno tiene el mismo problema:
FixTextFields y SafeStripSlashes son funciones mias para tratar los caracteres raros.
Para tratar las sesiones al principio de la pagina:
Código PHP:
 //Principio del todo de la pagina, antes enviar los encabezados
session_start();
if(isset(
$_SESSION['listadoCanciones'])){ //Si existe ...
    
$listadoCanciones $_SESSION['listadoCanciones'];
    if(isset(
$_POST['listadoCanciones']) && !empty($_POST['listadoCanciones'])){
        
$temp $_POST['listadoCanciones'];
        if(isset(
$_SESSION['listachecked']) && !empty($_SESSION['listachecked'])){
            
$array_nochecked array_diff_assoc($_SESSION['listachecked'], $temp); //Escogemos las op. que estaban checked y ya no estan
            
foreach($array_nochecked as $key => $valor){
                 if(isset(
$listadoCanciones[$valor]))
                    unset(
$listadoCanciones[$valor]); //Eliminamos del listado las canciones des-checkeadas
            
}
            unset(
$array_nochecked);
            unset(
$_SESSION['listachecked']);
        }
        foreach(
$temp as $key => $valor)
            
$listadoCanciones[FixTextFields(getid3_lib::SafeStripSlashes($valor))] = FixTextFields(getid3_lib::SafeStripSlashes($valor));
        unset(
$temp);
    }else{ 
//Si no hay variables pasadas por post ... (no hay variables checkeadas en la ultima pagina
        
if(isset($_SESSION['listachecked']) && !empty($_SESSION['listachecked'])){
            
$array_nochecked $_SESSION['listachecked']; //Escogemos todas las op. que estaban checked
            
foreach($array_nochecked as $key => $valor){
                 if(isset(
$listadoCanciones[$valor]))
                    unset(
$listadoCanciones[$valor]); //Eliminamos del listado las canciones des-checkeadas
            
}
            unset(
$array_nochecked);
            unset(
$_SESSION['listachecked']);
        }
    }
    
$_SESSION['listadoCanciones'] = $listadoCanciones;
}else{ 
//Si no existe no hay canciones chekeadas previamente ...
    
if(isset($_POST['listadoCanciones']) && !empty($_POST['listadoCanciones'])){
        
$temp $_POST['listadoCanciones'];
        foreach(
$temp as $key => $valor)
            
$listadoCanciones[FixTextFields(getid3_lib::SafeStripSlashes($valor))] = FixTextFields(getid3_lib::SafeStripSlashes($valor));
        unset(
$temp);
    }
    
$_SESSION['listadoCanciones'] = $listadoCanciones;
}
// .... que si includes, scripts, body ... que si consulta SQL, que si otras cosas que obviamos
echo '<table .....>';
<
thead>
//encabezado que tmb pasamos de el
echo '</thead>';
echo 
'<tbody>'//Entre <tbody> y </tbody> ponemos los datos de la tabla ordenada
    
$listachecked = array();
  for (
$i=0$row = @mysql_fetch_array($result);$i++){ //Para cada fila devuelta de la consulta ... 
echo '<tr>';
echo 
'<td>';
echo 
'<input type="checkbox" name="listadoCanciones[]" value="'.urlencode($row['filepath'].'/').urlencode($row['filename']).'" title="'.FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename'])).'" onfocus="this.style.border=\'1px solid #f00\'" onblur="this.style.border=\'1px solid #bbb\'"'.((isset($listadoCanciones[FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename']))])) ? '  checked' '').'>';
            if(isset(
$listadoCanciones[FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename']))]))
                
$listachecked[FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename']))] = FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename']));
            echo 
'</span></td>';

// ... más columnas dentro de la misma fila ... y esas cosas ...
echo '</tr>';
//Cerramos el hermoso for que hace las filas
  
if(!empty($listachecked)) $_SESSION['listachecked'] = $listachecked;
echo 
'<tr><td colspan="7">
 //aqui van los botones o lo que sea para enviar el formulario
echo '
</tr></td>';
echo '
</tbody>';
//AQUI iria otra tablita donde meteriamos la funcion para paginar los resultados tal y como es en google << 1 2 3 4 .... >> que nos saltamos
echo '
</form></table>;
// .. que si mysql_free_result, que si mysql_close, que si mas funciones, bla bla bla que tmb obviamos y ya esta :-) 
Gracias por la colaboracion y espero que os sirva a alguno mas de ayuda
__________________
SaRvErOk :ojotes: