Foros del Web » Programando para Internet » PHP »

Ayuda con arreglo

Estas en el tema de Ayuda con arreglo en el foro de PHP en Foros del Web. Saludos a todos los foristas...la siguiente es para plantearle una duda que tengo mediante el incremento del indice de un arreglo...Es un listado de Direcciones ...
  #1 (permalink)  
Antiguo 25/10/2010, 13:11
 
Fecha de Ingreso: junio-2009
Mensajes: 93
Antigüedad: 15 años, 5 meses
Puntos: 0
Ayuda con arreglo

Saludos a todos los foristas...la siguiente es para plantearle una duda que tengo mediante el incremento del indice de un arreglo...Es un listado de Direcciones ip..si la direccion ip que trae el arreglo..es igual la del for...que imprima la IP si no es igual...que imprima LIBRE

Como sigue:



Asi lleno $arreglo con las direcciones ip que me traiga una consulta antes realizada..

while($array= mysql_fetch_array($cad)){

$arreglo[$in]=$array["direccion_ip"];
$in++;
}


// Imprimiendo los resultados
for($ip=1;$ip<=255;$ip++) {

$direccion=$arreglo[5]; //Aqui es donde capturo la direccion ip para usarla para la nueva consulta.

$pegar_u_red= "SELECT usuario_red FROM computador WHERE direccion_ip='$direccion'";
$cad_u_red= mysql_db_query($base,$pegar_u_red) or die (mysql_error());
$array2= mysql_fetch_array($cad_u_red);


Pero cuando le pongo un indice el arreglo ejemplo $arreglo[$i]; la variable $direccion no toma ningun valor...Si lo pongo manual ejemplo $arreglo[3]; si toma el valor que esta en esa posicion...
  #2 (permalink)  
Antiguo 25/10/2010, 13:16
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 9 meses
Puntos: 55
Respuesta: Ayuda con arreglo

$i no existe en el for
deberia ser
$arreglo[$ip]

pero otra cosa estas asumiendo que el arreglo tiene 255 ubicaciones o sea que todas las ips estan libres

deberias hacerlo desde for($ip=0;$ip<count($arreglo);$ip++)


algo asi
Código PHP:
while($arraymysql_fetch_array($cad)){
    
$arreglo[]=$array["direccion_ip"];
}

// Imprimiendo los resultados
for($ip=0;$ip<=count($arreglo);$ip++) {

$direccion=$arreglo[$ip]; //Aqui es donde capturo la direccion ip para usarla para la nueva consulta.

$pegar_u_red"SELECT usuario_red FROM computador WHERE direccion_ip='$direccion'";
$cad_u_redmysql_db_query($base,$pegar_u_red) or die (mysql_error());
$array2mysql_fetch_array($cad_u_red); 
  #3 (permalink)  
Antiguo 25/10/2010, 13:21
 
Fecha de Ingreso: junio-2009
Mensajes: 93
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda con arreglo

En efecto, tienes razon...pero ahora no me muestra el usuario de red...Como que no hace la comparacion if($direccion==$direccion2){ echo $array2['usuario_red']; // Este usuario de red es el usuario que usa esa ip...
  #4 (permalink)  
Antiguo 25/10/2010, 13:23
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 9 meses
Puntos: 55
Respuesta: Ayuda con arreglo

de donde sacas $direccion2 ?
  #5 (permalink)  
Antiguo 25/10/2010, 13:29
 
Fecha de Ingreso: junio-2009
Mensajes: 93
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda con arreglo

Es uan variable en la que guardo el correlativo de las ip...
$direccion2='192.0.3.'.$ip;

Y esa direccion la comparo con la que obtengo
$direccion=$arreglo[$ip];

if($direccion==$direccion2){ echo $array2['usuario_red'];
  #6 (permalink)  
Antiguo 25/10/2010, 13:45
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 9 meses
Puntos: 55
Respuesta: Ayuda con arreglo

pero no entiendo porque comparas las direcciones si ya tienes las ips en el arreglo pq no recorres el arreglo de ips y haces la consulta del usuario en la bd
  #7 (permalink)  
Antiguo 25/10/2010, 13:51
 
Fecha de Ingreso: junio-2009
Mensajes: 93
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda con arreglo

Las comparo por la razon que no todas estan asignadas...y quiero que en caso de estar asignada imprima en el listado el nombre de usuario de red que tiene esa direccion ip....en caso que no este asignada que imprime la palabra LIBRE...
  #8 (permalink)  
Antiguo 25/10/2010, 14:04
 
Fecha de Ingreso: octubre-2010
Mensajes: 19
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Ayuda con arreglo

Una pregunta,

Las querys están en la misma base de datos?

Quiero decir, no tendrás unas tablas en una base de datos y otras en otra...?

Porque si es así, en la documentación oficial de php dice claramente que :

Be aware that this function does NOT switch back to the database you were connected before. In other words, you can't use this function to temporarily run a sql query on another database, you would have to manually switch back. Users are strongly encouraged to use the database.table syntax in their sql queries or mysql_select_db() instead of this function.


http://es.php.net/manual/en/function.mysql-db-query.php

Es decir, si este fuera el caso tienes que volver a lanzar un mysql_select_db según he entendido yo.

Si no es eso, pon el código desde la primera query hasta la última porque se hace difícil hacer una traza.

Un saludo.
  #9 (permalink)  
Antiguo 25/10/2010, 14:12
 
Fecha de Ingreso: junio-2009
Mensajes: 93
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda con arreglo

Si están todas las tablas en la misma BD

Primera consulta para llenar el arreglo con todas las direcciones ip

$pegar= "SELECT direccion_ip,usuario_red FROM computador";
$cad = mysql_db_query($base,$pegar) or die (mysql_error());

Llenado del arreglo

while($array= mysql_fetch_array($cad)){

$arreglo[$in]=$array["direccion_ip"];
$in++;
}

For que genera la lista de las direcciones ip y segunda consulta de acuerdo a la ip generada

// Imprimiendo los resultados
for($ip=0;$ip<=255;$ip++) {

$direccion=$arreglo[$ip];


$pegar_u_red= "SELECT usuario_red FROM computador WHERE direccion_ip='$direccion'";
$cad_u_red= mysql_db_query($base,$pegar_u_red) or die (mysql_error());
$array2= mysql_fetch_array($cad_u_red);


Comparacion de la ip generada ($direccion1) con a ip del arreglo obtenido ($direccion2)

if($direccion==$direccion2){ echo $array2['usuario_red'];


Pero no me imprime nada..o sea $array2['usuario_red'];

Ejemplo: la dirección ip 192.0.3.15 si es igual a la del arreglo obtenido deberia de imprimirme el nombre de usuario de red que usa esa direccion 192.0.3.15
  #10 (permalink)  
Antiguo 25/10/2010, 14:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 19
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Ayuda con arreglo

He intentado arreglar un poco ya que no acabo de entender muy bien el último paso
Si lo que quieres es recoger de db todas las ips asignadas y luego mostrar si la ip esta libreo caso contrario el nombre de usuario, este codigo algo más lógico a mi entender te servirá.

Código PHP:
<?
$pegar
"SELECT direccion_ip,usuario_red FROM computador";
$cad mysql_db_query($base,$pegar) or die (mysql_error());

while(
$arraymysql_fetch_array($cad))
{
                
// Separamos la ip obtenida de db por '.'
    
$ip=explode(".",$array["direccion_ip"]);
                
// Cogemos el ultimo dato
    
$ip=$ip[3];
                
// metemos en el array sólo las que estan asignadas
    
$arreglo[$ip]=$array["direccion_ip"];
                
// recogemos tb el usuario
    
$usuario[$ip]=$array["usuario_red"];
}

// Imprimiendo los resultados
for($ip=0;$ip<=255;$ip++) 
{
    echo 
'IP: 192.0.3.'.$ip.' ';
    
// si el indice no existe ponemos libre sino damos el usuario
    
if($arreglo[$ip]=="")
        echo 
"Libre";
    else
        echo 
$usuario[$ip];
    echo
"<br />";
}
?>
Mira aver si te sirve.

Un saludo.

PD: Si no te sirve, pon todo el código(en el código que has puesto faltaban datos como $direccion2 pon todo el código)
  #11 (permalink)  
Antiguo 26/10/2010, 08:12
 
Fecha de Ingreso: junio-2009
Mensajes: 93
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda con arreglo

Efectiva la solución q me diste yoseman1. Muchas gracias. Lo que hice fue adaptarlo a mi código inicial y funcionó perfectamente. Tema Cerrado.

Etiquetas: arreglos
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 09:34.