Wątek przeniesiony 2020-02-18 14:07 z Mobilne przez Patryk27.

Problem z tworzoną aplikacją budowaną w MIT App Inventorze w połączeniu z bazą danych

Odpowiedz Nowy wątek
2020-02-18 13:06

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

0

Witam wszystkich!
Na początku dodam, że jestem totalnym samoukiem, dlatego zdecydowałem się na stworzenie aplikacji w MIT app inventorze (przyjazny interfejs, układanie api bloczkami, itd.)

Otóż, chciałem stworzyć aplikację, która będzie zbierać trzy pola: imię, miejsowość i prośba.
Posłużyłem się opisem z tego linka aby zbudować coś na ten wzór.
Jako, że mam wykupiony serwer na hekko, tam zamieściłem odpowiednie pliki php, które łączą się z bazą i które mają dodawać i wyświetlać wpisy.

plik dodaj.php

<?php

DEFINE ('DBUSER', 'user'); 
DEFINE ('DBPW', 'password'); 
DEFINE ('DBHOST', 's79.hekko.net.pl'); 
DEFINE ('DBNAME', 'baza'); 

$dbc = mysqli_connect(DBHOST,DBUSER,DBPW);
if (!$dbc) {
    die("Błąd połączenia z bazą danych: " . mysqli_error($dbc));
    exit();
}

$dbs = mysqli_select_db($dbc, DBNAME);
if (!$dbs) {
    die("Źle wybrana baza danych: " . mysqli_error($dbc));
    exit(); 
}

$id = mysqli_real_escape_string ($dbc, $_GET['id']);
$imie = mysqli_real_escape_string($dbc, $_GET['imie']);
$miejscowosc = mysqli_real_escape_string($dbc,$_GET['miejscowosc']);
$prosba = mysqli_real_escape_string($dbc,$_GET['prosba']);

$query = "INSERT INTO prosby (id, imie, miejscowosc, prosba) VALUES ('$id', '$imie', '$miejscowosc', '$prosba')";

$result = mysqli_query($dbc, $query) or trigger_error("Błąd bazy danych: " . mysqli_error($dbc)); 

mysqli_close($dbc); 

?>

i plik custcsv.php

<?php

DEFINE ('DBUSER', 'user'); 
DEFINE ('DBPW', 'password'); 
DEFINE ('DBHOST', 's79.hekko.net.pl'); 
DEFINE ('DBNAME', 'baza'); 

$dbc = mysqli_connect(DBHOST,DBUSER,DBPW);
if (!$dbc) {
    die("Database connection failed: " . mysqli_error($dbc));
    exit();
}

$dbs = mysqli_select_db($dbc, DBNAME);
if (!$dbs) {
    die("Database selection failed: " . mysqli_error($dbc));
    exit(); 
}

$result = mysqli_query($dbc, "SHOW COLUMNS FROM prosby");
$numberOfRows = mysqli_num_rows($result);
if ($numberOfRows > 0) {

$values = mysqli_query($dbc, "SELECT * FROM prosby");
while ($rowr = mysqli_fetch_row($values)) {
 for ($j=0;$j<$numberOfRows;$j++) {
  $csv_output .= $rowr[$j].", ";
 }
 $csv_output .= "\n";
}

}

print $csv_output;
exit;
?>

interfejs aplikacji wygląda tak:
https://drive.google.com/file[...]xnUxbVk17ial/view?usp=sharing

a schemat blokowy tak:
https://drive.google.com/file[...]Uak-2jFT6s4A/view?usp=sharing

Problem polega na tym, że aplikacja wysyła puste rekordy do bazy danych, a jak edytuje rekordy w bazie to ich nie wyświetla. Sam plik custcsv.php wyśietla dane z rekordów ale tak:
https://drive.google.com/file[...]Jm0dT1OIWV4B/view?usp=sharing
a wolałbym gdyby chociaż robił to jako wpisy jeden pod drugim. Natomiast przycisk w aplikacji już nic nie wyświetla.

Co zrobić żeby api wysyłała dane a nie tylko puste rekordy i jak wyedytować plik custcsv.php aby wyświetlał dane tak jak chcę, czyli

  1. Zenek, podlasie, ....
  2. ..., ..., ...
  3. ..., ..., ...

Z góry wielkie dzięki, a za pomoc stawiam dobrą flaszkę :D

P.S. dodam tylko, że na serwerach hekko mam ustawione przyjmowanie zewnętrznych adresów ip "%" dla baz danych.

edytowany 3x, ostatnio: Adam Boduch, 2020-02-18 15:52

Pozostało 580 znaków

2020-02-18 14:04

Rejestracja: 3 lata temu

Ostatnio: 1 minuta temu

0

Co do pytania 2 to w select możesz podać tylko interesujące Cię kolumny. Np:
SELECT imię, miejscowosc FROM prosby"
Co do pierwszego pytania to ciężko powiedzieć. Ten builder nie zwraca żadnych błędów?

Pozostało 580 znaków

2020-02-18 14:13

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

0
jurek1980 napisał(a):

Co do pytania 2 to w select możesz podać tylko interesujące Cię kolumny. Np:
SELECT imię, miejscowosc FROM prosby"
Co do pierwszego pytania to ciężko powiedzieć. Ten builder nie zwraca żadnych błędów?

Żadnych błędów nie wywala teraz, wcześniej gdy schemat blokowy był nieco inny, tak jak wskazałem w linku na początku pierwszego postu, to wywalało błąd Error: 1109, niewłaściwy adres url, ale po małych przeróbkach błąd nie wyskakuje, a aplikacja komunikuje się za każdym razem z bazą ale wysyła tylko puste rekordy.

Co do tego select, to jak ten kod napisać?, Samo dopisanie kolumn tabeli powoduje, że plik custcsv.php nic nie wyświetla.

edytowany 2x, ostatnio: sumo22, 2020-02-18 16:23

Pozostało 580 znaków

2020-02-18 18:56

Rejestracja: 3 lata temu

Ostatnio: 1 minuta temu

0

Podmień tą linjkę:

$values = mysqli_query($dbc, "SELECT * FROM prosby");

na

$values = mysqli_query($dbc, "SELECT imie FROM prosby");

I zobacz co się zmieni.
Co do 1 pytania, to jak zasiliłeś bazę jakimiś testowymi danymi? Patrzę na to i dajesz insert na Id, najczęściej takie id nadaje się automatycznie ( baza ma autoincrement), ale wtedy miałbyś błędy.

Pozostało 580 znaków

2020-02-18 19:46

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

0

po zmianie tej linijki otrzymałem takie wyświetlenie w pliku php:
Zenek| | | | Kubuś| | | | Peppa| | | | Prosiaczek| | | | Zenek| | | | Maryla| | | | Zenek| | | | Maryla| | | | | | | | | | | | | | | |
dodam tylko, że zmieniłem sobie "," na "|"

Faktycznie id ma w bazie ustawione AI więc usunąłem z pliku dodaj.php wszystko odnośnie id i aplikacja dalej dodaje wpisy ale nadal puste.

Jeśli chodzi o to jak dodałem dane testowe, to poprostu edytowałem pustekomórki w phpMyAdmin

edit:
jak zmieniłem linijkę na taką:

$values = mysqli_query($dbc, "SELECT id, imie, miejscowosc, prosba FROM prosby");

to wyświetliło wszystko. Jak teraz zrobić żeby coś takiego:

1| Zenek| podlasie| chcem być królem disco polo| 2| Kubuś| domek w lasku| Żeby mi się chciało jak mi się nie chce| 3| Peppa| świat| Chcem nowy rowerek| 4| Prosiaczek| Las| Żeby Kubuś nie wyjadał mi wszystkiego ze spiżarni| 5| Zenek| podlasie| To znowu ja, Zenek, chcem, żeby Radek nie nagrał już żadnego hitu| 6| Maryla| lat... haha 30| Chciałabym zaśpiewać nowy hit z Zenkiem| 7| Zenek| podlasie| Marylko z Tobą zawsze| 8| Maryla| :D| :*| 9| | | | 10| | | | 11| | | |

zamienić na coś takiego:

1| Zenek| podlasie| chcem być królem disco polo| 
2| Kubuś| domek w lasku| Żeby mi się chciało jak mi się nie chce| 
3| Peppa| świat| Chcem nowy rowerek| 
4| Prosiaczek| Las| Żeby Kubuś nie wyjadał mi wszystkiego ze spiżarni| 
5| Zenek| podlasie| To znowu ja, Zenek, chcem, żeby Radek nie nagrał już żadnego hitu| 
6| Maryla| lat... haha 30| Chciałabym zaśpiewać nowy hit z Zenkiem| 
7| Zenek| podlasie| Marylko z Tobą zawsze| 
8| Maryla| :D| :*| 
9| | | | 
10| | | | 
11| | | |
edytowany 3x, ostatnio: sumo22, 2020-02-18 19:53

Pozostało 580 znaków

2020-02-18 20:23

Rejestracja: 3 lata temu

Ostatnio: 1 minuta temu

0

Nazwa pliku custcsv.php i zmienne sugerują, że to miało być wyjście dla pliku CSV.
Znak nowej linii dla plików tekstowych(w tym CSV) itp. to \n i masz taką linijkę:

$csv_output .= "\n";

Jeśli chcesz żeby to się wyświetlało w przeglądarce z nową linią musisz użyć znaku nowej linii z HTML : <BR>. Tylko jeśli to dalej idzie gdzieś jako CSV do innej aplikacji to taka zamiana popsuje Ci działanie gdzieś indziej.
Co do Inserta.
Zobacz czy jak wpiszesz w przeglądarkę (oczywiście wpisz swój adres):
http://adrestwojejstrony/luka[...]ternet&prosba=postnaforum
i zmienisz kod na:

var_dump($_GET);
$id = mysqli_real_escape_string ($dbc, $_GET['id']);
$imie = mysqli_real_escape_string($dbc, $_GET['imie']);
$miejscowosc = mysqli_real_escape_string($dbc,$_GET['miejscowosc']);
$prosba = mysqli_real_escape_string($dbc,$_GET['prosba']);
var_dump($prosba);
die();

to co się pojawi.
W skrócie możesz poczytać o tym jak używać var_dump() -https://www.php.net/manual/en/function.var-dump
die() zatrzymuje wykonie skryptu.

Pozostało 580 znaków

2020-02-18 20:36

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

0
jurek1980 napisał(a):

Nazwa pliku custcsv.php i zmienne sugerują, że to miało być wyjście dla pliku CSV.
Znak nowej linii dla plików tekstowych(w tym CSV) itp. to \n i masz taką linijkę:

$csv_output .= "\n";

Jeśli chcesz żeby to się wyświetlało w przeglądarce z nową linią musisz użyć znaku nowej linii z HTML : <BR>. Tylko jeśli to dalej idzie gdzieś jako CSV do innej aplikacji to taka zamiana popsuje Ci działanie gdzieś indziej.
Co do Inserta.
Zobacz czy jak wpiszesz w przeglądarkę (oczywiście wpisz swój adres):
http://adrestwojejstrony/luka[...]ternet&prosba=postnaforum
i zmienisz kod na:

var_dump($_GET);
$id = mysqli_real_escape_string ($dbc, $_GET['id']);
$imie = mysqli_real_escape_string($dbc, $_GET['imie']);
$miejscowosc = mysqli_real_escape_string($dbc,$_GET['miejscowosc']);
$prosba = mysqli_real_escape_string($dbc,$_GET['prosba']);
var_dump($prosba);
die();

to co się pojawi.
W skrócie możesz poczytać o tym jak używać var_dump() -https://www.php.net/manual/en/function.var-dump
die() zatrzymuje wykonie skryptu.

Faktycznie dodaje do bazy te informacje tak jak piszesz.
A powiedz mi, czy ten kod który każesz podmienić to oczywiście w pliku dodaj.php i rozumiem, że chodzi tylko o dodanie var_dump($GET) i na końcu var_dump($prosba)?

edit//
po dodaniu tego do kodu wywala błąd w aplikacji

Syntax Error: quote in unquoted cell
Cannot parse text argument to "list from csv table" as CSV-formatted table

po usunięciu tego aplikacja błędu nie wywala ale dalej puszcza puste rekordy

Jeśli chodzi o CSV to faktycznie w aplikacji zrobiłem taką opcję żeby wyświetlało dodane posty, ale zmierzam do zrezygnowania z tego na rzecz wyświetlania w pliku php w przeglądarce, dlatego zależy mi na tym, żeby wpisy pokazywały się jeden pod drugim, a dalej nie mogę tego przebrnąć, bo gdy wstawiam <BR> to wywala błąd 500 na stronie.

edytowany 13x, ostatnio: sumo22, 2020-02-18 20:57

Pozostało 580 znaków

2020-02-18 21:13

Rejestracja: 3 lata temu

Ostatnio: 1 minuta temu

1

Te polecenia var_dump miały Ci tylko pokazać jak wygląda tablica GET i co przychodzi Ci z przeglądarki, co idzie do bazy itd.
Poświęć chwilę spróbuj o tym poczytać:
https://www.php.net/manual/en/tutorial.forms.php lub hasła do google: php forumularz GET

Zobacz sobie tak:
zamiast:

$csv_output .= "\n";

wstaw

$csv_output .= "<BR>";

albo użyj:
https://www.php.net/manual/en/function.nl2br.php

$csv_output .= "\n";
$csv_output = nl2br($csv_output);

Pozostało 580 znaków

2020-02-18 21:19

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

0

i rzeczywiście jak wstawiłem:

$csv_output .= "<BR><BR>";

to ładnie są oddzielone, o to chodziło.
A co z kwestią wysyłania pustych rekordów przez apkę? Przez modyfikację linku tekst idzie do bazy a z apki nie :/

edytowany 1x, ostatnio: sumo22, 2020-02-18 21:21

Pozostało 580 znaków

2020-02-18 21:29

Rejestracja: 3 lata temu

Ostatnio: 1 minuta temu

0

Nie wiadomo jak ta apka generuje dane i połączenie. Masz dostęp do jej kodu źródłowego?

Pozostało 580 znaków

2020-02-18 21:45

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

0

Sam App Inventor nie daje możliwości wglądu w kod. Spróbuję wczytać apkę w Android Studio i podeślę kod.

Pozostało 580 znaków

Odpowiedz

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