Tasker Para hablar de todo lo relacionado con la aplicación tasker

Respuesta
 
Herramientas
  #1  
Viejo 23/09/17, 23:06:54
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
Crear un WebService con PHP - Iteractuar con una DB SQL en la Web

A raíz de una consulta que hice en este foro http://www.htcmania.com/showthread.php?t=1349091 para mejorar la comunicación con una Base de datos (DB de ahora en adelante) ubicada en Dropbox, usando la app Dropsync, al compañero @WillyWeb se lo ocurrió la ingeniosa idea de montar la DB en un alojamiento web gratuito para acceder a ella desde Tasker.

Como ha sido un hilo en el que se ha trabajado a base de ensayo y error, puede ser un poco engorroso de entender, y dado que el que cometía los errores solía ser yo, me veo obligado moralmente a intentar recoger toda la información para que se pueda entender de forma más sencilla.

Antes de continuar, quiero dejar claro que TODO lo que voy a explicar en este tutorial, me lo ha facilitado @WillyWeb, incluso mucho contenido del texto, lo he copiado y pegado literalmente de sus comentarios.

1. PREPARACIÓN DB y SUBDOMINIO

Registrarse en una página que ofrezca alojamiento web. Yo particularmente lo he hecho en la página http://www.atspace.com.

Crear una DB MySQL. Una vez creada se puede administrar desde phpMyAdmin. En mi caso he creado una DB con una tabla denominada goleadores, con la siguiente estructura:

goles (INTYINT) jugador (VARCHAR) usuario (VARCHAR)

Crear un subdominio.
Panel de control > Herramientas de alojamiento > Gestor de dominios > Crear un Subdominio Gratuito.
Selecciona uno de los dominios base que te ofrecen y escribe en la casilla una palabra que te guste. La idea es componer una dirección web de esta forma...

http://miweb.atspace.cc

Esa será la dirección base (el servidor) de la URL del WebService.

2. CREAR UN WEBSERVICE CON PHP

La información se ha obtenido en esta página: http://tosblama.blogspot.com.es/2015...e-con-php.html y las modificaciones necesarias para conseguir hacerlo funcionar, las ha aportado @WillyWeb.

Para entender como funciona, recomiendo entrar en la página, ya que está mucho mejor explicado de lo que lo pueda hacer yo.

Básicamente el sistema se basa en dos archivos. Un PHP (webservice.php) con el código del WebService y un XML (opciones.xml) con las consultas SQL que usa el proyecto.

A continuación copio el código PHP que yo he utilizado, pero antes, es importante recalcar que en necesario cambiar la línea 56 e indicar los datos correspondientes a vuestra DB. Como al copiar el código no se han mantenido los números de las líneas, puede resultar más complicado localizarla, así que busca la palabra "CONTRASEÑA" en el código y tómalo como referencia.

[PHP]<?php
// Recoger parámetros de entrada. Se permite GET y POST
$paramOpcion = $_REQUEST['opcion'];
$paramLista = $_REQUEST['listaParametros'];
$formato = strtolower($_REQUEST['format']) == 'xml' ? 'xml' : 'json';

// Obtener consulta SQL a ejecutar
$sql = getSQL($paramOpcion);
$sql = aplicarParametrosSQL($sql,$paramLista);

// Lanzar consulta a la base de datos
if ($sql == '')
die ('Opcion incorrecta');
else
{
$datos = getArrayDatos($sql);
echo formatData($datos,$formato);
}


// Dado un nombre de opción, buscar en el xml su SQL correspondiente
function getSQL($nombreOpcion)
{
$xmlOpciones = simplexml_load_file('opciones.xml');
$sql = "";
foreach ($xmlOpciones->opcion as $opcion)
{
$nombre = $opcion->nombre;
if ($nombre == $nombreOpcion)
{
$sql = $opcion->SQL;
break;
}
}
return $sql;
}

// Aplicar parámetros de la sentencia SQL
function aplicarParametrosSQL($sql, $listaPametros)
{
if ($listaPametros != '')
{
$arrParam = explode(':',$listaPametros);
for ($i=0; $i<count($arrParam); $i++)
{
$nomParam = '#PARAMETRO_'.($i+1).'#';
$valor = $arrParam[$i];
$sql = str_replace($nomParam, $valor, $sql);
}
}
return $sql;
}

function getArrayDatos($sql)
{
$db = mysqli_connect('fdb17.atspace.me','codigo_promunio ','CONTRASEÑA','codigo_promunio') or die('No se pudo conectar con la base de datos');
//mysql_select_db('2454802_promunio',$db) or die('No se pudo seleccionar la base de datos.');
$resul = mysqli_query($db,$sql) or die('Consulta incorrecta: '.$sql);

/* create one master array of the records *
$datos = array();
if(mysqli_num_rows($resul))
{
while($row = mysqli_fetch_assoc($resul))
{
$datos[] = $row;
}
}

/* disconnect from the db *
mysqli_close($db);

/* Return data array *
return $datos;
}

function formatData($data,$format='json')
{
if($format == 'json' || $format == 'jsonp')
{
header('Content-type: application/json');
if (isset($_REQUEST['callback'])) // Peticiones ajax
return $_REQUEST['callback'].'('.json_encode($data).')';
else
return json_encode($data);
}
else
{
header('Content-type: text/xml');
$xml = new SimpleXMLElement('<response/>');
return array2xml($data, $xml);
}
}

function array2xml($array, $xml = false)
{
if($xml === false)
{
$xml = new SimpleXMLElement('<root/>');
}
foreach($array as $key => $value)
{
if(is_array($value))
{
//array2xml($value, $xml->addChild($key));
array2xml($value, $xml->addChild('item'));
}
else
{
$xml->addChild($key, htmlspecialchars($value));
}
}
return $xml->asXML();
}

?>[/PHP]

Y a continuación pongo el código XML.

Código:
<?xml version="1.0" encoding="utf-8" ?>
<OpcionesDisponibles>
  <opcion>
    <nombre>listajugadores</nombre>
    <SQL>SELECT goles,jugador,usuario FROM goleadores</SQL>
  </opcion>
    <opcion>
    <nombre>insertar</nombre>
    <SQL>UPDATE goleadores SET goles = (goles+1) WHERE jugador LIKE "MESSI"</SQL>
  </opcion>
</OpcionesDisponibles>
Si os fijáis bien en el XML tienes varios bloques <opcion>...</opcion>, uno por cada sentencia SQL que se desee lanzar. Dentro de cada <opcion> tienes un <nombre>...</nombre> y un <SQL>...</SQL>.

En <nombre> se puede poner lo que queráis pero recomiendo usar términos descriptivos del propósito de la sentencia SQL. Si has creado una sentencia para listar los goles de un jugador yo usaría 'golesjugador'. Si tienes otra para obtener el listado de todos los jugadores podrías usar 'listajugadores'. Y así con todas las demás sentencias necesarias.

La palabra que pongamos entre las etiquetas <nombre>, será la que debamos usar en la acción HTTP Get, para ejecutar la sentencia SQL deseada. Eso se detallará más adelante.

Evidentemente en el campo <SQL> hay que poner la sentencia SQL, pero con un pequeño matiz. Si esa sentencia tiene un parámetro que pueda ser variable (como el nombre del jugador) debes poner '#PARAMETRO_1#' en su lugar (mira la línea 9 del XML del siguiente enlace (https://pastebin.com/jbWf708h). Si la sentencia tiene más de un parámetro de ese tipo pones '#PARAMETRO_1#' y '#PARAMETRO_2#'. Y así con todos los parámetros que necesite la sentencia.

3. DE VUELTA AL PANEL DE CONTROL DEL ALOJAMIENTO (HOSTING)

Una vez creados los archivos webservice.php y opciones.xml como se ha explicado en el punto anterior, hay que copiarlos a la raíz de la DB, utilizando un gestor de archivos que se muestra al hacer click sobre la etiqueta "Administrar archivos".

4. TASKER


Ejecutamos una acción HTTP Get, e indicamos en la pestaña Servidor:Puerto lo siguiente:

Código:
http:/Nombre del subdominio/webservice.php?opcion=nombreopción&format=json.
En mi caso concreto pongo esto:

Código:
http:/pruminio.atspace.eu/webservice.php?opcion=listajugadores&format=json
La parte de la URL con la que se selecciona el formato (&format=json) es opcional. Si se indica, el valor por defecto es "json"

Seguramente os hayáis dado cuenta que el nombre de opción listajugadores es el que usado en el código xml.

<nombre>listajugadores</nombre>

Como ya he comentado, se usa para determinar que sentencia SQL vamos a ejecutar.

Lo que devuelve el WebService es un objeto JSON y en mi caso queda así, y queda alojado en la variable incorporada %HTTPD

[{"goles":"7","jugador":"RONALDO","usuario":"SANDRO "},{"goles":"8","jugador":"MORATA","usuario":"BIFU "},
{"goles":"9","jugador":"LUIS SUAREZ","usuario":"RICHY"},{"goles":"15","jugador" :"MESSI","usuario":"RAUL"}]


También podemos abrir el enlace desde el navegador, y deberemos de obtener el mismo resultado.

A día de hoy, todavía no he logrado obtener únicamente el contenido de los campos de la tabla, pero según indica WillyWeb, es facil de procesar con Javascript. En cuanto tenga más información la añadiré.
SOLUCIÓN: http://www.htcmania.com/showthread.php?t=1349091&page=4

La acción "Consulta SQL" devuelve el resultado en un array. Cada elemento del array es una fila del resultado. Cada elemento/fila contiene los valores de las columnas separados por el símbolo que pongamos en el campo correspondiente de la acción.

Lo que el WebService devuelve es un JSON compuesto por un array de objetos. Cada elemento del array es una fila del resultado. Cada elemento/fila contiene los valores de las columnas en un objeto con parejas "nombre_columna : valor" separadas por comas.

En un vistazo rápido vemos que "casi" es lo mismo, pero sobra lo de los objetos y los nombres de las columnas. Pues quitamos lo que sobra y listo...

Código:
ConvierteJSONenArrayLocal (999)
	A1: HTTP Get [ Servidor:pruminio.atspace.eu Ruta:webservice.php Atributos:opcion=listajugadores ] 
	A2: JavaScriptlet [ Código://Convierte JSON a un array local
json=global('HTTPD');

json=json.replace(/"goles":/g,"")
json=json.replace(/"jugador":/g,"")
json=json.replace(/"usuario":/g,"")
json=json.replace(/"listado":/g,"")

json=json.replace(/"/g,"") //dos comillas dobles

json=json.replace(/{|}/g,'"') //comilla simple + doble + simple

var array=[]
array=JSON.parse(json)
	A3: Flash [ Texto:%array(#) registros ]
Esta tarea lanza la consulta al WebService (A1). Procesa el JSON usando JS convirtiéndolo en un array similar al de la acción "Consulta SQL" (A2). Y finalmente muestra el tonal de filas/elementos obtenidos (A3).

Para guardar el resultado en un array global en vez de en un array Global, hay que utilizar este otro código, que funciona perfectamente a pesar de que la documentación de Tasker indica que no se pueden crear arrays globales desde JS

Código:
ConvierteJSONenArrayGlobal (666)
	A1: HTTP Get [ Servidor:pruminio.atspace.eu Ruta:webservice.php Atributos:opcion=listajugadores ] 
	A2: Array Clear [ Matriz de Variables (array):%MiArray ] 
	A3: JavaScriptlet [ Código://Convierte JSON a un array global
json=global('HTTPD');

json=json.replace(/"goles":/g,"")
json=json.replace(/"jugador":/g,"")
json=json.replace(/"usuario":/g,"")
json=json.replace(/"listado":/g,"")

json=json.replace(/"/g,"") //dos comillas dobles

json=json.replace(/{|}/g,'"') //comilla simple + doble + simple

json=JSON.parse(json)

for(ind=0;ind<json.length;ind++)
{
nom="MiArray"+(ind+1)
setGlobal(nom,json[ind])
}
	A4: Flash [ Texto:%MiArray(#) registros ]
En la versión para array local el nombre del array se define en estas dos líneas del JavaScriptlet...

var array=[]
array=JSON.parse(json)


En la versión para array global el nombre se define en esta otra línea...

nom="MiArray"+(ind+1)

*Hay que tener en cuenta que ese nombre es el mismo que hay que poner en la acción "Array Clear" que va justo antes de la acción JavaScriptlet.

Funcionamiento de este JavaScriptlet paso a paso...

Código:
//Convierte JSON a un array global
json=global('HTTPD')

json=json.replace(/"goles":/g,"")
json=json.replace(/"jugador":/g,"")
json=json.replace(/"usuario":/g,"")
json=json.replace(/"listado":/g,"")

json=json.replace(/"/g,"") //dos comillas dobles

json=json.replace(/{|}/g,'"') //comilla simple + doble + simple

json=JSON.parse(json)

for(ind=0;ind<json.length;ind++)
{
nom="MiArray"+(ind+1)
setGlobal(nom,json[ind])
}
El JSON que devuelve el WebService tiene esta pinta...

Código:
[{"goles":"7","jugador":"RONALDO","usuario":"SANDRO "},{"goles":"8","jugador":"MORATA","usuario":"BIFU "},
{"goles":"9","jugador":"LUIS SUAREZ","usuario":"RICHY"},{"goles":"15","jugador" :"MESSI","usuario":"RAUL"}]
Y ya hemos quedado en que tenemos que convertirlo en algo similar a lo que devuelve la acción "Consulta SQL", es decir, una array de elementos (filas) con valores (columnas) separados por comas (o lo que queramos).

Esta línea...
json=global('HTTPD')
...pasa la variable global %HTTPD a JS usando la función global(), que es un añadido de Tasker. El valor queda almacenado en la variable "json".

Este bloque...
json=json.replace(/"goles":/g,"")
json=json.replace(/"jugador":/g,"")
json=json.replace(/"usuario":/g,"")
json=json.replace(/"listado":/g,"")
...quita los nombres de los campos. Puedes añadir tantas líneas como necesites.

Esta línea...
json=json.replace(/"/g,"") //dos comillas dobles
...quita todas las comillas dobles.

Esta línea...
json=json.replace(/{|}/g,'"') //comilla simple + doble + simple
...cambia las llaves (abrir y cerrar) por una comilla doble.

Después de pasar por esas líneas el JSON inicial debería tener esta pinta...

Código:
["7,RONALDO,SANDRO","8,MORATA,BIFU","9,LUIS SUAREZ,RICHY","15,MESSI,RAUL"]
Ahora tenemos que decidir si queremos el resultado en un array local o global.

Si queremos el resultado en un array global pondremos esta línea...
json=JSON.parse(json)
...con la que convertimos ese JSON "modificado" en un array haciendo uso del "parser" JSON de JavaScript.

Y luego pondremos este bucle...
for(ind=0;ind<json.length;ind++)
{
nom="MiArray"+(ind+1)
setGlobal(nom,json[ind])
}
...que hace lo que se supone que no se puede hacer, pasar un array global de JS a Tasker. El bucle recorre cada elemento del array "json", crea un nombre para cada elemento del array global de Tasker con su número de índice corregido (uno más que en JS) y pasa el valor del array a esa variable de Tasker usando su función añadida setGlobal().
Si quisieramos el resultado en un array local deberíamos poner esto otro...

var array=[]
array=JSON.parse(json)

El matíz está en esa línea "var array=[]" que define la variable "array" como un array local para la tarea Tasker que contiene el JavaScriptlet.

Última edición por Rsc Día 29/10/17 a las 13:21:19.
Responder Con Cita
Los siguientes 4 usuarios han agradecido a Rsc su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]


  #2  
Viejo 14/03/18, 16:57:51
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
Hola, he leido tu trabajo y me parece aparte de interesante muy ingenioso he tenido la oprtunidad de que has compartido un video con lo que hace tu tabla de goleadores y me parece asombroso.

quiero iniciar una idea, donde llevar en una tabla similar a la tuya pero donde se lleve un control de personas que te deban y cuanto te han abonado pero no se donde empezar.

tengo la idea en la cabeza la cual describo:

terminar el proyecto exportando a APK donde cada usuario (cliente y admon) tenga la app por ejemplo WillyWeb me debe 100 pavos y cada semana me va a dar 10 llevar una simple relación donde pueda ver el online y yo agregar los pagos que me va haciendo.

cambe mencionar que cada vez que el me de $$$ me gustaria ver que posibilidad hay de agregar una firma digital con esta idea:

Ir al link original:





así cada vez que me pague puede haber un respaldo de que recibí dinero.

¿crees poder orientarme?
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #3  
Viejo 14/03/18, 21:36:52
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
Crear una DB MySQL. Una vez creada se puede administrar desde phpMyAdmin. En mi caso he creado una DB con una tabla denominada goleadores, con la siguiente estructura:

goles (INTYINT) jugador (VARCHAR) usuario (VARCHAR)
inicie con esto, pero no estoy seguro si estoy creando bien la tabla en la parte de abajo esta el ejemplo en Excel de como debe de quedar el ejemplo.

Saludos! y gracias por tomarse el tiempo de leerme.
Imágenes Adjuntas
Tipo de Archivo: png Captura_1.PNG (78.1 KB, 57 visitas)
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #4  
Viejo 14/03/18, 23:55:14
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
cada usuario (cliente y admon) tenga la app por ejemplo WillyWeb me debe 100 pavos y cada semana me va a dar 10 llevar una simple relación donde pueda ver el online y yo agregar los pagos que me va haciendo.
Hasta aquí es relativamente fácil, porque básicamente es lo mismo, cambiando las tablas, las consultas SQL, y adaptando el código un poco a tus necesidades.

 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
me gustaria ver que posibilidad hay de agregar una firma digital con esta idea
Nunca he utilizado firmas digitales, por lo tanto no tengo ni idea de si Tasker puede encargarse de eso o no.

 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
inicie con esto, pero no estoy seguro si estoy creando bien la tabla en la parte de abajo esta el ejemplo en Excel de como debe de quedar el ejemplo.
En principio, teniendo en cuenta el excel que has compartido, creo que la tabla que has creado es correcta, aunque es probable, que para este caso sea más apropiado usar un tipo de dato numérico que permita decimales, como float o double, ya que INT, únicamente permite almacenar números enteros.

Además de ese dato, también esta bien que tengas en cuenta, cuanto almacenamiento requiere cada uno de los datos. Por ejemplo, antes has usado INT... desconozco lo que te tienen que pagar, pero si supera los 10 dígitos, quizás es mejor que en vez de hacer una aplicación para controlarlo, te vayas a sus casas a buscarlos. Lo que te quiero decir es que INT permite números enteros de hasta 10 dígitos y ocupa 8 bytes, y por ejemplo SMALLINT, permite números enteros de hasta 5 dígitos, y ocupa 2 bytes.

Con float y double pasa algo parecido, así que mira cual te conviene más.

Realmente no se si esto se nota a la hora de interactuar con la DB para que vaya más fluida o no... pero supongo que algo si que afectará, y luego se agradece que los cambios en la app se realicen lo más rápido posible.
Responder Con Cita
  #5  
Viejo 15/03/18, 00:22:12
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
como float o double, ya que INT, únicamente permite almacenar números enteros.
tomo esta opinión ya que no pasa de los 5 dígitos los montos... solo que aun no comprendo bien como funcionan los terminos.

en cuanto al proyecto ¿crees poder apoyarme en validar que hacer para iniciar un nuevo tema?

de antemano gracias por tu respuesta!
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #6  
Viejo 15/03/18, 00:37:56
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
¿crees poder apoyarme en validar que hacer para iniciar un nuevo tema?
Tu inicia el tema, que en este foro siempre hay gente dispuesta a echar un cable. Yo también te ayudaré en lo que pueda, pero ten en cuenta que es un proyecto que hice muy guiado por WillyWeb, y es probable que como algo se complique un poco, yo no vaya a saber solucionarlo.

Empieza por seguir paso a paso, todo el resumen que dejé, e intenta apoyarte también en el hilo donde surgió todo https://www.htcmania.com/showthread.php?t=1349091

Por cierto, cuando finalices el proyecto, acuérdate de poner alguna condición, para que los que te deben pasta no puedan hacer modificaciones en la base de datos.
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 17/03/18, 22:14:04
Array

[xs_avatar]
SmartPhoneLover SmartPhoneLover no está en línea
Usuario muy activo
 
Fecha de registro: jun 2016
Mensajes: 542
Tu operador: Movistar

Simplemente IMPECABLE!

Muchisimas gracias por compartir este grandioso y tan valioso material!!!!! ;)
Responder Con Cita
Gracias de parte de:
  #8  
Viejo 21/03/18, 18:18:16
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
Lo que devuelve el WebService es un objeto JSON y en mi caso queda así, y queda alojado en la variable incorporada %HTTPD
Hola, otra vez molestando por aqui... lo que me devuelve el servidor es lo siguiente:



por lo que puedo apreciar no es por motivo de contraseña que no este conectando podrias orientarme que esta mal?

de hecho en la sentencia del webservice.php la linea 56 la modifique como mencionan:

('servidor','usuario','password','ba se_datos')

de antemano gracias por tomarte el tiempo de leer esto.
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #9  
Viejo 21/03/18, 22:30:32
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
No sé ve lo que te devuelve el servidor
Responder Con Cita
  #10  
Viejo 21/03/18, 23:02:51
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
No sé ve lo que te devuelve el servidor
precisamente es lo que me devuelve el servidor... entiendo que si no conectara por la contraseña o usuario el error seria diferente:

Imágenes Adjuntas
Tipo de Archivo: png ASDSAAA.PNG (32.5 KB, 45 visitas)
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #11  
Viejo 22/03/18, 22:06:54
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
Creo que vas a tener que copiar el php y el XML para que podamos ayudarte a localizar el error
Responder Con Cita
  #12  
Viejo 23/03/18, 12:53:28
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
quiero iniciar una idea, donde llevar en una tabla similar a la tuya pero donde se lleve un control de personas que te deban y cuanto te han abonado pero no se donde empezar.

tengo la idea en la cabeza la cual describo:

terminar el proyecto exportando a APK donde cada usuario (cliente y admon) tenga la app por ejemplo WillyWeb me debe 100 pavos y cada semana me va a dar 10 llevar una simple relación donde pueda ver el online y yo agregar los pagos que me va haciendo.
Después de leer tu "declaración de intenciones" la primera pregunta que me surge es...

¿De verdad necesitas un WebService para esto?

El WebService que hicimos en su momento era para compartir una base de datos entre varios usuarios (ese es el principal propósito de un WebService) pero en tu caso no parece imprescindible. Las anotaciones de lo que te han pagado las haces tú y sólo tú. Si quieres que el "deudor" tenga constancia de lo que todavía te debe le haces un justificante cada vez que te pague y tema resuelto.

Otra cosa es que quieras que el deudor pueda "ver" en cualquier momento lo que te debe. Y hasta en ese caso tampoco necesitas montar una aplicación online. Una simple hoja de cálculo compartida te puede solucionar la papeleta. Tú eres el propietario del archivo y haces anotaciones y al "cliente" le das acceso de consulta para que vea tus anotaciones.

 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
cambe mencionar que cada vez que el me de $$$ me gustaria ver que posibilidad hay de agregar una firma digital
Ese sistema que propones no parece que sea para lo que pretendes hacer.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
Gracias de parte de:
  #13  
Viejo 23/03/18, 16:19:56
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Otra cosa es que quieras que el deudor pueda "ver" en cualquier momento lo que te debe.
gracias WillyWeb por responder mi tema y tomarte el tiempo de leerme, como bien mencionas lo mi intención es esta que el deudor pueda ver en cualquier momento "en tiempo real" lo que paga obviamente saltándome el hecho que el deudor tenga que ver una pagina compartida de excel tenga que ingresar a una nube para visualizarla.

Mi intención es prepararle una aplicación (creada con Tasker) donde pueda entrar con usuario y contraseña ya que no solo es un deudor son varios entonces el control seria unitario... ya que con hoja de excel compartida tendría que hacer una por usuario...

en cuanto a lo de la firma digital que etiquetaste abajo... era una idea para que tenga una constancia de la parte del deudor que en tal fecha me pago y quede evidencia (esto creo que es muy avanzado por lo que menciona @Rsc entonces me quedaría con la primer idea...

Aunado que lo quiero tomar como practica para aprender lo que bien enseñan por aquí...

se me hace interesante la interacción online. gracias por tu tiempo y tu opinión es bienvenida, si bien mencionas que definitivamente no es necesario. también lo tomo en cuenta.
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
Gracias de parte de:
  #14  
Viejo 23/03/18, 16:26:21
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
Creo que vas a tener que copiar el php y el XML para que podamos ayudarte a localizar el error
claro estimado!

[PHP]<?php
// Recoger parametros de entrada. Se permite GET y POST
$paramOpcion = $_REQUEST['opcion'];
$paramLista = $_REQUEST['listaParametros'];
$formato = strtolower($_REQUEST['format']) == 'xml' ? 'xml' : 'json';

// Obtener consulta SQL a ejecutar
$sql = getSQL($paramOpcion);
$sql = aplicarParametrosSQL($sql,$paramLista);

// Lanzar consulta a la base de datos
if ($sql == '')
die ('Opcion incorrecta');
else
{
$datos = getArrayDatos($sql);
echo formatData($datos,$formato);
}


// Dado un nombre de opcion, buscar en el xml su SQL correspondiente
function getSQL($nombreOpcion)
{
$xmlOpciones = simplexml_load_file('opciones.xml');
$sql = "";
foreach ($xmlOpciones->opcion as $opcion)
{
$nombre = $opcion->nombre;
if ($nombre == $nombreOpcion)
{
$sql = $opcion->SQL;
break;
}
}
return $sql;
}

// Aplicar parametros de la sentencia SQL
function aplicarParametrosSQL($sql, $listaPametros)
{
if ($listaPametros != '')
{
$arrParam = explode(':',$listaPametros);
for ($i=0; $i<count($arrParam); $i++)
{
$nomParam = '#PARAMETRO_'.($i+1).'#';
$valor = $arrParam[$i];
$sql = str_replace($nomParam, $valor, $sql);
}
}
return $sql;
}

function getArrayDatos($sql)
{
$db = mysqli_connect('fdb19.atspace.me','2657215_contado r','a123456789','contadormx') or die('No se pudo conectar con la base de datos');
//mysql_select_db('2657215_contador',$db) or die('No se pudo seleccionar la base de datos.');
$resul = mysqli_query($db,$sql) or die('Consulta incorrecta: '.$sql);

/* create one master array of the records *
$datos = array();
if(mysqli_num_rows($resul))
{
while($row = mysqli_fetch_assoc($resul))
{
$datos[] = $row;
}
}

/* disconnect from the db *
mysqli_close($db);

/* Return data array *
return $datos;
}

function formatData($data,$format='json')
{
if($format == 'json' || $format == 'jsonp')
{
header('Content-type: application/json');
if (isset($_REQUEST['callback'])) // Peticiones ajax
return $_REQUEST['callback'].'('.json_encode($data).')';
else
return json_encode($data);
}
else
{
header('Content-type: text/xml');
$xml = new SimpleXMLElement('<response/>');
return array2xml($data, $xml);
}
}

function array2xml($array, $xml = false)
{
if($xml === false)
{
$xml = new SimpleXMLElement('<root/>');
}
foreach($array as $key => $value)
{
if(is_array($value))
{
//array2xml($value, $xml->addChild($key));
array2xml($value, $xml->addChild('item'));
}
else
{
$xml->addChild($key, htmlspecialchars($value));
}
}
return $xml->asXML();
}

?>[/PHP]

y el xml aun lo estoy modificando pero solo ocupo consultar:

Código:
<?xml version="1.0" encoding="utf-8" ?>
<OpcionesDisponibles>
  <opcion>
    <nombre>listac</nombre>
    <SQL>SELECT Fecha,Compra,Total,Abono,Debe FROM contadormx</SQL>
  </opcion>
</OpcionesDisponibles>
gracias por el interes !
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #15  
Viejo 23/03/18, 20:57:41
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
Parece que el error está en la línea en la cual indicas los parámetros relativos a tu base de datos.

Tendría que quedar así;

('servidor','usuario','password','ba se_datos')

Comprueba que los datos de tu código, coinciden con con los parámetros que hay que pasarle. En mi caso usuario, coincide con base_datos, no recuerdo si coincidió por defecto, o porque yo personalmente le puse el mismo nombre.

Suponiendo que ese fuese el error, la línea referida del código php, tendría que quedar así;

 Cita:
$db = mysqli_connect('fdb19.atspace.me','2657215_contado r','a123456789','2657215_contador') or die('No se pudo conectar con la base de datos');
Responder Con Cita
Los siguientes 2 usuarios han agradecido a Rsc su comentario:
  #16  
Viejo 23/03/18, 21:33:07
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
Parece que el error está en la línea en la cual indicas los parámetros relativos a tu base de datos.

Tendría que quedar así;

('servidor','usuario','password','ba se_datos')

Comprueba que los datos de tu código, coinciden con con los parámetros que hay que pasarle. En mi caso usuario, coincide con base_datos, no recuerdo si coincidió por defecto, o porque yo personalmente le puse el mismo nombre.

Suponiendo que ese fuese el error, la línea referida del código php, tendría que quedar así;
perfecto ya hay conexión (como por algo tan sencillo no avanzaba) , ahora me aparecen datos... únicamente me aparece la leyenda: "Consulta Incorrecta" antes de darme los paremetros y no se por que
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #17  
Viejo 23/03/18, 21:52:50
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
 Cita: Originalmente Escrito por Mx WaR HaBiB Ver Mensaje
me aparece la leyenda: "Consulta Incorrecta"
Copia la URL, el código XML con la opción (Consulta SQL) que estés utilizando, y lo que te devuelve con el error incluido.
Responder Con Cita
Gracias de parte de:
  #18  
Viejo 23/03/18, 22:00:52
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
Copia la URL, el código XML con la opción (Consulta SQL) que estés utilizando, y lo que te devuelve con el error incluido.
perdon, lo habia olvidado.

url: http://contadormx.atspace.cc/webserv...ac&format=json

Código XML:
Código:
<?xml version="1.0" encoding="utf-8" ?>
<OpcionesDisponibles>
  <opcion>
    <nombre>listac</nombre>
    <SQL>SELECT Fecha,Compra,Total,Abono,Debe FROM contadormx</SQL>
  </opcion>
</OpcionesDisponibles>
el error que devuelve la consulta (adjunto imagen)

gracias
Imágenes Adjuntas
Tipo de Archivo: png Captura_4568.PNG (22.3 KB, 39 visitas)
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
  #19  
Viejo 24/03/18, 11:17:29
Array

[xs_avatar]
Rsc Rsc no está en línea
Usuario muy activo
 
Fecha de registro: jun 2011
Mensajes: 502
Modelo de smartphone: Xiaomi Mi5s
Tu operador: Otra
Parece que el error está en la consulta SQL

 Cita:
<SQL>SELECT Fecha,Compra,Total,Abono,Deber FROM contadormx</SQL>
Comparando las columnas que has indicado en la consulta SQL, con las de tu DB, veo que te falta una "R" en la columna Deber

Prueba a corregirlo y nos cuentas.
Responder Con Cita
Los siguientes 2 usuarios han agradecido a Rsc su comentario:


  #20  
Viejo 24/03/18, 18:10:08
Array

[xs_avatar]
Mx WaR HaBiB Mx WaR HaBiB no está en línea
Usuario muy activo
 
Fecha de registro: mar 2014
Localización: Dream Planet
Mensajes: 875
Modelo de smartphone: Galaxy Note 3
Tu operador: Movistar
 Cita: Originalmente Escrito por Rsc Ver Mensaje
Parece que el error está en la consulta SQL



Comparando las columnas que has indicado en la consulta SQL, con las de tu DB, veo que te falta una "R" en la columna Deber

Prueba a corregirlo y nos cuentas.
Gracias por tu respuesta, pero ese no era el problema pero si estaba en la linea que mecionaste.

La tabla creada la realice así: ContadorMx

y la escribi: contadormx

el uso de la MAYUCULAS que use tiene que ser tal cual el del nombre de la Tabla.

Seguiré avanzando, cualquier cosa mantendré informados. Saludos y gracias por el apoyo a todos!
__________________
"Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto"
— Henry Ford —
Responder Con Cita
Los siguientes 2 usuarios han agradecido a Mx WaR HaBiB su comentario:
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Otro software para Android > Tasker



Hora actual: 20:22:57 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /