obj c> php> mysql аутентификация ... так близко!

0

Я знаю, что существует довольно много потоков, похожих на это, но я просто не могу сказать, что я делаю неправильно в своем коде, я могу получить записи в mysql через симулятор iphone, поэтому он работает, но я не могу исправить приоритеты предупреждения и} else, если {... s/s >

в основном его страница регистрации 4 строк, отправляет 4 строки данных в мой .php файл, мой файл php помещает информацию в мою базу данных. Проблемы с парой:

  • Если в любом из четырех полей нет ничего, и пользователь нажимает кнопку "Создать", он дает соответствующее предупреждение "недостающие поля", однако он отправляет пустую запись в мою базу данных, поэтому, очевидно, это не слушая меня, когда я пытаюсь сказать, что "НЕ ВПЕРЕДИ, ЕСЛИ КРИТЕРИИ № 1 БЫЛО НЕИСПРАВНО". Как я могу остановить этот IBAction, если нет текста в любом из четырех полей? (Мой php файл проверяет только существующие имена пользователей и завершает работу, если он находит совпадение в моей базе данных.)

  • Когда пользователь заполняет все 4 поля соответствующим образом и нажимает кнопку "Создать", я получаю сообщение об ошибке "Ошибка подключения к серверу", которую я установил. После того, как я сыграл около 3 часов с кодом, я ничего не получал, на самом деле, я помню время, когда я получал мой профиль, создавая успешные оповещения, но это было в то время, когда моя база данных была ТОЛЬКО записывать пустые записи.

Извините за стену текста, но я работал над этим примерно 10 часов подряд и не очень далеко!!!

Любая помощь была бы высоко оценена < 3

    //-------------------------------------------------------------------------------------------------------------------------------
//create a user profile

-(IBAction)createprofile:(id)sender
{

    NSString* name = textFieldName.text;    
    NSString* username = textFieldUser.text;
    NSString* password = textFieldPassword.text;
    NSString* email = textFieldEmail.text;

    NSString *post =[[NSString alloc] initWithFormat:@"name=%@&username=%@&password=%@&email=%@",name,username,password,email];


    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *serverOutput = [[NSString alloc] initWithData:postData encoding: NSASCIIStringEncoding];  


    if(([textFieldName.text length]==0) || ([textFieldEmail.text length]==0) || ([textFieldPassword.text length]==0) || ([textFieldUser.text length]==0))

    {

        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Missing Field"
                                                         message:@"Please fill out all fields."
                                                        delegate:self
                                               cancelButtonTitle:@"Ok"  
                                               otherButtonTitles: nil];

        [alert show];

        [alert release];

    } else if ([serverOutput isEqualToString:@"Yes"]) 

    {

        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Your profile has been created!"
                                                              delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        [alertsuccess show];
        [alertsuccess release];

    } else if ([serverOutput isEqualToString:@"No"])

    {

        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The specified username is already taken."
                                                              delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertsuccess show];
        [alertsuccess release];

    } else {

        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Connection to server cannot be established."
                                                              delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertsuccess show];
        [alertsuccess release];

    }




    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];  
    NSURL *url = [NSURL URLWithString:@"http://mywebsite.com/userlogin.php?"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    [theRequest setHTTPMethod:@"POST"];  
    [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];  
    [theRequest setHTTPBody:postData];     
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];





    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
    }
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{


    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{

    [connection release];
    [webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    [loginStatus release];



    [connection release];
    [webData release];
}
  • 0
    Попробуйте использовать ASIHttpRequest. Эта библиотека упрощает этот тип операции.
Теги:
authentication
if-statement

1 ответ

0

Отображение предупреждения - это асинхронный вызов (он не ждет, пока вы нажмете на кнопку, чтобы перейти к следующей строке кода)

У вас должен быть возврат после каждого [выпуска предупреждений], в противном случае поток выполнения будет продолжать бит, отправляющий данные.

Кроме того, ваш serverData вы проверяете этот же метод! Код выглядит довольно странно для меня. Вы просматривали образцы SDK для публикации данных?

   //-------------------------------------------------------------------------------------------------------------------------------
//create a user profile

-(IBAction)createprofile:(id)sender
{

    NSString* name = textFieldName.text;    
    NSString* username = textFieldUser.text;
    NSString* password = textFieldPassword.text;
    NSString* email = textFieldEmail.text;

    NSString *post =[[NSString alloc] initWithFormat:@"name=%@&username=%@&password=%@&email=%@",name,username,password,email];


    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *serverOutput = [[NSString alloc] initWithData:postData encoding: NSASCIIStringEncoding];  


    if(([textFieldName.text length]==0) || ([textFieldEmail.text length]==0) || ([textFieldPassword.text length]==0) || ([textFieldUser.text length]==0))

    {

        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Missing Field"
                                                         message:@"Please fill out all fields."
                                                        delegate:self
                                               cancelButtonTitle:@"Ok"  
                                               otherButtonTitles: nil];

        [alert show];

        [alert release];
        return;

    } else if ([serverOutput isEqualToString:@"Yes"]) 

    {

        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Your profile has been created!"
                                                              delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        [alertsuccess show];
        [alertsuccess release];
        return;

    } else if ([serverOutput isEqualToString:@"No"])

    {

        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The specified username is already taken."
                                                              delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertsuccess show];
        [alertsuccess release];
        return;
    } else {

        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Connection to server cannot be established."
                                                              delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertsuccess show];
        [alertsuccess release];
        return;
    }




    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];  
    NSURL *url = [NSURL URLWithString:@"http://mywebsite.com/userlogin.php?"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    [theRequest setHTTPMethod:@"POST"];  
    [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];  
    [theRequest setHTTPBody:postData];     
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];





    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
    }
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{


    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{

    [connection release];
    [webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    [loginStatus release];



    [connection release];
    [webData release];
}
  • 0
    Да ... но все хорошо, для тех, у кого эта проблема возникнет в будущем, я вместо этого использовал ASIHTTPRequest, творит чудеса. Спасибо за ваш ответ, хотя!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню