obj c> php> mysql аутентификация ... так близко! - PullRequest
0 голосов
/ 16 марта 2011

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

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

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

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

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

Любая помощь будет высоко ценится <3 </p>

    //-------------------------------------------------------------------------------------------------------------------------------
//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];
}

1 Ответ

0 голосов
/ 16 марта 2011

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

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

Кроме того, ваш 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...