Foros del Web » Programando para Internet » PHP »

Intento por ultima vez

Estas en el tema de Intento por ultima vez en el foro de PHP en Foros del Web. Hola amigos. Si, como sabran, ya estoy hace 3 días intentando resolver este problema: al abrir un archivo, se pierde el valor de la variable. ...
  #1 (permalink)  
Antiguo 20/12/2009, 12:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Intento por ultima vez

Hola amigos. Si, como sabran, ya estoy hace 3 días intentando resolver este problema: al abrir un archivo, se pierde el valor de la variable. El archivo que abro es de un ranking que uso para que los usuarios voten en mi sitio. El codigo del archivo inicial:

Cita:
<?php
include_once("rank/rank.php");
$link=conectar();
mysql_query ("SET NAMES 'utf8'");
$tabla=acciondisparos;
$query = "SELECT count(id) AS Total from $tabla WHERE LENGTH(descripcion)>(0)";
$row2=mysql_fetch_assoc(mysql_query($query));
$total_records = $row2['Total'];
$records_per_page = 5;
......aca prosigue el código
Sin problema, toma los registros de la base de datos y los coloca perfectamente bien. No hay problemas. Pero como se ve, en la primer linea llamo al archivo rank.php. Aquí la variable $tabla deja de existir. Aca va el archivo rank.php

Cita:
<?php
function conectar(){
// Conexión a la base de datos
$dbhost='localhost';
$dbusername='usname'; //nombre del usuario
$dbuserpass='dsadsadasd'; //password o contraseña del usuario
$dbname='dasdrank';//nombre de la base de datos
$link = mysql_connect($dbhost, $dbusername,$dbuserpass);
mysql_select_db($dbname, $link);
return $link;
}

echo $tabla; //Imprimo $tabla, pero no existe!
$id = $_GET['id'];
if($id!=""){
$voto = $_GET['v'];
$link = conectar();

if ($_SERVER) {
if ( $_SERVER[HTTP_X_FORWARDED_FOR] ) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif ( $_SERVER["HTTP_CLIENT_IP"] ) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if ( getenv( "HTTP_X_FORWARDED_FOR" ) ) {
$realip = getenv( "HTTP_X_FORWARDED_FOR" );
} elseif ( getenv( "HTTP_CLIENT_IP" ) ) {
$realip = getenv( "HTTP_CLIENT_IP" );
} else {
$realip = getenv( "REMOTE_ADDR" );
}
}

$fecha = date('Y-m-d');
$result = mysql_query("DELETE FROM votos_usuarios WHERE dataCreate <> '".$fecha."'",$link);

$result = mysql_query("SELECT *FROM votos_usuarios WHERE ip = '".$realip."' and id = $id",$link);
$row = mysql_fetch_row($result);

if($row[0]==""){
$result = mysql_query("SELECT votos,media FROM $tabla WHERE id =$id",$link);
$row = mysql_fetch_row($result);

$auxmedia = $row[1];
$votos =$row[0] + 1;
$media = (($row[0] * $auxmedia) + $voto)/ $votos;
//actualizamos el voto
$result = mysql_query("UPDATE $tabla SET votos= $votos, media= $media WHERE id= $id",$link);
mysql_query("INSERT INTO votos_usuarios(id,ip,dataCreate)VALUES($id,'".$rea lip."','".$fecha."')",$link);
echo "<br> \n";
echo "Gracias por votar!";
}else{
echo "<br> \n";
echo "Ya votaste";
}
}
?>
Bueno, el problema esta en la línea que está en negrita
  #2 (permalink)  
Antiguo 20/12/2009, 12:31
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Intento por ultima vez

Cita:
Iniciado por principiantedelweb Ver Mensaje

[...]
include_once("rank/rank.php");
$link=conectar();
mysql_query ("SET NAMES 'utf8'");
$tabla=acciondisparos;
[...]

[...]
echo $tabla; //Imprimo $tabla, pero no existe!
[...]
Estas incluyendo el archivo antes de declarar la variable (que por cierto esta mal declarada)....
Cuando imprimis $tabla en rank.php aun no tiene ningun valor esta.

Ademas, como ya te conteste antes, las variables de php dentro de una consulta a la base de datos, llevan comillas simples
  #3 (permalink)  
Antiguo 20/12/2009, 14:01
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Intento por ultima vez

Jackson666: Open your mind...
Archivo inicial:
Cita:
<head>
<?php
$tabla='acciondisparos';
include_once("rank/rank.php");
$link=conectar();
mysql_query ("SET NAMES 'utf8'");
?>
.........
........
........
</head>
<body>
<?php
$tabla='acciondisparos';
include_once("rank/rank.php");
$link=conectar();
mysql_query ("SET NAMES 'utf8'");
?>
.........
........
........
</body>
Como vez, desde el archivo inicial.php llamo 2 veces al archivo rank.php: una vez, para poder llenar el título y la descripcion del sitio en forma dinamica y está dentro del <head>. Y la otra vez, lo hago desde el <body> para que tome los registros de la tabla.
Es evidente que el problema se produce cuando llamo desde el body, porque cuando llamo desde el head, la variable se mantiene.
Por eso, insisto, nada tienen que ver las comillas, ni la ubicación del $tabla, aunque ya probé ambas instancias.

Última edición por principiantedelweb; 20/12/2009 a las 14:14
  #4 (permalink)  
Antiguo 20/12/2009, 14:15
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Intento por ultima vez

¿Porque incluyes el archivo 2 veces?
  #5 (permalink)  
Antiguo 20/12/2009, 14:18
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Intento por ultima vez

Porque la primera parte esta en el head y necesito llenar el <title> y la <description> con valores de la base de datos y los imprimo. Luego, en el body, hago lo mismo, para que pueda buscar los registros de la base de datos que corresponden a la página (lo que se va a ver).
Intenté hacerlo de otras formas pero no pude usar la función sin repetirla, porque la plantilla me aceptaba ciertos datos en el body y otros datos en el head, sino, la plantilla se desarmaba.
  #6 (permalink)  
Antiguo 20/12/2009, 15:19
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Intento por ultima vez

Bueno, alguien sabe como solucionar el problema? Gracias
  #7 (permalink)  
Antiguo 20/12/2009, 15:59
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Intento por ultima vez

habría que ver que pasa con las funciones de rank.php que se ejecutan en el body. Asegurate que ninguna función declare variables tipo global o sube el código de las funciones para poder hacer un seguimiento de la variable
  #8 (permalink)  
Antiguo 20/12/2009, 16:08
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Intento por ultima vez

Cita:
Iniciado por principiantedelweb Ver Mensaje
echo $tabla; //Imprimo $tabla, pero no existe!
en esta linea no imprime nada porque en el ámbito de la función no está definida
  #9 (permalink)  
Antiguo 20/12/2009, 17:33
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Intento por ultima vez

retiro lo último, se me paso la llave final
...otra cosa, dices que necesariamente necesitas incluir el archivo dos veces pero usas include_once() y si el archivo ya está incluido no se incluirá de nuevo
  #10 (permalink)  
Antiguo 20/12/2009, 18:28
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Intento por ultima vez

Eso es muy inteligente. Pero hay un detalle Cdg muy importante: Si en las lineas que dice:

Cita:
if($row[0]==""){
$result = mysql_query("SELECT votos,media FROM $tabla WHERE id =$id",$link);
$row = mysql_fetch_row($result);
Yo reemplazo la variable $tabla, por el nombre de una tabla cualquiera (que se yo, accion), el script funciona perfectamente:

Cita:
if($row[0]==""){
$result = mysql_query("SELECT votos,media FROM accion WHERE id =$id",$link);
$row = mysql_fetch_row($result);
Esto funciona perfectamente bien. Lo incluye 2 veces sin problema.
Con respecto a la funcion, no lo creo, porque no está dentro de ninguna funcion la variable $tabla (no necesito global x que lo probe y no funciona).
Con respecto a lo del ambito de la funcion, no lo entendí. Si me aclaras, te lo agradeceré.
He estado googleando hace 3 días y nada. He encontrado que a varios se les ha presentado el problema, pero no lo han podido solucionar: le han puesto comillas, sacado el () a include, etc. Espero ser el primero, para ver que otro tambien lo pueda solucionar. Gracias!
  #11 (permalink)  
Antiguo 21/12/2009, 05:21
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Intento por ultima vez

Alguien sabe? Muchas gracias.
  #12 (permalink)  
Antiguo 21/12/2009, 10:14
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Intento por ultima vez

Me he fijado por todas partes. No he podido solucionar el error. Si alguien sabe algo, por favor, envieme alguna respuestas. Muchas gracias de antemano.
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 22:58.