entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

bad URL en AFNetworking operation

Guiandome por el codigo que ya tengo hecho para obtener datos de un JSON ahora lo que quiero es guardar los datos. Lo que estoy haciendo ahora es enviar una hora y un codigo para que se me guarden en la base de datos. la URL es la siguiente, teniendo una constante BaseURLString guardada en la misma clase.

-(void)reservar{

    NSString *weatherUrl = [NSString stringWithFormat:@"%@?method=setReservaHora&code=%@", BaseURLString, _recipeName];
    NSURL *url = [NSURL URLWithString:weatherUrl];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 2

    AFJSONRequestOperation *operation =
    [AFJSONRequestOperation JSONRequestOperationWithRequest:request
     // 3
                                                    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                                                        NSLog(@"%@", JSON);
                                                        if ([JSON isEqual:[NSNull null]])
                                                            NSLog(@"JSON is NULL");
                                                            }

                                                    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                                        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"
                                                                                                     message:[NSString stringWithFormat:@"%@",error]
                                                                                                    delegate:nil
                                                                                           cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                                        NSLog(@"%@",error);
                                                        [av show];
                                                    }];

    operation.JSONReadingOptions = NSJSONReadingAllowFragments;
    [operation start];

El error que me retorna es

Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x8e6aed0
{NSUnderlyingError=0x9d43450 "bad URL", NSLocalizedDescription=bad URL

Si le quito el ultimo parametro (&hora=%@ y el horaEnviar) me escribe en la base de datos pero me retorna un error

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be
completed. (Cocoa error 3840.)" (Invalid value around character 1.)
UserInfo=0x9b6c3a0 {NSDebugDescription=Invalid value around character
1.

He estado buscando todo el fin de semana pero no hay manera, no encuentro la solución, pruebo todo lo que encuentro y nada me sirve.

0voto

juancruzmdq comentado

Cual es la url que da problemas?
hace un log de weatherUrl y copialo aca.
Tene cuidado de no mostrar información sensitiva, como ip del servidos...

0voto

victor_capilla comentado

http://web.tk/testservice.php?method=setReservaHora&code=23091312&hora=23 del Septiembre de 2013 a las 12:00

Esto es lo que me muestra el LOG

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola Victor,

por lo que leo en los comentarios a raíz del debbuging que hiciste, tu problema está en el código PHP:

if($Request_Method=="setReservaHora")  {
    $code=$_REQUEST['code'];
    $hora=$_REQUEST['hora'];
    $query = "INSERT INTO table (id, code, hora, nombre, telefono, comentarios) VALUES (NULL, '$code', '$hora', '', '', '')";
    $result = mysql_query($query);
    while($row = mysql_fetch_assoc($result))    {
        $resultArray[] = $row;
    }
    echo json_encode($resultArray);
 }

El mensaje de error:

Warning: mysqlfetchassoc() expects parameter 1 to be resource, boolean
given in /home/u738720968/public_html/testservice.php on line 63 null

es porque un INSERT o un UPDATE o un DELETE no devuelven un subset de resultados, sino que devuelven truo o false indicando si la operación se hizo o no.

mysql_fetch_assoc() falla porque espera como parámetro un handler a un subset de resultados, pero recibe truo o false..

Lo que deberías hacer para devolver los datos en JSON, es una query con un SELECT luego de hacer el INSERT, y a ese resultado pasarlo a mysql_fetch_assoc().

Si lo que querés obtener son los datos del registro recién insertado, lo podés obtener con la función mysql_insert_id().

Saludos!

0voto

victor_capilla comentado

Muchas gracias, caso resuelto!

1voto

juancruzmdq Puntos1500

La url parece estar bien. estas seguro de que eso es lo que espera la API?

cuando armes la url proba de invocar este metodo, para evitar enviar algun caracter invalido

[@"http://web.tk/testservice.php?method=setReservaHora&code=23091312&hora=23" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

0voto

juancruzmdq comentado

si, no hagas nada ni en el casa de succcess ni en el caso de failure y listo.
igual si la API te dise que algo estubo mal, es porque algo malo esta pasando

0voto

victor_capilla comentado

Ok, mira, si hago un poco de debug, cuando cargo en el objeto NSURLRequest:

NSString *weatherUrl = [[NSString stringWithFormat:@"%@?method=setReservaHora&code=%@&hora=%@", BaseURLString, _recipeName, horaEnviar] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:weatherUrl];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

esto es lo que tengo dentro de url:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource,
boolean given in /home/u738720968/public_html/testservice.php on line
63 null

No se si sirve de algo...

0voto

juancruzmdq comentado

te fijaste que hay en la linea 63 de tu PHP?

supongo que debe ser la linea con la funcion mysql_fetch_assoc, no puede hacer el fetch porque la query fallo.
proba con este codigo.

error_reporting(E_ALL);

$result = mysql_query($query);
if($result === FALSE) {
    die(mysql_error());
}

0voto

juancruzmdq comentado

Te sirvió alguna de las respuestas? si lo pudiste resolver, que hiciste?

Saludos

0voto

victor_capilla comentado

Si, consegui solucionarlo con la respuesta de leonardo que hay abajo.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta