Foros del Web » Programando para Internet » PHP »

Relación de variables

Estas en el tema de Relación de variables en el foro de PHP en Foros del Web. Buenos días. Tengo una interfaz dinámica que me crea una serie de botones cada vez que se inserta un dispositivo nuevo en una BBDD mediante ...
  #1 (permalink)  
Antiguo 26/06/2014, 01:47
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Relación de variables

Buenos días.

Tengo una interfaz dinámica que me crea una serie de botones cada vez que se inserta un dispositivo nuevo en una BBDD mediante un while. Uno de ellos me crea una tabla nueva en la misma BBDD. Lo que quiero es, que aparezcan los demás botones (borrar tabla, subir contenido, info de usuario) solo una vez que esa tabla esté creada.

El problema es que tengo la página hecha de forma dinámica con relación de variables, y me aparecen errores todo el rato porque tengo definidas las variables en otro phpm me explico:

Tengo un php (phpseleccionar) que tiene todos los botones dentro del while, ahí, es donde doy nombre y valor al id perteneciente a la consulta de la tabla de los dispositivos, que será la variable que se relacione. Muestro el código del botón que crea la tabla.

Código PHP:
Ver original
  1. $query = "SELECT * FROM conectados";
  2. $resultado = mysql_query($query);
  3.  
  4. while($fila = mysql_fetch_array($resultado)){
  5.  
  6.     echo "<form action = 'crear_tabla.php' method = 'post'>";
  7.     echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  8.     echo '<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
  9.     echo '<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
  10.     echo '<input type = "submit" value = "Crear" />';
  11.     echo "</form>";

Por otro lado tengo ese php al que me lleva el botón (crear_tabla.php), en el que se definen las variables y se crea la tabla entre otras cosas:

Código PHP:
Ver original
  1. $v1 = $_POST['var_id'];
  2. $v2 = $_POST['var_MAC'];

Crearemos la tabla con el nombre $v1, y según el id relacionado, las tablas llevarán el nombre 1, 2, 3...y así sucesivamente.

Lo suyo sería, en el primero de los php´s poner la consulta:

Código PHP:
Ver original
  1. $result = mysql_query("show tables like '$v1'");
  2.  
  3. if(mysql_fetch_row($result) == false) {
  4.  
  5.     //muestra los botones restantes.

El problema es, que en este php no está definido $v1, así que me da error, pero si lo defino, me dice que var_id no está declarado, y ahí ya no se qué probar. En estático no tendría poblema, pero necesito que siga saliendo dinámico...

Alguien podría darme alguna idea? espero haberme explicado bien.
Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 26/06/2014, 02:07
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Relación de variables

Buenas,

Si he entendido bien, creo que esto podría ayudarte:
Código PHP:
$result mysql_query("SHOW TABLES FROM $dbname");

while(
$row mysql_fetch_row($result)) 
{
    
$tablas[] = $row[0];

Eso en el tercer archivo. Guardarás todas las tablas dentro del array $tablas....

Y después, en el bucle del form puedes usar un in_array para comprobar si la tabla existe o no ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 26/06/2014, 02:29
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

El problema es el que comentaba, que al poner el nombre de la tabla, como es una variable, ($v1) me dice que no está definida...así que ya con eso no me funciona. =(
  #4 (permalink)  
Antiguo 26/06/2014, 02:36
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Relación de variables

Bueno, te lo voy a dar mucho más mascadito:

Código PHP:

$result 
mysql_query("SHOW TABLES FROM $dbname");

while(
$row mysql_fetch_row($result)) 
{
    
$tablas[] = $row[0];
}  

$query "SELECT * FROM conectados";
$resultado mysql_query($query);
 
while(
$fila mysql_fetch_array($resultado)){
 
    if( 
in_array($fila['id'], $tablas)) echo 'LA TABLA YA EXISTE';
    echo 
"<form action = 'crear_tabla.php' method = 'post'>";
    echo 
'<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
    echo 
'<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
    echo 
'<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
    echo 
'<input type = "submit" value = "Crear" />';
    echo 
"</form>";


__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 26/06/2014, 02:38
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

No se si lo he entendido bien, así debería utilizar tu sugerencia?

Código PHP:
Ver original
  1. $result = mysql_query("SHOW TABLES FROM '$v1'");
  2.  
  3.             while($row = mysql_fetch_row($result)) {
  4.                 $tablas[] = $row[0];
  5.                 if (in_array("$v1", $row)) {
  6.                     echo "<td>";               
  7.                     echo "<form action = 'insertar_contenido1.php' method = 'post' enctype = 'multipart/form-data'>";
  8.                     echo "<input type = 'file' name = 'cliente[]' multiple/><br/>";
  9.                     echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  10.                     echo '<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
  11.                     echo '<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
  12.                     echo '<input type = "submit" name = "enviar" value = "Subir"/><br/>';
  13.                     echo "</form>";
  14.                     echo "</td>";
  15.                 }
  16.             }

Aparte del error de que me dice que $v1 no está definido, me dice esto otro:

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 33
  #6 (permalink)  
Antiguo 26/06/2014, 02:39
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

Perdón, no lo habia visto antes de contestar... entendí mal, creí que sólo con un while. Voy a probar y a intentar entenderlo bien y te cuento. Muchas gracias!
  #7 (permalink)  
Antiguo 26/06/2014, 02:52
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

Vale, he entendido, pero una cosa que creo que no aclaré al principio. Necesito que el botón crear tablas se inserte al lado de cada dispositivo conectado cada vez que uno nuevo se conecta, eso lo hace bien con el primer while que voy a mostrar a continuación. Es después cuando compruebao si la tabla está creada y si es así, quiero que me muestre los demás botones. Esto es lo que tengo usando tu sugerencia:

Código PHP:
Ver original
  1. $query = "SELECT * FROM raspberries";
  2.             $resultado = mysql_query($query);
  3.  
  4.             while($fila = mysql_fetch_array($resultado)){
  5.            
  6.                 echo "<tr>";
  7.                
  8.                 echo "<td align = 'center'>";
  9.                 echo "<form action = 'crear_tabla.php' method = 'post'>";
  10.                 echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  11.                 echo '<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
  12.                 echo '<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
  13.                 echo '<input type = "submit" value = "Crear" />';
  14.                 echo "</form>";
  15.                 echo "</td>";
  16.                
  17.                 echo "</tr>";
  18.                
  19.             }
  20.  
  21.             $result = mysql_query("SHOW TABLES FROM '$v1'");
  22.  
  23.             while($row = mysql_fetch_row($result))
  24.             {
  25.                 $tablas[] = $row[0];
  26.             }  
  27.  
  28.             while($fila = mysql_fetch_array($resultado)){
  29.  
  30.                 if( in_array($v1, $tablas)){
  31.                
  32.                     echo "<form action = 'insertar_contenido1.php' method = 'post' enctype = 'multipart/form-data'>";
  33.                     echo "<input type = 'file' name = 'cliente[]' multiple/><br/>";
  34.                     echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  35.                     echo '<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
  36.                     echo '<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
  37.                     echo '<input type = "submit" name = "enviar" value = "Subir"/><br/>';
  38.                     echo "</form>";
  39.  
  40.                 }  
  41.             }

Los errores son los mismos:

Notice: Undefined variable: v1 in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 31

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 33.

No sé como hacer para que me acepte el nombre de la tabla v1, es la relación de variables la que me falla...
  #8 (permalink)  
Antiguo 26/06/2014, 03:00
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

He hecho comprobaciones con echo y solamente me hace los dos primeros while de mi código...
  #9 (permalink)  
Antiguo 26/06/2014, 04:35
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Relación de variables

Tienes varios fallitos:

1) Las consultas sql, si las haces sobre el mismo "link" (handler? conexion?), sobreescribe a la otra, con lo cual pierdes la opción de seguir iterando

2) Pq hacer una consulta (SHOW TABLES) en cada iteracion del bucle principal, si este NO va a cambiar durante el recorrido de ese bucle? ¡Sácalo fuera!

3) Pq sigues usando $v1? Si es lo mismo que $fila['id'], y $v1 sabes que no existe en esa zona de php... no sería más lógico usar esa variable que sí tienes creada? ;)

Una vez dicho esto, revisa mi ejemplo y adapta tu codigo.

Cualquier duda... ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #10 (permalink)  
Antiguo 27/06/2014, 00:50
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

Estoy empezando a aprender php así que la mayoría de mis conjeturas son un poco intuitivas, pero he intentado usar $fila['id'] en vez de $v1 y me da este fallo:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 15

Podría ser que, al ser $fila['id'] un campo de otra tabla llamada conectados, no me lo reconozca como tabla aunque al ser dinámico el nombre sea el mismo? (En el php crear_tabla.php, mis tablas se llaman $v1, pero lo que hago es relacionarlo con $fila['id'] para que tenga que ver con el id de la tabla conectados).

He decidido dividir el php en el que están los botones que preciso en dos; uno de ellos con el de crear tabla, que estará siempre fijo, y otro php en el que hago consulta para ver si las tablas están creadas y en ese caso que aparezcan los botones. Por los resultados que obtengo, creo que el código para que salgan los nuevos botones está creado bien, pero no funcionan debido a la bendita consulta de la tabla...podría ser que, probando lo de usar $fila['id'] estuviera poniendo unas comillas erróneas??

Código PHP:
Ver original
  1. $result = mysql_query("SHOW TABLES like `$fila['id']`");

Muchisisimas gracias de nuevo!
  #11 (permalink)  
Antiguo 27/06/2014, 01:08
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Relación de variables

Te irá mejor si utilizas la concatenación:

Código PHP:
$result mysql_query("SHOW TABLES like `".$fila['id']."`"); 
En php, se utiliza el punto . para concatenar strings
__________________
>> Eleazan's Source
>> @Eleazan
  #12 (permalink)  
Antiguo 27/06/2014, 01:35
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

Cada vez que cambio algo me da más errores la página...no se en qué estaré metiendo la pata pero lo que está claro es que `".$fila['id']."`no me lo está reconociendo como el nombre de mi tabla, por la razón que sea =( Este es mi código, he utilizado tu sugerencia del uso in_array (también sin ella y tampoco sale):

Código PHP:
Ver original
  1. $query = "SELECT * FROM conectados";
  2.             $resultado = mysql_query($query);
  3.             $fila = mysql_fetch_array($resultado);
  4.            
  5.             $result = mysql_query("SHOW TABLES FROM `".$fila['id']."`");
  6.  
  7.             while($row = mysql_fetch_row($result)) {
  8.                 $tablas[] = $row[0];
  9.             }  
  10.  
  11.             while($fila = mysql_fetch_array($resultado)){
  12.                 if( in_array(`$fila['id']`, $tablas)){
  13.                    
  14.                     echo "</tr>";
  15.                
  16.                     echo "<td align = 'center'>";
  17.                     echo "<form action = 'insertar_contenido1.php' method = 'post' enctype = 'multipart/form-data'>";
  18.                     echo "<input type = 'file' name = 'cliente[]' multiple/><br/>";
  19.                     echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  20.                     echo '<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
  21.                     echo '<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
  22.                     echo '<input type = "submit" name = "enviar" value = "Subir"/><br/>';
  23.                     echo "</form>";
  24.                     echo "</td>";
  25.                
  26.                     echo "<td align = 'center'>";
  27.                     echo "<form action = 'borrar_tabla.php' method = 'post'>";
  28.                     echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  29.                     echo '<input type = "hidden" name = "var_id" value = "'.$fila['id'].'" />';
  30.                     echo '<input type = "hidden" name = "var_MAC" value = "'.$fila['Dispositivos'].'" />';
  31.                     echo '<input type = "submit" value = "Borrar" />';
  32.                     echo "</form>";
  33.                     echo "</td>";
  34.                
  35.                     echo "<td>";
  36.                     echo "<form action = 'vnc.php' method = 'post'>";
  37.                     echo '<input type = "hidden" name = "mac_address" value = "'.$fila['id'].'">';
  38.                     echo '<input type = "submit" value = "Arrancar"/><br/>';
  39.                     echo "</form>";
  40.                     echo "</td>";
  41.                
  42.                     echo "<td align = 'center'>";
  43.                     echo "<form action = 'formulario_html.php' method = 'post'>";
  44.                     echo "<input type = 'submit' name = 'formulario' value = 'Usuario'/><br/>";
  45.                     echo "</form>";
  46.                     echo "</td>";
  47.                
  48.                     echo "</tr>";
  49.                 }
  50.             }

Estos son los fallos que me da:

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 17

Notice: Undefined variable: tablas in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 22

Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 22

Notice: Undefined variable: tablas in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 22

Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\Trabajo\phpseleccionar2.php on line 22

No me sale ni un botón y tras comprobaciones, creo que no entra en nigún bucle... si se te ocurriera algo...muchas gracias de nuevo, y disculpa la insistencia!
  #13 (permalink)  
Antiguo 27/06/2014, 01:51
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Relación de variables

Vale, perdona...

Ese fallo es mio, debido a no leer...

El SHOW TABLES FROM te lo puse con $dbname... que viene a ser el nombre de la base de datos..

Intenta entender el código antes de copiar y pegar... es mejor perder 5 minutos mirando qué hace cada función, que tirarte 30min a ciegas pq no sabes lo q hace el código

Saludos!
__________________
>> Eleazan's Source
>> @Eleazan
  #14 (permalink)  
Antiguo 27/06/2014, 02:01
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

Si si, llevo un par de dias con esto...y creo q entiendo bien le código...la consulta SHOW TABLES FROM la he utilizado en otros phps del mismo programa y siq hace lo que pretendo en ellos.

Me daré por vencida con esto...

Muchas gracias por el seguimiento.
  #15 (permalink)  
Antiguo 27/06/2014, 02:06
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Relación de variables

El q la sigue, la consigue!

No deberías tener problemas con esa consulta... (SHOW TABLES FROM es distinto de SHOW TABLES LIKE)
__________________
>> Eleazan's Source
>> @Eleazan
  #16 (permalink)  
Antiguo 27/06/2014, 02:09
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Relación de variables

Si si, perdón...con tanta prueba en el código me lié yo sola y en alguna prueba cambié el from por like para meter tablas en vez de BBDD...a ver si era ese el fallo, lo comprobaré, gracias de nuevo!!!

Etiquetas: mysql, select, sql, tabla, variable, variables
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:30.