Internet... necesito un pequeño empujón

Precisamente lo que yo necesito es lo que Diego ha preguntado. Estoy investigando para saber como funciona cada detalle del proceso.

Por ejemplo, json es una sintaxis de datos, que es manipulado con javascript. Corona SDK solo tiene funciones dede codificación de sintaxis y descodificación para poder visualizar los datos.

Yo de momento desconozco como añadir o eliminar registros a la base de datos desde la aplicación Android, mediante un formulario. Pero una vez tenga un poco de información, investigaré la manera de realizarlo.

No se si es necesario tener paginas con scripts para dicha tarea.

Voy a escribir un poco de metacodigo, a ver si voy bien encaminado:

Envio de datos:

Introduccion datos —> codificacion json —> script web

Y si quisiera hacer un filtro en la.base de datos del estilo sql?

Hola Necesitas usar una api rest para esas cosas, puedes contactarme a mi correo o mi facebook y puedo darte información mas facilmente :smiley:

Una pregunta, si mi servidor tiene una base de datos de php y mysql, tengo algún incoveniente para seguir con todo esto? En realidad en una base de datos se puede extraer datos con cualquier sintaxis no?

Hay un blog de Corona que habla del tema de rest: https://coronalabs.com/blog/2015/06/02/tutorial-connecting-to-restful-api-services/

De momento ya tengo el nombre, usuario y contraseña de mi base de datos PHP.

Para que Corona sdk se pueda entender con la información recibida, debería enviar los datos de la database en json, y según la documentación de la página de PHP debería codificar así:

\<?php $json&nbsp;=&nbsp;'{"a":1,"b":2,"c":3,"d":4,"e":5}'; var\_dump(json\_decode($json)); var\_dump(json\_decode($json,&nbsp;true)); ?\>

Pero creo que esto sería en el caso de que fuera una pagina html, no para lo que quiero yo.

Madre mía… que caos!

Por ejemplo, dado este código:

local function networkListener( event ) &nbsp;&nbsp;&nbsp;&nbsp;if ( event.isError ) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print( "Network error: ", event.response ) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print ( "Upload complete!" ) &nbsp;&nbsp;&nbsp;&nbsp;end end local headers = {} &nbsp; headers["Content-Type"] = "application/json" headers["X-API-Key"] = "13b6ac91a2" &nbsp; local params = {} params.headers = headers -- Tell network.request() to get the request body from a file: params.body = { &nbsp;&nbsp;&nbsp;&nbsp;filename = "object.json", &nbsp;&nbsp;&nbsp;&nbsp;baseDirectory = system.DocumentsDirectory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp; network.request( "http://127.0.0.1/restapi.php", "POST", networkListener, params )

Que debería poner en “headers”? Aquí pone applocation/json, pero creo que es una respuesta genérica. ¿Qué debería poner?

Gracias!

Hola si estan bien los headers asi :3 y si necesitas que tu server responda como json para que corona pueda manipular los datos, de corona hacia tu server puedes manejar incluso peticiones GET o POST sin problemas :slight_smile:

Suerte

¿Y si ahora quisiera introducir más registros por ejemplo en una tabla de mi database en la dirección: “Amigos/Barcelona/Barrio1”?

¿En este caso como se tendría que hacer para acceder?

¿Por que el objeto que se envia es .json? ¿Debería hacer una pagina con código php para decodificar el json?

Pues necesitarías usar un framework php como Slime/CodeIgniter/Laravel etc que te manejen ese tipo de rutas por ejemplo:

http://midominio.com/amigos/{valor1}/{valor2}/{valor3} y cosas de ese estilo, realmente no es tan complicado usando una herramienta de estas.

Haces tu proceso de insert/update/delete con php y simplemente respondes con un echo ya sea un simple texto ok/error o un json con información detallada para que corona sepa que sucedió.

Te recomiendo manejar un sistema de Tokens para la seguridad de tu sitio.

Gracias por las contestaciones Miguel68!

He encontrado este codigo para hacer una REST Api:

\<?php // get the HTTP method, path and body of the request $method = $\_SERVER['REQUEST\_METHOD']; $request = explode('/', trim($\_SERVER['PATH\_INFO'],'/')); $input = json\_decode(file\_get\_contents('php://input'),true); // connect to the mysql database $link = mysqli\_connect('localhost', 'user', 'pass', 'dbname'); mysqli\_set\_charset($link,'utf8'); // retrieve the table and key from the path $table = preg\_replace('/[^a-z0-9\_]+/i','',array\_shift($request)); $key = array\_shift($request)+0; // escape the columns and values from the input object $columns = preg\_replace('/[^a-z0-9\_]+/i','',array\_keys($input)); $values = array\_map(function ($value) use ($link) { &nbsp;&nbsp;if ($value===null) return null; &nbsp;&nbsp;return mysqli\_real\_escape\_string($link,(string)$value); },array\_values($input)); // build the SET part of the SQL command $set = ''; for ($i=0;$i\<count($columns);$i++) { &nbsp;&nbsp;$set.=($i\>0?',':'').'`'.$columns[$i].'`='; &nbsp;&nbsp;$set.=($values[$i]===null?'NULL':'"'.$values[$i].'"'); } // create SQL based on HTTP method switch ($method) { &nbsp;&nbsp;case 'GET': &nbsp;&nbsp;&nbsp;&nbsp;$sql = "select \* from `$table`".($key?" WHERE id=$key":''); break; &nbsp;&nbsp;case 'PUT': &nbsp;&nbsp;&nbsp;&nbsp;$sql = "update `$table` set $set where id=$key"; break; &nbsp;&nbsp;case 'POST': &nbsp;&nbsp;&nbsp;&nbsp;$sql = "insert into `$table` set $set"; break; &nbsp;&nbsp;case 'DELETE': &nbsp;&nbsp;&nbsp;&nbsp;$sql = "delete `$table` where id=$key"; break; } // excecute SQL statement $result = mysqli\_query($link,$sql); // die if SQL statement failed if (!$result) { &nbsp;&nbsp;http\_response\_code(404); &nbsp;&nbsp;die(mysqli\_error()); } // print results, insert id or affected row count if ($method == 'GET') { &nbsp;&nbsp;if (!$key) echo '['; &nbsp;&nbsp;for ($i=0;$i\<mysqli\_num\_rows($result);$i++) { &nbsp;&nbsp;&nbsp;&nbsp;echo ($i\>0?',':'').json\_encode(mysqli\_fetch\_object($result)); &nbsp;&nbsp;} &nbsp;&nbsp;if (!$key) echo ']'; } elseif ($method == 'POST') { &nbsp;&nbsp;echo mysqli\_insert\_id($link); } else { &nbsp;&nbsp;echo mysqli\_affected\_rows($link); } // close mysql connection mysqli\_close($link);

No estoy muy seguro como funciona, pero lo iré investigando.

Si en un supuesto caso, esto funcionara. ¿Tendría que subir el fichero en extensión php en el servidor?

¿Alguna suggerencia?

Mirando un videotutorial por internet he encontrado algo que funciona:

local json = require( "json" ) local mime = require( "mime" ) local function handleResponse( event ) &nbsp; &nbsp; if not event.isError then &nbsp; &nbsp; &nbsp; &nbsp; local response = json.decode( event.response ) &nbsp; &nbsp; &nbsp; &nbsp; print( event.response ) &nbsp; &nbsp; else &nbsp; &nbsp; &nbsp; &nbsp; print(event.response) &nbsp; &nbsp; end &nbsp; &nbsp; return end local headers = {} headers["Authentication"] = mime.b64("\*\*\*\*\*\*\*\*\*\*\*\*\*") local params = {} params.headers = headers network.request( "http://www.\*\*\*\*\*\*\*\*\*\*\*\*.es/index.php", "GET", handleResponse, params )

Esta es la aplicacion base para Corona sdk. Mientras que en el servidor hay una pagina PHP con el siguiente código:

\<?php $host="\*\*\*\*\*.\*\*\*\*.\*\*"; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; $username="\*\*\*\*\*\*\*\*"; $password="\*\*\*\*\*\*\*\*"; &nbsp; $db\_name="\*\*\*\*\*\*\*\*\*";&nbsp; $con=mysql\_connect("$host", "$username", "$password")or die("cannot connect"); mysql\_select\_db("$db\_name") or die ("cannot select DB"); $sql = "select \* from user"; $result = mysql\_query($sql); $json = array(); $count=0; if(mysql\_num\_rows($result)){ while($row=mysql\_fetch\_row($result)) { $count = $count+1; $json[$count]=$row; } } mysql\_close($db\_name); echo json\_encode($json); ?\>

Si alguien supiera como puedo hacer más funciones o búsquedas. Para mi ver que me devuelve mi lista de usuarios y contraseñas ya es increible, jeje…

Obviamente con esto solo puedo hacer una consulta, y me gustaría hacer filtros sql, insertar datos… etc.
Por ejemplo, mi idea sería enviar los datos de la $sql para poder decidir que quiero ver, y así mismo, enviar tambien el nombre de la tabla.

Gracias de antemano!!!

Si necesitar montar un sitio php en un server, pues yo te insistiria en que uses un framework, pero si quieres usar php puro pues necesitas ya sea crear un switch para filtrar las peticiones o crear varios archivos .php que se encarguen de las diferentes funciones que quieras hacer.

La idea del REST API en realidad me gusta, pero he hecho varias pruebas con el framework Slim y he tenido problemas de instalación. He estado probando un proyecto que se llama AUTOMATIC API REST, pero me faltan conocimientos para entenderlo, ya que solo pude visualizar el contenido de las tablas, nada más.

Pero yo tengo una pregunta, en el framework tambien hay que picar código no? Qué diferencia hay entre el PHP puro y duro? Debería utilizar Apache?

Y otra pregunta, crees que podría enviar datos dentro de network.request después del link? Ejemplo:

network.request( "http://www.paginadeprueba.es/index.php?tabla=usuario&texto=blabla", "GET", handleResponse, params )

, y recibirlas en la pagina php? como variables &tabla y &texto.

Saludos :slight_smile:

Edit: Solo quería decir que ya está resuelto, con la instruccion $_GET(tabla)

La diferencia nadamas esque el framework ya esta diseñado para trabajar con la api rest y es sumamente sencillo hacerlo, tiene filtros de petición y cosas de seguridad muy utiles XD

Si puedes enviar los parametros en URL sin problemas solo no mandes nada como “params” en la peticion de corona, el server php tomara estos datos como un GET normal ya que la info va en la url y podrás acceder a ellos mediante $_GET[‘campo’]

Supongo que ya estás familiarizado con el tema del API, pero me tiene muy confuso. ¿Qué debería hacer? Instalar el framework Slim, y después trabajar con Apache? Por cierto, a qué te refieres con lo de “solo no mandes nada como “params” en la petición de corona”?

Ahora si que veo necesario hablar contigo, pero tampoco quiero abusar de tu tiempo. Esto parece más un chat que un foto X-D

Bueno ya he empezado a desarrollar la aplicación, y todo me va saliendo bastante bien. Saludos!

ajajaja animo no te preocupes no me molesta, si necesitas ayuda o tienes duda no dudes en contactarme ;D, suerte con tu app!