kaito
Member
Hi to everyone !!
I have a calc element that makes some sql queries to obtain data and uses that data to make calculation to return a value.
Code used in calc element:
When I run the web, it gives me an error:
JSON encode error! Inf and NaN cannot be JSON encoded
Using var_dump to check every variable used, I have focused that the problem is in line 73 when I try to make this division:
$respuestavalor10 = ($recorridorespuesta*10)/$recorridocompleto;
Both variables, $recorridorespuesta and $recorridocompleto are floats, verified using return var_dump(is_float($recorridorespuesta)), both return bool(true). So, I am trying to divide 2 floats but I can´t because error appears.
If I delete the division as:
$respuestavalor10 = $recorridorespuesta*10;
No error is reported (but obviously $respuestavalor10 is not valid for me without the division).
I looked for in the forum and I just found some post similar https://fabrikar.com/forums/index.p...ror-inf-and-nan-cannot-be-json-encoded.51560/ but with no clue about the solution.
Please, any suggestion will be welcome.
I have a calc element that makes some sql queries to obtain data and uses that data to make calculation to return a value.
Code used in calc element:
PHP:
//busco el valor raw (que es la id de la respuesta) que selecciono con el radiobutton
$idrespuesta=(int)'{afab_votacioncursotipo01___hamantenidocontactovisual_raw}';
//hago la consulta a la bbdd de qué valor tiene la respuesta con ese id, ver sintaxis en https://docs.joomla.org/Selecting_data_using_JDatabase
$db = JFactory::getDbo();
$query = $db
->getQuery(true)
->select('respuestavalor')
->from($db->quoteName('afab_opcionesrespuestas'))
->where($db->quoteName('id')." = ". $db->quote($idrespuesta));
$db->setQuery($query);
$respuestavalor = $db->loadResult();
$respuestavalor = (float) $respuestavalor;
//hago la consulta a la bbdd para saber qué peso tiene esa pregunta dentro del bloque, para ello primero debo obtener que id_preguntas es
$db = JFactory::getDbo();
$query = $db
->getQuery(true)
->select('id_preguntas')
->from($db->quoteName('afab_opcionesrespuestas'))
->where($db->quoteName('id')." = ". $db->quote($idrespuesta));
$db->setQuery($query);
$idpreguntas = $db->loadResult();
//hago la consulta a la bbdd para saber qué peso tiene esa pregunta dentro del bloque, para ello conociendo el idpreguntas ahora busco el peso
$db = JFactory::getDbo();
$query = $db
->getQuery(true)
->select('preguntapeso')
->from($db->quoteName('afab_preguntas'))
->where($db->quoteName('id')." = ". $db->quote($idpreguntas));
$db->setQuery($query);
$preguntapeso = $db->loadResult();
//CALCULO VALOR RESPUESTA EN BASE 10
//conociendo el idpregunta, de cara a calcular el valor en base 10 de la respuesta, voy a consultar el valor de respuesta mínimo que tiene
$db = JFactory::getDbo();
$query = $db
->getQuery(true)
->select('MIN('.$db->quoteName('respuestavalor').')')
->from($db->quoteName('afab_opcionesrespuestas'))
->where($db->quoteName('id_preguntas')." = ". $db->quote($idpreguntas));
$db->setQuery($query);
$respuestavalormin = $db->loadResult();
$respuestavalormin = (float) $respuestavalormin;
//conociendo el idpregunta, de cara a calcular el valor en base 10 de la respuesta, voy a consultar el valor de respuesta máximo que tiene
$db = JFactory::getDbo();
$query = $db
->getQuery(true)
->select('MAX('.$db->quoteName('respuestavalor').')')
->from($db->quoteName('afab_opcionesrespuestas'))
->where($db->quoteName('id_preguntas')." = ". $db->quote($idpreguntas));
$db->setQuery($query);
$respuestavalormax = $db->loadResult();
$respuestavalormax = (float) $respuestavalormax;
//Calculo el recorrido que hay entre el valor mínimo y el valor máximo
$recorridocompleto = $respuestavalormax - $respuestavalormin;
//calculo el recorrido de nuestra respuesta, diferenciando el caso de que el valor respuesta sea positivo o negativo
if ($respuestavalor > 0) {
$recorridorespuesta = abs($respuestavalormin) + $respuestavalor;
}
else {
$recorridorespuesta = abs($respuestavalormin) - abs($respuestavalor);
}
//regla de 3 para sacar el valor de la respuesta en base 10
$respuestavalor10 = ($recorridorespuesta*10)/$recorridocompleto;
//hago la consulta a la bbdd para saber qué peso tiene ese bloque, para ello debo primero saber a que id_bloques pertenece la idpreguntas. 10.01.2021: NO LO VOY A UTILIZAR, el peso del bloque lo pondré a pelo en plotalot
//$db = JFactory::getDbo();
//$query = $db
// ->getQuery(true)
// ->select('id_bloques')
// ->from($db->quoteName('afab_preguntas'))
// ->where($db->quoteName('id')." = ". $db->quote($idpreguntas));
//$db->setQuery($query);
//$idbloques = $db->loadResult();
//hago la consulta a la bbdd para saber qué peso tiene ese bloque, para ello conociendo el id_bloques ahora busco el bloquepeso. 10.01.2021: NO LO VOY A UTILIZAR, el peso del bloque lo pondré a pelo en plotalot
//$db = JFactory::getDbo();
//$query = $db
// ->getQuery(true)
// ->select('bloquepeso')
// ->from($db->quoteName('afab_contenidotipocursos'))
// ->where($db->quoteName('id_tipocursos')." = 1")
// ->where($db->quoteName('id_bloques')." = ". $db->quote($idbloques));
//$db->setQuery($query);
//$bloquepeso = $db->loadResult();
//hago la fórmula para hallar el valor ponderado (por peso pregunta dentro del bloque) de la respuesta NOTA: el peso del bloque en el curso lo introduciré desde plotalot
$puntosrespuestaponderada = $preguntapeso * $respuestavalor10;
return $puntosrespuestaponderada;
When I run the web, it gives me an error:
JSON encode error! Inf and NaN cannot be JSON encoded
Using var_dump to check every variable used, I have focused that the problem is in line 73 when I try to make this division:
$respuestavalor10 = ($recorridorespuesta*10)/$recorridocompleto;
Both variables, $recorridorespuesta and $recorridocompleto are floats, verified using return var_dump(is_float($recorridorespuesta)), both return bool(true). So, I am trying to divide 2 floats but I can´t because error appears.
If I delete the division as:
$respuestavalor10 = $recorridorespuesta*10;
No error is reported (but obviously $respuestavalor10 is not valid for me without the division).
I looked for in the forum and I just found some post similar https://fabrikar.com/forums/index.p...ror-inf-and-nan-cannot-be-json-encoded.51560/ but with no clue about the solution.
Please, any suggestion will be welcome.