Foros del Web » Programando para Internet » PHP »

Funcion para hacer consultas en SQL

Estas en el tema de Funcion para hacer consultas en SQL en el foro de PHP en Foros del Web. Hola a todos, Con el afán de reducir líneas de código y terminar antes una web, quise hacer una función en PHP que haga la ...
  #1 (permalink)  
Antiguo 08/02/2009, 09:00
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Funcion para hacer consultas en SQL

Hola a todos,

Con el afán de reducir líneas de código y terminar antes una web, quise hacer una función en PHP que haga la conexión a MySQL y me extraiga los resultados, pero no me funciona.

La tabla de mi BBDD tiene la siguiente estructura:
id - clave - ord - nombre - valor
1 - form_1_4 - 1 - pregunta1_4_a - resp_a
2 - form_1_4 - 2 - pregunta1_4_b - resp_b
3 - form_1_5 - 1 - pregunta1_5_a - resp_a
...

Es para una encuesta que las respuestas son radiobuttons, y la idea es que los administradores de la encuesta puedan agregar o quitar opciones a las respuestas, así que metí todo en una tabla y las muestro filtrando por el campo "clave".

La sentencia "normal" (una para cada pregunta) que tengo para acceder a MySQL y que funciona es la siguiente:
Código PHP:
/*
CODIGO PARA CONECTAR Y EXTRAER DATOS
*/
<?php
mysql_select_db
($database_empresa$empresa);
$clave 'form_1_4';
$query_clave 'query_'.$clave;
$
$query_clave "SELECT * FROM selects WHERE clave = '$clave' ORDER BY ord";
$mysqlquery $clave;
$
$mysqlquery mysql_query($$query_clave$empresa) or die(mysql_error());
$fila_clave 'row_'.$clave;
$
$fila_clave mysql_fetch_assoc($$mysqlquery);
$todaslasfilas 'totalRows_'.$clave;
$
$todaslasfilas mysql_num_rows($$mysqlquery);
?>
/*
CODIGO PARA MOSTRAR LOS RESULTADOS
*/
 <?php   do { ?>
<label><input name="<?php echo $row_form_1_4['clave']; ?>" type="radio" value="<?php echo $row_form_1_4['valor1']; ?>" />&nbsp;<?php echo $row_form_1_4['nombre']; ?></label><br />
<?php $i++;} while ($row_form_1_4 mysql_fetch_assoc($form_1_4)); ?>

// se nota que es del Dreamweaver, jejejeje :D
Lo malo es que tengo 20 preguntas, por lo tanto tengo que repetir esto 20 veces

Por eso quiero convertir la primera parte en una función y con solo escribir, por ejemplo "ConectarBD('nombre_filtro');" y me haga la conexión.

He intentado hacer esto pero me da un error:

Código PHP:

/*
FUNCION PARA CONECTAR Y EXTRAER DATOS
*/
function ConectarBD($nompregunta){
        
            
mysql_select_db($GLOBALS['database_sinceo2'], $GLOBALS['sinceo2']);
            
$clave $nompregunta;
            
$query_clave 'query_'.$clave;
            $
$query_clave "SELECT * FROM selects WHERE clave = '$clave' ORDER BY ord";
            
$mysqlquery $clave;
            $
$mysqlquery mysql_query($$query_clave$GLOBALS['sinceo2']) or die(mysql_error());
            
$fila_clave 'row_'.$clave;
            $
$fila_clave mysql_fetch_assoc($$mysqlquery);
            
$todaslasfilas 'totalRows_'.$clave;
            $
$todaslasfilas mysql_num_rows($$mysqlquery);
            return $
$query_clave;
            return $
$mysqlquery;
            return $
$fila_clave;
            return $
$todaslasfilas;

}

/*
LLAMADO A LA FUNCION
*/
ConectarBD('form_1_4');
ConectarBD('form_1_5');
...


/*
CODIGO PARA MOSTRAR LOS RESULTADOS ES IGUAL AL ANTERIOR
*/ 
Esto me muestra un error en la zona donde está el código:
Código:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL 
result resource in 
D:\Mis Documentos\Carlos\WEBS\www\empresa\www\cuestionario.php on line 129
Bueno, espero que alguien me pueda ayudar que no se porqué esta fallando.

Muchas gracias y saludos

Carlos
  #2 (permalink)  
Antiguo 08/02/2009, 10:38
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Funcion para hacer consultas en SQL

Lo acabo de probar y todo sale bien. Asegurate que las variables $GLOBALS['database_sinceo2'] y $GLOBALS['sinceo2'] se esten pasando correctamente.

Otra cosa, una vez que una funcion alcanza un RETURN, esta sale de la funcion. Para retornar mas de 1 valor tienes que retornarlo en un array.
  #3 (permalink)  
Antiguo 08/02/2009, 12:01
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: Funcion para hacer consultas en SQL

gracias por la respuesta,

Lo de las variables globales la está pasando bien, porque sin ellas me daba un error en Toda la pagina.. ahora solo sale en la parte donde vá el código... aparte me vi esto http://www.desarrolloweb.com/articulos/2457.php para enterarme bien del ambito de las variables.

No sabía lo de los RETURN, he probado esto, pero sigue sin salirme:

Supongo que si dentro se un array, meto una variable que también es otro array, entonces obtengo un array de 2 dimensiones no????

Siguiendo esta lógica he hecho esto:

Código PHP:

/*
FUNCION PARA CONECTAR Y EXTRAER DATOS
*/ 
<?php

function ConectarBD($nompregunta){
        
            
mysql_select_db($GLOBALS['database_sinceo2'], $GLOBALS['sinceo2']);
            
$clave $nompregunta;
            
$query_clave 'query_'.$clave;
            $
$query_clave "SELECT * FROM selects WHERE clave = '$clave' ORDER BY ord";
            
$mysqlquery $clave;
            $
$mysqlquery mysql_query($$query_clave$GLOBALS['sinceo2']) or die(mysql_error());
            
$fila_clave 'row_'.$clave;
            $
$fila_clave mysql_fetch_assoc($$mysqlquery);
            
$todaslasfilas 'totalRows_'.$clave;
            $
$todaslasfilas mysql_num_rows($$mysqlquery);
            
            
$resultados 'datos_'.$clave;
            $
$reultados = array(=> $$mysqlquery=> $$fila_clave=> $$todaslasfilas);
            return $
$reultados;
}



/*
LLAMADO A LA FUNCION
*/
ConectarBD('form_1_4');
ConectarBD('form_1_5');
... 


/*
CODIGO PARA MOSTRAR LOS RESULTADOS
*/ 
?>



<?php   do { ?>

<label><input name="<?php echo $datos_form_1_4[2]['clave']; ?>" type="radio" value="<?php echo $datos_form_1_4[2]['valor1']; ?>" />&nbsp;<?php echo $datos_form_1_4[2]['nombre']; ?></label><br />

<?php } while ($datos_form_1_4[2] = mysql_fetch_assoc($datos_form_1_4[1])); 

?>


.
Pero como digo sigue sin salirme

He hecho un apaño pero es un poco "a lo bruto", que es hacer 2 bucles for, uno dento del otro, para sacar todos los "form_a_b" que necesito para las consultas... pero la idea no es eso, sinó hacer una funcion en toda regla...


Saludos

Carlos
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 14:53.