Pages: [1]   Go Down
Author Topic: Enviar un array con GET  (Read 2084 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola de nuevo,

Tengo una duda en relación a las posibilidades de la petición GET a un servidor php. Hasta ahora he podido enviar variables con mi shield Ethernet sin problemas:

Code:
int prueba=1;
client.println("GET /consulta1.php?iden="+String(prueba)+" HTTP/1.0");

Pero no consigo enviar un array de tipo char con tamaño de 6 variables. He buscado información al respecto pero sólo he encontrado una respuesta que no es muy alentadora; y es que no se puede enviar un array a un campo del formulario de un servidor.

¿Es eso cierto?

Gracias de antemano.
Logged

Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Para enviar varias variables con get seria asi
Consulta1.php?var1=""&var2=""&var3=""
Osea la primera con un ?  Y el resto con &.
Pruebalo a ver q tal.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola riscking

La cuestión es que debo enviar o bien el array o bien una serie de variables al campo "iden" del formulario:

Code:
char array[]={1, 10, 101, 144, 99, 157};
client.println("GET /search.php?iden="+String(array)+" HTTP/1.0");

Así sé que es una burrada escribirlo así  smiley-lol pero en principio no sé como se escribe y es para dar a entender lo que pretendo conseguir. He probado lo que me has dicho de esta manera:

Code:
client.println("GET /consulta1.php?iden="?digito1=""&digito2=" HTTP/1.0");
y también así
Code:
client.println("GET /consulta1.php?iden="+digito1+""+digito2+" HTTP/1.0");

Pero los errores que me da el compilador son los siguientes:

invalid operands of types 'const char[1] and 'int' to binary 'operator&'


He probado con esta sintaxis y no me da error al compilar, pero luego en el serial no me aparece nada del println

Code:
Serial.println("GET /consulta1.php?iden="?digito1+"":digito2+" HTTP/1.0");

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahora mismo no dispongo del servidor para probarlo, pero creo que es así:

 
Code:
client.print("GET /consulta1.php?iden="); //enviamos la peticion al servidor
  client.print(digito1);
  client.print(digito2);
  client.print(digito3);
  client.print(digito4);
  client.print(digito5);
  client.println(" HTTP/1.0");

Al menos, en el serialmonitor me aparece lo que busco:

GET /consulta1.php?iden=110101144168 HTTP/1.0

En cuanto sepa si funciona, lo posteo.
Saludos!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Funciona!  smiley-lol
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola zEtA.

he intentado enviar un string y un char array asi como dices y no funciona. mi intencion es enviar un array tipo char y recibirlo en un servidor php, (en teoría si lo que tu dices funciona debería recibir con una única orden  client.print("/GET/miprograma.php/dato=?array HTTP /1.1");

Edito: me refiero a que al otro lado en el servidor, ¿que esta esperando? $variable=$_GET[array];???????? o al enviar asi estas enviando byte a byte el array??????

Disculpas si planteo tonterias pero no nací sabiendo  smiley

Gracias
« Last Edit: July 09, 2013, 12:23:34 pm by 4lb3rt0 » Logged

Palencia, Spain
Offline Offline
Sr. Member
****
Karma: 25
Posts: 494
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No se puede enviar un array tal cual en html. Debes descomponerlo, enviarlo, y recomponerlo en el servidor. Crea una cadena con un carácter separador. Prueba tal que así, suponiendo que quieres enviar un array de 6 cadenas y que no tienes previsto usar el carácter guión:
Code:
char *iden[]={"esto","es","un","array","de","cadenas"};
Serial.print("GET /consulta1.php?iden="); //enviamos la peticion al servidor
for (int i=0;i<6;i++){
  if (i>0) Serial.print("-");
  Serial.print(iden[i]);
}
Serial.println(" HTTP/1.0"); 
Esto debería dar por el monitor (no lo heprobado) algo así como
Get /consulta1.php?iden=esto-es-un-array-de-cadenas HTTP/1.0
Si es así, modifica Serial por client, y a ver qué tal. En el servidor php puedes reconstruir el array con
$miarray=explode("-", $_GET['iden']);
La cosa se complica si vas a enviar caracteres "raros" o el propio caracter separador, en cuyo caso tendrás que recurrir a trucos para codificarlos en arduiono y descodificarlos en el php.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

gracias noter....el array es mucho mas sencillo..se trata de arrays de longitud variable tipo char, y como si fuera hexadecimal, porque los unicos char qeu habrán en el array son 0-9,A-F.

poniendo el array a pelo va fantastico porque el server php ya espera la variable como dije $variable="$GET[1234567890ABCDEF]"

sigo probando a ver y os cuento
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

teniais razon gente!!!!!! funcionaaaaaaa


Quote
  char array[]="B8F9:34:9de2b4";
  Serial.println("connecting...");
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET /mac_server2.php?data_in="); // mi fallo era que aqui estaba escribiendo
                                                                    //client.println("GET /mac_server2.php?data_in=");
                                                                   // jaaaaaarrrrl!!!!
        for(int i=0;i<sizeof(array);i++){
            client.print(array);
        }
        client.print("HTTP/1.0");
    client.println();

y por el ladod e php el array lo coge simplemente sin formularios ni nada

Quote
$data_in = $_GET["data_in"];
Logged

Pages: [1]   Go Up
Jump to: