Go Down

Topic: Enviar un array con GET (Read 2354 times) previous topic - next topic

zEtA

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: [Select]
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.

riscking

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.

zEtA

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: [Select]
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í  XD 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: [Select]
client.println("GET /consulta1.php?iden="?digito1=""&digito2=" HTTP/1.0");
y también así
Code: [Select]
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: [Select]
Serial.println("GET /consulta1.php?iden="?digito1+"":digito2+" HTTP/1.0");


zEtA

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

 
Code: [Select]
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!

zEtA


4lb3rt0

#5
Jul 09, 2013, 06:30 pm Last Edit: Jul 09, 2013, 07:23 pm by 4lb3rt0 Reason: 1
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  :)

Gracias

noter

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: [Select]

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.

4lb3rt0

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

4lb3rt0

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"];

Go Up