Importar variables globales.
Foro: http://zonaps3.es Version: 1.6.8 Hola a todos, despues de tanto tiempo, vengo por estos lares porque hay un error que me tiene de cabeza.. ¿...

Foro: http://zonaps3.es
Version: 1.6.8

Hola a todos, despues de tanto tiempo, vengo por estos lares porque hay un error que me tiene de cabeza..
¿Cómo se importan variables globlales?

El caso es que tengo un archivo .php incluido en el index, que se refresca con ajax, la primera consulta la hace, pero la siguiente me salta el error:

Cita:Fatal error: Call to a member function query() on a non-object in..


El archivo antes de invocar las variables $db ->query(consulta), puse esto:
global $db;
Y si intento incluir el archivo global.php me da error, porque se incluye dos veces (recordemos que estamos incluyendo el archivo dentro de otro, por lo cual en teoría debería de heredar las variables globales, pero no funciona, solo hace la primera consulta, y al darle a siguiente/anterior es cuando da error de consulta).

¿Alguna idea?
Espero vuestros consejos, ya que solo se me ocurre redeclarar la variable, aunque conlleve ciertos riesgos de seguirdad, puesto que en la función de conexión a la bd está la password..
si llamas al global debe funcionar ya que el global llama al init y el init inicia la clace db..
te ayudariamos mas poniendo tu codigo completo!
Última modificación: 28 Aug, 2013, 10:22 am por Pomelete.
Quizás convertiste la variable a un no objeto?
$db = '';
Omar G.
Última modificación: 28 Aug, 2013, 10:21 pm por nicods_20055.
Bueno, voy a explicar mejor el error, y como están estructurados los documentos.

recomendacion.php

<!--Llamamos al script ajax-->
<script language="JavaScript" type="text/javascript" src="javascript/recomendacion-ajax.js"></script>
<!--Contenedor dinámico, donde va a realizar las acciones el script ajax-->
<div id="recomendamos">
<!--Dentro del contenedor incluimos el Crecomendacion.php que es el archivo, que maneja la información enviada a través de ajax-->
	<?php include('Crecomendacion.php')?>
</div>


recomendacion-ajax.js

//Funcion principal de ajax
function objetoAjax(){
	var xmlhttp=false;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
		   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
  		}
	}

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

//Funcion que muestra la siguiente id a la actual.
function siguienteR(){
//Asignamos capa sobre la que enviaremos los datos.
	recomendamos = document.getElementById('recomendamos');
//Asignamos la id siguiente, que será la cogida del formulario oculto.
	id=document.Frecomendados.Nrecomendado.value;
	ajax=objetoAjax();
	ajax.open("GET", "../Crecomendación.php?id="+id,true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
//Si está todo correcto enviamos los datos a esa capa.
			recomendamos.innerHTML = ajax.responseText
		}
	}
	ajax.send(null);
}

//IGual que la funcion siguienteR, pero enviando el anterior id a la actual.
function anteriorR(){
	recomendamos = document.getElementById('recomendamos');
	id=document.Frecomendados.Lrecomendado.value;
	ajax=objetoAjax();
	ajax.open("GET", "../Crecomendamos.php?id="+id,true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			recomendamos.innerHTML = ajax.responseText
		}
	}
	ajax.send(null);
}


Crecomendacion.php

<?php
define("IN_MYBB", 1);
//require './global.php';
global $db;
//Si no recibimos ninguna id..
if(empty($_GET['id']))
{
	$Qrecomendados=$db -> query("consulta sql");
	$Rrecomendados=$db -> fetch_array($Qrecomendados);
	$id=$Rrecomendados['id'];
	$image=$Rrecomendados['imagen'];
	$text=$Rrecomendados['texto'];
}
//Si recibimos id..
else
{
	$id=$_GET['id'];
	$Qrecomendados=$db -> query("consulta");
	$Rrecomendados=$db -> fetch_array($Qrecomendados);
}
//Mostramos el recomendado actual.
echo
'<a href="',$Rrecomendados['uri'],'">
<img src="',$Rrecomendados['imagen'],'" alt="',$Rrecomendados['titulo'],'" title="',$Rrecomendados['titulo'],'" style="width:250px;height:182px;" /></a>',
'<div class="" style="height:35px;padding:0px 2px 0px 4px;margin-top:-21px;color:white;background:rgba(255,255,255,0.1);">'
,$Rrecomendados['texto'],
'</div>';

//Seleccionamos el recomendado siguiente, que sea mayor que el actual.
$Qrecomendadosm=$db -> query("consulta");
$Rrecomendadosm=$db -> fetch_array($Qrecomendadosm);
$idn=$Rrecomendadosm['id'];
//Seleccionamos el recomendado anterior, que sea menor al actual.
$Qrecomendadosp=$db->query(consulta");
$Rrecomendadosp=$db->fetch>array($Qrecomendadosp);
$idl=$Rrecomendadosp['id'];

echo'
<form name="Frecomendados" action="">';
//Si no hay id mayor que la actual para determinar la siguiente
//o menor que la actual para determinar la anterior..

if(empty($idn))
{
	
	//Siguiente recomendado será la primera id que haya con el estado 1
	//dado que si no hay ninguna mayor que la actual, se habrá de empezar por el principio
	$Qrecomendadosm=$db->query("consulta");
	$Rrecomedadosm=$db->fetch_array($Qrecomendadosm);
	$idn=$Rrecomendadosm['id'];
	echo '<input type="hidden" value="',$idn,'" name="Nrecomendado" />';
	
}
else
{
	echo '<input type="hidden" value="',$idn,'" name="Nrecomendado" />';
}
if (empty($idl))
{
	
	//Anterior recomendado será la última id que haya con el estado 1
	//dado que si no hay ninguna menor que la actual, se habrá de empezar por el final
	$Qrecomendadosp=$db->query("consulta");
	$Qrecomendadosp=$db->fetch_array($Qrecomendadosp);
	$idl=$Rrecomendadosp['id'];
	echo'
		<input type="hidden" value="',$idl,'" name="Lrecomendado"/>';
}
else
{
	echo '
		<input type="hidden" value="',$idl,'" name="Lrecomendado"/>';
}
echo'
</form>
<div style="float:right;background:#3F3F3F;margin-top:-213px;">
	<span onclick="anteriorR()" id="anteriorR">
		<img src="/images/icons/last.png" alt="anterior" title="anterior" />
	</span>
	<span onclick="siguienteR()" id="siguienteR">
		<img src="/images/icons/next.png" alt="siguiente" title="siguiente" />
	</span>
</div>';
?>



(He borrado las consultas, porque no me gusta colocarlas públicamente, pero no es problema de las consultas, ya que poniendo yo mi propia funcion $db2 (creada por mí) si funciona todo, pero quiero que sea con la predefinida por mybb, pero con esta únicamente se muestra el resultado inicial. -lo podeis ver porque en la página http://zonaps3.es en la zona recomendamos sale "prueba", si no funcionase la función correctamente, no funcionaría nunca...-).

¿Alguna solución?
Muchas gracias por su atención.

EDIT:
Acabo de "descubrir", que solo se realiza la primera consulta (Es decir la que muestra la recomendación actual).
La que tiene que mostrar la recomendación o siguiente no se realiza esa consulta sql.
Y están igual definidas, si no mirad:
//Esta es la primera consulta, y si se ejecuta. (Obtiene primera recomendación o la actual).
$Qrecomendados=$db -> query("consulta");
$Rrecomendados=$db -> fetch_array($Qrecomendados);

//Esta consulta no se ejecuta. (Que sería la anterior o la siguiente).
$Qrecomendadosm=$db -> query("consulta");
$Rrecomendadosm=$db -> fetch_array($Qrecomendadosm);

En serio, ¿What the fuck? Y si fuese problema de que no se recibe id, o no hay siguiente, no sería ningun problema porque elegiría el primero. (Igual que si no hay último...)
Última modificación: 29 Aug, 2013, 6:51 pm por manu92gs.
En recomendacion.php no requires global.php
//require './global.php';

Como es AJAX, con init.php te bastara (supongo..).
Omar G.
Colaboradores
Omar G. Edson Ordaz
This forum uses Lukasz Tkacz MyBB addons.