Go Down

Topic: Enviar un array con GET (Read 2538 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy