Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Komunikacja z bazą danych


  • Zaloguj się, aby dodać odpowiedź
18 odpowiedzi w tym temacie

#1 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 21 marca 2011 - 21:35

Witam serdecznie, Zrobiłem sobie prosty program generujący URL i odwołujący się do skryptu, który wprowadza dane metodą GET. Teraz zastanawiam się jak zrobić pobieranie danych z serwera, z poziomu strony WWW (nie mając bezpośrednio dostępu do bazy). Druga sprawa. Mimo googlowania, nie znalazłem ciekawych materiałów i bibliotek do łączenia się bezpośrednio z bazą danych. Może jakieś rady? Trzecia sprawa. W jeszcze innej aplikacji potrzebuje zrobić programik aktualizujący baze CoreData na podstawie bazy MySQL. Po kliknięciu buttona ma być ściągana paczka danych i wprowadzana do CD, coś na wzór działania aplikacji Poland Scheduler. Bawił się ktoś w takie czary? :) Za każdą uwagę bede wdzięczny, Pozdrawiam, Arek :)

#2 macieks72

macieks72

  • 9 873 postów

Napisano 21 marca 2011 - 21:42

1. Pobieranie z bazy zrób w ten sam sposób co zrobiłeś wprowadzanie, czyli przez GET wypluj wynik jako xml, json etc. co Ci tam pasuje. 2. Jaka baza?

#3 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 21 marca 2011 - 21:56

1. Chce zrobić proste logowanie i szukam najlepszego rozwiązania. Masz jakąś sugestie? 2. Baza MySQL.

#4 macieks72

macieks72

  • 9 873 postów

Napisano 21 marca 2011 - 22:03

Jeśli logowanie to przez POST wyślij username i password, a nie przez GET. Co do reszty no to nie bardzo wiem w czym problem, po prostu wysyłasz username i pass i obierasz odpowiedź np. 'success' lub 'error/invalid login', jeśli powiedzmy obierzesz 'error' do odbierasz jeszcze 'message' z walidacji, który potem sobie w aplikacji wyświetlasz.

#5 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 21 marca 2011 - 23:40

Jutro rzucę okiem na opcje z POST. Jak mogę się połączyć bezpośrednio z bazą danych?

#6 macieks72

macieks72

  • 9 873 postów

Napisano 21 marca 2011 - 23:46

1. Lepiej przez POST bo przez GET są zapisywane logi na serwerze z całym URL jak wiadomo, czyli też z userem i hasłem. Kwestia bezpieczeństwa (może w Twoim przypadku ma mniejsze znaczenie) ale i dobrej praktyki.

2. Tego nie wiem. Zapewne znajdziesz jakieś biblioteki, jak np. to:
MySQL Objective C API for Cocoa | Download MySQL Objective C API for Cocoa software for free at SourceForge.net

#7 Roberto

Roberto
  • 13 752 postów
  • SkądWrocław

Napisano 22 marca 2011 - 00:37

raczej nie dopuszczą do App Store programów które coś takiego wykorzystują (gdzieś kiedyś coś takiego słyszałem) jeżeli to jest jego celem.

#8 JKK

JKK
  • 411 postów
  • SkądOsolin

Napisano 22 marca 2011 - 12:01

Roberto możesz wyjaśnić? Nie dopuszczą jak się bezpośrednio łączy z bazą czy nie dopuszczą za to API? Ja np. chcę w swoim zrobić komunikację z serwerem www i bazą na serwerze przez pliki (ale po http(s)). Czyli wysyłać będę i odbierać pliczek binarny ze swoim g. w środku ;-)

#9 Roberto

Roberto
  • 13 752 postów
  • SkądWrocław

Napisano 22 marca 2011 - 12:27

za API. oczywiście to wcale nie musi być prawda, to takie zasłyszane gdzieś raczej. jak sobie zrobisz własną komunikację czy to przez binarki, czy przez JSON'a czy SOAP'a - to z tym nie powinno być problemu (w końcu do tego API chyba sami dają, prawda?). a na ściąganie plików na pewno pozwalają przecież ;]

#10 danteusz

danteusz
  • 527 postów
  • SkądWrocław-Psie Pole, Wroclaw, Poland, Poland

Napisano 22 marca 2011 - 16:36

Taka rada: hasło wysyłane przez HTTP zawsze powinno być szyfrowane, POST łatwo przechwycić i odczytać

#11 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 23 marca 2011 - 16:43

W zasadzie nie mam pojęcia jak zrobić logowanie. Jak mogę odebrać komunikat, że logowanie zakończone zostało sukcesem? Ma ktoś pomysł na jakieś konkretne rozwiązanie?

#12 danteusz

danteusz
  • 527 postów
  • SkądWrocław-Psie Pole, Wroclaw, Poland, Poland

Napisano 23 marca 2011 - 18:37

Wysyłasz na serwer metodą POST lub GET username i password (najlepiej zaszyfrowane), serwer przeprowadza logowanie, jak się uda w odpowiedzi zwraca 1, jak nie to 0. Sprawdzasz odpowiedź, wiesz czy jesteś zalogowany.

#13 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 23 marca 2011 - 22:28

Właśnie. Mogę zrobić skrypt PHP który zwróci wartość, tylko nie wiem jak tą wartość pobrać. Jak przesłać "1" do aplikacji iOS.

#14 macieks72

macieks72

  • 9 873 postów

Napisano 23 marca 2011 - 22:32

No a klasa którą wysyłasz ten POST nie zwraca jakiegoś obiektu NSWebRequest (to pseudo nazwa tylko bo nie znam obj-c), w którym to odczytujesz właściwość np. content, body itp? Znalazłem w dokumentacji klasę NSURLRequest, a w niej metody 1. HTTPMethod gdzie ustawiasz POST/GET 2. HTTPBody gdzie odczytujesz odpowiedz z serwera. Wygląda na proste w użyciu, popróbuj.

#15 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 23 marca 2011 - 22:38

@Macieks72: Jeszcze tego nie wiem, ale w takim razie musze sie dowiedziec :)

#16 danteusz

danteusz
  • 527 postów
  • SkądWrocław-Psie Pole, Wroclaw, Poland, Poland

Napisano 23 marca 2011 - 22:41

Użyj ASIHTTP:
ASIHTTPRequest example code - All-Seeing Interactive

Na samej górze masz kod:

- (IBAction)grabURL:(id)sender
{
  NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  [request startSynchronous];
  NSError *error = [request error];
  if (!error) {
    NSString *response = [request responseString];
  }
}
Jeśli wyślesz zapytanie logowania to w stringu response będzie siedzieć jedynka wysłana przez Twój skrypt

#17 Bananera

Bananera
  • 216 postów
  • SkądSzczecin

Napisano 23 marca 2011 - 22:47

@danteusz: Dziekuje. Pomogłeś mi. Jak bede miał jakieś problemy to bede tutaj pisał :)

#18 danteusz

danteusz
  • 527 postów
  • SkądWrocław-Psie Pole, Wroclaw, Poland, Poland

Napisano 23 marca 2011 - 23:10

W aplikacjach które robiłem nie bawiliśmy się w logowanie użytkownika i trzymanie sesji, łatwiej było do każdego zapytania dołączać zaszyfrowane dane użytkownika. Spróbuj w ten sposób, powinno być łatwiej

#19 macieks72

macieks72

  • 9 873 postów

Napisano 23 marca 2011 - 23:37

Bananera - A tutaj masz podobny przykład ale korzystający z wbudowanej klasy w SDK.

    NSURL *url = [NSURL URLWithString:@"http://localhost/test/NSURLResponse_Test.php"];
    NSMutableURLRequest *req = [NSURLRequest requestWithURL:url];
    
    NSURLResponse *resp = nil;
    NSError *err = nil;    
    NSData *responseData = [NSURLConnection sendSynchronousRequest: req returningResponse: &resp error: &err];
    NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    
[B]lblMessage.text = responseStr[/B];
    
    [responseStr release];
    [err release];

Tyle że to i tak przydało by się zapakować w POST, a nie GET.




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych