Foros del Web » Programando para Internet » Javascript »

Recorrer solo registros existentes !!!

Estas en el tema de Recorrer solo registros existentes !!! en el foro de Javascript en Foros del Web. Hola gente !!! Les cuento, tengo una funcion que me recorre los codigos de un listado de pedidos, del tipo siguiente/anterior de la siguiente manera: ...
  #1 (permalink)  
Antiguo 17/04/2009, 06:02
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Pregunta Recorrer solo registros existentes !!!

Hola gente !!!

Les cuento, tengo una funcion que me recorre los codigos de un listado de pedidos, del tipo siguiente/anterior de la siguiente manera:

Código:
function siguiente()
{
numero=parseInt(document.form.code.value);
numero++;
document.form.code.value=numero;
}
Lo que encesito hacer es que me recorra los registros que vienen de PHP, pero los que existen ... por ejemplo puedo tener 1, 2, y 4, pero con esa funcion siguiente pasa por el 3 y no muestra nada ya que esta vacio.

Los registros validos los tengo en un array en PHP asi :
Código PHP:
$ppp=mysql_query("select codigo from pedidos");
while(
$pxpx=mysql_fetch_array($ppp)){
$codigos=array($pxpx['codigo']);

Como puedo hacer para recorrer asi con siguiente y anterior, solo los existentes ?

Gracias, Ricardo !!!
__________________
Mail: [email protected]
  #2 (permalink)  
Antiguo 17/04/2009, 06:22
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Recorrer solo registros existentes !!!

No entiendo bien (y tu php parece que sólo almacena un elemento en el array)
  #3 (permalink)  
Antiguo 17/04/2009, 06:30
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Hola Panino!!! Tengo esto y me funciona, pero no logro hacerlo dentro de un for :(

La consulta la modifique :
Código PHP:
$ppp=mysql_query("select codigo from pedidos");
while(
$pxpx=mysql_fetch_array($ppp)){

$codigos[]=$pxpx['codigo']; // ahora si es un array jejeje !!!

Y en javascript puedo escribir lso valores de ese array, pero manualmente
Código:
var registros = new Array();

registros = "<?php echo $codigos[0]?>";
registros1 = "<?php echo $codigos[1]?>";
alert(registros);
alert(registros1);
Como puedo meter eso dentro de un for, para automatizarlo ???,

Saludos, Ricardo !!!
__________________
Mail: [email protected]
  #4 (permalink)  
Antiguo 17/04/2009, 06:40
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Recorrer solo registros existentes !!!

No necesitás bucles. Podés usar arrays:
Código PHP:
<?php 
$vec
=array('uno','dos','tres','cuatro');
?>
<script>
var vec=['<?php echo implode("','",$vec?>'];
alert(vec[0])
alert(vec[3])
</script>
  #5 (permalink)  
Antiguo 17/04/2009, 07:21
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Hola Panino, con tu ayuda puse solucionarlo, y quedo asi por si a alguien le sirve !!!

Código PHP:
$ppp=mysql_query("select codigo from pedidos");
while(
$pxpx=mysql_fetch_array($ppp)){

$codigos[]=$pxpx['codigo'];


Y el javascript que me imprime los datos es asi :

Código:
var vec = new Array();
var vec=['<?php echo implode("','",$codigos)?>'];

largo=vec.length;

for(w=0;w<largo;w++){
alert(vec[w]);
}
Saludos, Ricardo !!!
__________________
Mail: [email protected]
  #6 (permalink)  
Antiguo 17/04/2009, 07:31
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Ahora me surrge una duda, la funcion quedo asi , la del boton siguiente !!!

Código:
function siguiente(){

var vec = new Array();
var vec=['<?php echo implode("','",$codigos)?>'];
largo=vec.length;

for(w=0;w<largo;w++){
document.form.code.value=vec[w];
}
}
Claro el campo code del form toma todos los valores de los registros, por el tema del for, pero, como puedo hacer para que cuando aprete el boton pase al siguiente registro ???

Saludos, Ricardo
__________________
Mail: [email protected]
  #7 (permalink)  
Antiguo 17/04/2009, 07:41
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Recorrer solo registros existentes !!!

Podrías definir una variable global (var actual, por ejemplo) donde almacenarías el índice actual del vector. Luego, anterior sería: vector[actual-1] y siguiente sería vector [actual+1]. Pero convendría que coloques un ejemplo de tu formulario para entender mejor.
  #8 (permalink)  
Antiguo 17/04/2009, 07:59
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Eso mismo es lo que habia pensado, recorrer los indices del vector, pero como se hace eso ?


Asi hago el tema de los anterior/siguiente:
Código PHP:
<table border="0" id="tablita" bordercolor="#FFCC33">
<tr align="left">
<td><input name="b1" src="botones/anterior.png" type="image" value="ant" onclick="anterior()"/></td>
<td><font color="red" size="1"></font>Codigo</td>
<td><input type="text" size="8" name="code" value="<?php echo $_POST['code'?>"></td>
<td><input name="b2" src="botones/siguiente.png" type="image" value="sig" onclick="siguiente()"/></td>
<td><input name="b" id="b" src="botones/buscar.png" type="image" value="Buscar"/></td>
<td><a href="inicio.php"><img src="botones/volver.png" alt="volver" border="0"/></a></td>
</tr>
</table>
Despues el resto del form se basan en consultas php y muestran resultados sobre inputs .
El form en si es largo, y para no pegarlo todo, decime que parte necesitarias ver .
Cuando carga la pagina se ve esa botonera donde pongo el codigo de pedido, y ahi empiezo a recorrer con el siguiente/anterior.

Saludos...
__________________
Mail: [email protected]
  #9 (permalink)  
Antiguo 17/04/2009, 08:10
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Recorrer solo registros existentes !!!

Fijate así (no uses input type image: submiten el formulario)
Código PHP:
<?php 
$vec
=array('uno','dos','tres','cuatro');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<script>
function t(n){return document.getElementById(n)}
var actual=0;
var vec=['<?php echo implode("','",$vec?>'];
onload=function(){
    t('code').value=vec[actual];
}
function ant(){
    actual= vec[actual-1]?actual-1:actual
    t('code').value=vec[actual];
}
function sig(){
    actual= vec[actual+1]?actual+1:actual
    t('code').value=vec[actual];
}
</script>
</head>

<body><form><table border="0" id="tablita" bordercolor="#FFCC33">
<tr align="left">
<td><a href="#" onclick="ant();return false;">&lt;&lt;</a></td>
<td><font color="red" size="1"></font>Codigo</td>
<td><input id="code" type="text" size="8" name="code" value="<?php echo $_POST['code'?>"></td>
<td><a href="#" onclick="sig();return false;">&gt;&gt;</a></td>
</tr>
</table></form>
</body>
</html>
  #10 (permalink)  
Antiguo 17/04/2009, 11:56
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Hola Panino, despues de tanto romperme el coco, logre que ande como yp queria el boton siguiente, si o si tengo que hacer un submit para que me cargue los datos en el form, asique la funcion quedo asi:
Código:
var vec=['<?php echo implode("','",$codigos)?>'];
indice=vec.length;
actual=document.getElementById('code').value;

function sig()
{

for(w=0;w<indice;w++) 
	{
		if(actual==vec[w])
		{
		//alert("El indice es: "+w);
		w++;
		//alert("Siguiente: "+vec[w]);
		document.getElementById('code').value=vec[w];

 		}
	}
}
El de siguiente me anda joya, saltea los registros que no existen, pero ahora me agarra el problema cuando quiero hacer el boton anterior, segun lo que veo es = solo que la w se decrementa asi w--; , pero se me traba el explorador, uso FF3.0.8 y probe con el konqueror de kubuntu y se me tilda cuando apreto el boton de la funcion ant()

Algo esta mal? me parece raro el problema ..

Gracias !!!
__________________
Mail: [email protected]
  #11 (permalink)  
Antiguo 17/04/2009, 11:58
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Aca esta lo que me dice :

Código:
Un script en esta página puede estar ocupado, o puede haber dejado de responder. Puede detener el script ahora, o puede continuar para ver si el script se completa.
Script: http://localhost/gestion/consulta_pedidos.php:315
Saludos !!!
__________________
Mail: [email protected]
  #12 (permalink)  
Antiguo 17/04/2009, 12:06
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Panino, ya lo solucione de esta manera:
Anterior:
Código:
function ant()
{
for(w=0;w<indice;w++) 
	{
		if(actual==vec[w])
		{
		document.getElementById('code').value=vec[w-1];
 		}
	}
}
y Siguiente:
Código:
function ant()
{
for(w=0;w<indice;w++) 
	{
		if(actual==vec[w])
		{
		document.getElementById('code').value=vec[w+1];
 		}
	}
}
Ahora anda joya !!!!!

Te pregunto:
Tenes idea de como hacer para que cuando terminan los registros, no me aparezca undefined, claro que si me paso el codigo no existe, como para que quede en el mismo o peque la vuelta y empiece de nuevo...

Gracias !!!!!!!!
__________________
Mail: [email protected]
  #13 (permalink)  
Antiguo 17/04/2009, 13:14
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Recorrer solo registros existentes !!!

una forma de verificar sería:
Código PHP:
if(vec[w+1]){
...

o
Código PHP:
if(vec[w-1]){
...

  #14 (permalink)  
Antiguo 17/04/2009, 13:30
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Capooooooooooo !!!!!

Joyaaa, quedo casiiiiiiii todo 100% como queria, lo unico que me quedo, es que cuando comparo el codigo de la base de datos es de la forma '0001' y cuando ingreso el que estoy pidiendo consultar pongo solo '1', y en el if(actual==vec[w]), no funca, o sea anda para el 1º nro que ingreso, pero no adelanta ni atrasa...
Crees que seria bueno guardarlo en la base de datos directamente sin zerofill, esa seria la opcion mas facil, jejejejeje !!!!!!!!!

Gracias, Panino !!!!!!!!
__________________
Mail: [email protected]
  #15 (permalink)  
Antiguo 17/04/2009, 14:14
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Recorrer solo registros existentes !!!

Quizá usando parseInt(código,10) -10 es base decimal- te funcione (no sé decirte porque no sé si entiendo bien el problema). Probá y contanos.
  #16 (permalink)  
Antiguo 20/04/2009, 06:00
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 10 meses
Puntos: 8
Respuesta: Recorrer solo registros existentes !!!

Hola Panino !!!
La verdad, eso funciono correctamente !!!!!!!!!!!!!!

Lo que no pude lograr , es que cuando llega al final de los presupuestos ingresados, o sea si tengo 1, 2, 5, 6, y 10.
Ingreso el 5, pasa por el 6 y llega al 10, hay alguna manera de que cuando este en 10, pase al 1 y asi siga ... ???

Y otra pregunta es si pueso asignar esa funcion siguiente a teclas, por ejemplo a AV PAG (sig) y RE PAG (ant)

Gracias por tu ayuda !!!!!

Saludos, Ricardo !!!
__________________
Mail: [email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:33.