Foros del Web » Programando para Internet » PHP »

Problema con un codigo, funciones

Estas en el tema de Problema con un codigo, funciones en el foro de PHP en Foros del Web. Tengo un problema con un codigo. El problema es que si pongo el codigo dentro de una funcion ya no puedo acceder al resultado que ...
  #1 (permalink)  
Antiguo 20/02/2005, 21:29
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 19 años, 2 meses
Puntos: 0
Problema con un codigo, funciones

Tengo un problema con un codigo. El problema es que si pongo el codigo dentro de una funcion ya no puedo acceder al resultado que genera tal codigo.
Aqui esta:
Código:
if ($edit !== 0){
	for ($x = 1; $x <= 8; $x++) {
	$query_edit_pregunta = "SELECT pregunta FROM enc_preguntas WHERE idvotacion='$edit' AND idpregunta='$x'";
	$result_edit_pregunta = mysql_query($query_edit_pregunta) or die ("Error in query: $query_edit_pregunta. ".mysql_error());
		while ($registro_edit_pregunta = mysql_fetch_row($result_edit_pregunta))
			{
				foreach($registro_edit_pregunta as $clave6[$x])
					{
						$get_edit_pregunta[$x]=$clave6[$x];

					}
				}
			}
		}
No es una funcion y puedo llamar perfectamente a la variable $get_edit_pregunta[$x] con un ciclo for mas adelante sin problemas. PERO, si ahora pongo el script en una funcion:
Código:
function prueba ($edit) {
if ($edit !== 0){
	for ($x = 1; $x <= 8; $x++) {
	$query_edit_pregunta = "SELECT pregunta FROM enc_preguntas WHERE idvotacion='$edit' AND idpregunta='$x'";
	$result_edit_pregunta = mysql_query($query_edit_pregunta) or die ("Error in query: $query_edit_pregunta. ".mysql_error());
		while ($registro_edit_pregunta = mysql_fetch_row($result_edit_pregunta))
			{
				foreach($registro_edit_pregunta as $clave6[$x])
					{
						$get_edit_pregunta[$x]=$clave6[$x];
                                                return $get_edit_pregunta[$x];
					}
				}
			}
		}
}
Más adelante la variable $get_edit_pregunta [$x] ya no la puedo leer con un for. Para que mencionar que se muy poco de funciones y realmente necesito ayuda con esta.

El codigo con que leo la variable mas adelante es este:
Código:
for ($z=1; $z <=8; $z++) {
	echo "</tr><tr>";
	echo "<td align='left'><font color='$color_numeracion'><b>$z</b>)</td></font>";
	
		if ($edit !== 0){				
			echo "<td align='left'><INPUT type='text' name='sub_pregunta[$z]' size='35' maxlength='50' value='$get_edit_pregunta[$z]'></td>";
		}
		else {
			echo "<td align='left'><INPUT type='text' name='sub_pregunta[$z]' size='35' maxlength='50' value=''></td>";
	}
}
Y como les mencione, funciona sin problemas si es que el codigo no se encuentra en una funcion.
Salu2
  #2 (permalink)  
Antiguo 21/02/2005, 07:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Hola,

Ambito de las variables: http://www.php.net/manual/en/languag...bles.scope.php

Resumiendo, no se puede acceder directamente a una variable definida fuera de la funcion desde dentro de la funcion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 21/02/2005, 08:47
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 19 años, 2 meses
Puntos: 0
En realidad no es eso. La variable a la cual quiero acceder es el resultado de la funcion: $get_edit_pregunta[$x].
  #4 (permalink)  
Antiguo 21/02/2005, 11:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. si bien en tu función hace un "return" para devolver un valor por esta .. ¿donde llamas a tu función prueba($??) ?

A todo esto .. trabajas con arrays (arreglos) .. usas un bucle y haces un "return" de un valor que se está obteniedo de tu bucle (bajo alguna condición .. el bucle tendría que terminar .. o delvolver el array completo y luego leerlo con un bucle aparte como ese for() que usas )... .Bueno eso ya es otro tema de "lógica" ..

El caso es que dentro del "ambito" de las variables (lo que te comentó josemi) .. No puedes hacer:

echo "<td align='left'><INPUT type='text' name='sub_pregunta[$z]' size='35' maxlength='50' value='$get_edit_pregunta[$z]'></td>";

Sino algo tipo:
Código PHP:
echo "<td align='left'><INPUT type='text' name='sub_pregunta[$z]' size='35' maxlength='50' value='prueba($z)'></td>"
por qué es prueba() la que hace el return .. a no ser que declares como global dentro de tu función a $get_edit_pregunta

Repasa el link que te dejó josemi sobre el ambito (scope) de las variables en funciones. Y luego repasa la "lógica" de tu función . .por qué al estar como "función" .. ya no es lo mismo ... devería devolver un sólo resultado si lo llamas con un bucle anidado externo o bien la llamas y que te devuelva un array con los resultados que luego leeras con tu otro bucle externo.

Un saludo,
  #5 (permalink)  
Antiguo 21/02/2005, 19:31
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 19 años, 2 meses
Puntos: 0
Creo que este es otro codigo, pero da lo mismo, me pasaba lo mismo en todos. Esto esta correcto, funciona bien:
Código:
function obtener_respuestas () {
global $idvotacion;	
for ($x = 1; $x <= 8; $x++){			
	for ($z = 1; $z <= 11; $z++) {
		$query_respuesta = "SELECT respuesta FROM enc_respuestas WHERE idvotacion='$idvotacion' AND idpregunta='$x' AND idrespuesta='$z'";
		$result_respuesta = mysql_query($query_respuesta) or die ("Error in query: $query_respuesta. ".mysql_error());
			while ($registro_respuesta = mysql_fetch_row($result_respuesta))
				{
				$get_respuesta[$x][$z] = $registro_respuesta;
				}
			}
		}
	return $get_respuesta;
	}
Puedo acceder luego a ell con un ciclo for.
Código:
$var = obtener_respuestas ();
for ($x = 1; $x <= 8; $x++){
      for ($z = 1; $z <= 11; $z++) {
           echo "{var[$x][$z][0]}";
          }
}
Ahora, el problema es el numero de querys que hace a la base de datos, probe haciendo un SELECT between 1 y 8 y between 1 y 11 para $x y $z respectivamente, fuera del ciclo for, pero luego ya no puedo leer la variable. Algun comentario sobre eso?
Salu2.
  #6 (permalink)  
Antiguo 21/02/2005, 19:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero de qué variable hablas? te refieres a ese array bidimensinal que creas en tu funciòn y asignas en $var?

Deberìas explicar mejor que "modelo de datos" de tu base de datos tienes ..por què veo escesivo tanto bucle (y anidado!!!) para hacer una tarèa que es muyyy probable que puedas hacer con SQL .. eso sí con una consulta SQL màs compleja donde tal vez intervengan otras tablas relacionadas si las hay .. A no ser que uses estructuras geràrquicas que de por sì requieren de "recursividad" para su ejecuciòn.

Un saludo,
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 13:09.