Aplikacja + strona internetowa wymienijąca między sobą informacje

0

Witajcie, od dłuższego czasu programuję tylko aplikacje deskoptowe, które do tej pory nie musiały komunikować się z moją własną stroną i pobierać z niej danych, najwyżej pobierały dane już z gotowych stron za pomocą parsowania HTML.

Teraz chciałby się nauczyć nowych rzeczy i chcę stworzyć bardzo prostą stronę na której będzie tylko okienko z wiadomościami, które można dodawać z poziomu strony jako niezalogowany użytkownik i które będą przechowywane w bazie oraz do tego aplikację deskoptową która będzie pobierała już dostępne wiadomości (czyli wszystkie te, które są na stronie) plus pozwalała na dodanie nowych wiadomości, które od razu wyświetlą się na również na stronie.

Oprócz tego na stronie po zalogowaniu się na konto admina będzie można usuwać wiadomości.

Wiedza jaką posiadam: potrafię tworzyć bazy, tabele, relacje, proste zapytania w MySQL, od 2 lat programuję z pasji w C oraz stawiam pierwsze kroki w C++ (oczywiście wcześniej wykorzystywałem dostępne mechanizmy z STL), ostatnio zainteresowałem się też C#.

Aplikacje chciałbym napisać w C# oraz C.

Teraz moje pytania:
1)Nigdy nie tworzyłem stron internetowych, ale taka prosta strona to chyba nie będzie duże wyzwanie? Czy na darmowych hostingach można tworzyć własne bazy danych? Czy cały ten program będę mógł zrealizować za pomocą darmowego hostingu?
2)Jak rozwiązać całą komunikację? W mojej głowie wygląda to tak (ale pierwszy raz coś takiego piszę więc pewnie się w dużym stopniu mylę): Na hostingu będę miał bazę danych z wszystkimi wiadomościami, łączę się z tą bazą z poziomu aplikacji za pomocą jakiejś biblioteki mysql?
3)Czy moglibyście mnie naprowadzić na jakieś artykuły omawiające dostępne technologie do tego?

Bardzo dziękuję za wszystkie odpowiedzi.

0
  1. Prosta aplikacja API sama w sobie nie jest jakimś wyzwaniem. Powinieneś dać radę. Istnieją darmowe hostingi na których mógłbyś oprzeć taką aplikacje (co do .NET i C# nie jestem pewien, bo to technologia Microsoftu). Na darmowych hostingach możesz tworzyć bazy danych.
  2. Na twoim miejscu zrobiłbym api restowe. Później w twojej aplikacji desktopowej manipulowałbyś danymi na danych endpointach.
  3. http://en.wikipedia.org/wiki/Representational_state_transfer. Ogólnie C# i .NET to bardzo obszerne technologie, pewnie zajmie Ci sporo czasu nauczenie się tego na tyle, żeby coś stworzyć. Użycie Pythona, Ruby czy PHP i odpowiednich frameworków sporo by tutaj ułatwiło :)/
0

W mojej głowie całe podejście wygląda tak:
Mam tą prostą stronę z jakimś listboxem do którego wrzucam sobie wszystkie wiadomości z jednej, jedynej tabeli w bazie. (treść wiadomości i jej ID)
Mam jednego entrybox'a na stronie i przycisk dzięki którym mogę dodawać te wiadomości (do tego pewnie jest potrzebne HTML + PHP?)
Aplikacja łączy się z tą bazą (czy będzie możliwość bezproblemowo połączyć się z tą bazą umieszczoną na hostingu z poziomu aplikacji?) i wrzuca wszystko na listboxa w aplikacji.

Czy za pomocą HTML'a i PHP + MYSQL uda mi się taką stronę skonstruować?

0

Więc tak: Od strony usera na stronie, formularz jest potrzebyn, on zbiera informacje i potem przekazuje je do skryptu PHP. Od strony aplikacji nie jest porzebna żadna strona, wprowadzasz te informacje w aplikacji a potem przekazujesz je do tego samego skryptu, do którego przekazałbyś dane z formularza.

0
próbuje się uczyć napisał(a):

Czy za pomocą HTML'a i PHP + MYSQL uda mi się taką stronę skonstruować?

Uda się.

Co do łączenia się z zewnątrz z bazą z darmowego hostingu może być różnie. Nie wiem dlaczego uparłeś się na to łączenie z zewnętrzną bazą. Po to masz tą aplikacje na serwerze, żeby to ona odwalała całą logikę aplikacji, a Ty byś tylko odbierał czy wstawiał dane w swojej aplikacji desktopowej.

0

Bardzo przepraszam, ale po prostu poczynam pierwsze kroki w tego rodzaju aplikacji.
Więc jak moja aplikacja powinna się komunikować z aplikacją na stronie? Za pomocą żądań? Jak powinien mniej więcej model takiej aplikacji wyglądać?

Przepraszam za double post, ale chyba zaczynam coraz więcej rozumieć.

Na stronie będę miał skrypt PHP, który odbiera od aplikacji wiadomości, które wysyłam za pomocą metody POST i po odebraniu dodaje je do bazy danych?

0

tak, musisz do tego skryptu przekazać argumenty, parametry tak samo jak robi to przeglądarka zbierając wszystko do kupy z formularza. Mozesz sobie taki formularz wypełnić, potem włączyć jakiegoś firebuga w przeglądarce, zatwierdzić formularz, a w firebugu zobaczysz dokładnie co i jak sformatowane poleciało POSTem. Lepszym podejsciem było by użycie WebServices (http://php.net/manual/en/refs.webservice.php).

0

Okej, wielkie podziękowania.

Jutro zacznę pracować nad tym małym projektem, na pewno przy tym się dużo nauczę.
Gdybym miał jakiś problem to ponownie podbiję ten temat z pytaniami.

0

Jak C# to możesz się też pobawić aspnet web api
Dodatkowo skoro to tylko do nauki to po co Ci hosting postaw aplikacje lokalnie na IIS.

0

Tak jak myślałem - wróciłem szybciej niż myślałem.

Mam stronę na cba.pl, zrobiłem sobie tam bazę MySQL, dodałem tabele, z poziomu phpmyadmina oraz dodałem 3 rekordy.

Z bazą łączę się bez problemu, lecz nie potrafię na podstawie danych z bazy wypełnić listboxa w HTML.

Kod:

<select id="lista" size="10" style="width:500px">
<?php
$con=mysqli_connect("mysql.cba.pl","xxxxx","xxxxx","xxxxxl");


if (mysqli_connect_errno()) {
  echo "Nie udalo sie:  " . mysqli_connect_error();
}
else
{
  mysqli_query("SET CHARSET utf8", $con);
  mysqli_query("SET NAMES 'utf8' COLLATE 'utf8_bin'", $con);
  $pobrane_dane = mysqli_query($con, "SELECT tresc_wiadomosci FROM wiadomosci");
  while ($row = mysqli_fetch_array($pobrane_dane))
            {
            ?><option><?php echo $row['tresc_wiadomosci'];?></option>
            }   
  
}
</select> 

Normalnie za pomocą echo udawało mi się wypisać wszystkie te dane, lecz nie potrafię tego złożyć do kupy z listboxem.

0

Strasznie mi głupio, że tak double postuje - powinienem chyba założyć konto, ale problem już rozwiązany.

0

Błąd jest w linii

?><option><?php echo $row['tresc_wiadomosci'];?></option> 

Lepiej

$wartosc = $row['tresc_wiadomosci'];
echo "<option>$wartosc </option>";
0

Ten problem już rozwiązałem, dzięki czemu mogę dodawać i wyświetlać wszystkie wiadomości - jest już to dla mnie jakiś sukces.

Teraz chcę stworzyć aplikację w C# która będzie mogła pobierać te wszystkie wiadomości i dodawać nowe.
Poczytałem trochę jak to można zrealizować i odpowiednim rozwiązaniem wydaje mi się interfejs JSON, ale nie potrafię sobie wyobrazić jak to ma działać.
Czy na mojej stronie muszę utworzyć nową podstronę, która będzie generowała stringa JSON i wysyłała go i wtedy moja aplikacja wysyła żądanie na tą podstronę i pobiera ten string i go parsuje?

0

Od strony C# przy założeniu że masz poprawnie stworzone REST Api w PHP a przynajmniej obsługujesz post i get.
I teraz musisz stworzyć aplikacje która na adres np.: www.moja-aplikacja.pl/api/wiadomosci wyśle poprzez np. HttpClient żądanie GET, w efekcie czego serwis REST powinien zwrócić json'a ze wszystkimi wiadomościami, a w przypadku wysłania GET na www.moja-aplikacja.pl/api/wiadomosci/1 powinno zwrócić wiadomość o podanym w tym przypadku id. Podobnie jak wyślę POST na www.moja-aplikacja.pl/api/wiadomosci który będzie zawierał nową wiadomość, REST Api powinno odczytać json'a wysłanego prze zemnie dodać do bazy kolejną wiadomość i na przykład odpowiedzieć czy się udało czy nie albo na przykład zwrócić id nowo utworzonego rekordu.

W ramach nauki możesz sam potworzyć takie funkcje od zera, lub pójść na łatwiznę i użyć czegoś takiego: http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client musisz tylko pamiętać żeby jako Content-Typ przysyłać: application/json żeby zadziałało od strzała. ;)

Edit: Do testowanie i podejrzenia jak wygląda komunikacja client <-> serwer możesz użyć: http://www.telerik.com/fiddler jest prosty w obsłudze.

0

Wielkie dzięki, zaczynam już coraz bardziej rozumieć jak to by miało działać, czy mógłbyś mi odpowiedzieć czy dobrze myślę?
1.Mam stronę wiadomosci.php gdzie obsługuję np get, gdy wysyłam żądanie get to po stronie REST'a:

$wszystkie = dodaje wszystkie wiadomosci;
header('Content-Type: application/json');
echo json_encode($wszystkie);

Co spowoduje wysłanie tego w odpowiedzi na żądanie z powrotem do mojej aplikacji?

EDIT: Udało mi się już odbierać wiadomości na aplikację za pomocą GET'a i serializacji JSON.

EDIT2: Natomiast teraz próbuję napisać wysyłania nowych wiadomości z poziomu aplikacji i utknąłem.

Skrypt PHP:

<?php
if (isset($_GET['wszystkie']))
{
$con=mysqli_connect("xxxl","xxx","xxxx","xxxx");



if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
  mysqli_query("SET CHARSET utf8", $con);
  mysqli_query("SET NAMES 'utf8' COLLATE 'utf8_bin'", $con);
  $tablica_wynikow = array();
   $pobrane_dane = mysqli_query($con, "SELECT * FROM wiadomosci");
    while($nt=mysqli_fetch_assoc($pobrane_dane)){ 
	$tablica_wynikow[] = $nt;
        
    }
header('Content-Type: application/json');
echo json_encode($tablica_wynikow);
}
mysqli_close($con);
}
if (isset($_POST['nowa_wiadomosc']))
{
    $tresc_wiadomosci = $_POST['nowa_wiadomosc'];
    $con=mysqli_connect("xxxl","xxx","xxxx","xxxx");



   if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: ";
   }
   else
   {
     mysqli_query("SET CHARSET utf8", $con);
     mysqli_query("SET NAMES 'utf8' COLLATE 'utf8_bin'", $con);
     mysqli_query("INSERT INTO wiadomosci (tresc_wiadomosci) values  ($tresc_wiadomosci)");
   }

   mysqli_close($con);  
}
?>
 

Jak próbuję wysłać dane z c#:

string URL = "http://xxxxxx.pl/api/wiadomosci.php";
                WebClient webClient = new WebClient();

                NameValueCollection formData = new NameValueCollection();
                formData["nowa_wiadomosc"] = "testuser";

                byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
                string responsefromserver = Encoding.UTF8.GetString(responseBytes);
                Console.WriteLine(responsefromserver);
                webClient.Dispose(); 

EDIT: Naprawiłem, błędne była konstrukcja zapytania SQL w skrypcie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1