phpmysql webhosting gebruiken voor apps
Ik ben gestart met het ontwikkelen van apps in react native (voor Android en IOS). Voor mijn app wil ik de phpmyadmin gebruiken van mijn website via Hostnet. De opgeslagen gegevens wil ik analyseren omdat ik een data science en postgresql cursus heb gevolgd. Hierdoor is sqlite niet mogelijk.
Als thuis server kan ik via mijn laptop een koppeling maken via Xampp. Omdat ik dan dag en nacht een computer aan moet laten staan wil ik mijn webhosting gebruiken. Maar hoe kan ik mijn app koppelen aan de phpmyadmin van mijn webhosting? Ik kan geen bestand in htdocs zetten. Ik heb contact opgenomen met Hostnet maar die hebben hier helaas geen verstand van.
Hopelijk kan iemand mij verder helpen :)
Als je thuis verbinding met je database wilt hebben, dan kan je dat proberen. Maar het kan ook dat zij de toegang in hun firewall geblokkeerd hebben.
https://helpdesk.hostnet.nl/hc/nl-nl/articles/360015074837-Externe-toegang-toekennen-aan-databases
Ik kan van mijn thuis nas met de database bij hostnet een verbinding maken.
Je laat immers je sleutels ook nooit achter in je auto als je deze parkeert.
Als je app's toegang wilt geven tot jouw database die jij bijv. thuis of bij je hosting draait. Maak dan een eigen API. Laat de Android-app dan contact zoeken met jouw server op bijv. https://www.jouwserver.nl/api.php. En laat dan via POST of GET via de app de gegevens doorsturen, waarna jij die verwerkt.
Gewijzigd op 01/12/2021 09:47:52 door - Ariën -
Met een api bedoel je de php file neem ik aan (Database.php, DataBaseConfig.php, login.php, signup.php)? Die heb ik al 1 geschreven via Visual Studio Code en geplaatst is Xampp (wat dus eigenlijk niet hoeft om de database van hostnet te gebruiken). Het gedeelte in de app zelf (contact zoeken website, POST/GET) dat begrijp. Ik zie alleen niet het totaal plaatje.
MySQL is de database in hostnet, die wordt beheert door Phpmyadmin. Door het php bestand (api) kan ik phpmyadmin verbinden met de app.
Moet ik de gegevens van hostnet in mijn DataBaseConfig.php bij servername, username, password, databasename zetten? Dus ook paswoord. Wat moet ik met dit bestand doen als ik de database van mijn webhosting wil gebruiken? Ik kan hem niet plaatsen in Xampp?
PS: als ik de link naar hostnet bekijk, wat zou ik dan bij "Vul het IP-adres in van de server of het (thuis)netwerk waarvan je verbinding gaat maken." in moeten vullen.
Wat ik veel lees over xampp:
Database of the Project
1st let's create a database to store the login credentials of the users. The database is created using MySQL. (XAMPP is needed as a pre-requisite)
Gewijzigd op 01/12/2021 11:02:30 door werner g
Wát ga je nu gebruiken?
Als ik zelf een beslissing zou nemen zou ik alles lekker hosten bij Hostnet. Stel je voor dat een grondwerker in je buurt je glasvezelkabel of koperkabeltje door midden hakt of een stroomstoring je huis tergt, dan kan de data niet verzameld worden. De hosting bij Hostnet is ongetwijfeld redundant in stroomvoorziening en verbindingen. Plus dat ze uitgebreide support hebben bij storingen.
Een thuisservertje met XAMPP vind ik meer leuk voor de spielerij of voor ontwikkeldoeleinden. En dan hoef je niet eens de poorten van buiten naar binnen te openen in je firewall. De makers van XAMPP raden zelfs aan om hun product niet voor productiedoeleinden te gebruiken.
In mijn beschreven situatie is het voldoende om in je app een verbinding naar https://www.jouwsitebijhostnet.nl/api.php te maken, die daar alles afhandelt. Dan hoef je ook niet thuis te klooien met verbindingen naar Hostnet etc...
Gewijzigd op 01/12/2021 11:16:47 door - Ariën -
Ik heb het eerst via Xampp geprobeerd. Bij veel voorbeelden staat namelijk dat Xampp verplicht is om phpmyadmin te gebruiken. Voorbeelden zonder Xampp zijn betaald (bijv. firebase gebruiken ipv mysql). Ik ben opzoek naar een gratis oplossing via hostnet omdat ik nog geen inkomsten uit apps heb.
Je bent dus nooit verplicht om phpMyAdmin te gebruiken.
Je kan prima tijdens het ontwikkelen HeidiSQL gebruiken, en op je webhosting phpMyAdmin. Ikzelf ga nog een stap verder en werk op mijn server in de commandline.
Maar je zit toch al bij Hostnet met hosting en een domein? Maar omdat je het gratis wilt, wil je daar vanaf? Begrijp ik?
Gewijzigd op 01/12/2021 11:41:07 door - Ariën -
Dat begrijp ik, terugkomend op mijn vraag: Met een api bedoel je de php file neem ik aan. Kan ik hiervoor dezelfde file gebruiken die ik gemaakt het voor Xampp (Database.php, DataBaseConfig.php, login.php, signup.php)? Of zit ik hier helemaal verkeerd en bedoel je wat anders met een api?
Deze draait je dan natuurlijk in productie bij Hostnet.
Bedankt voor de hulp.
Ik heb het idee dat je nog niet echt begrijpt wat het doel van phpMyAdmin is? Tevens is het ook een merkwaardige reactie van hun.
Gewijzigd op 01/12/2021 13:12:44 door - Ariën -
U moet via de FTP de script plaatsen op de hosting pakket van (mijnwebsite).nl en wij ondersteunen inderdaad php scripts.
Dus kort gezegd, u moet de script via FTP op uw hosting pakket zetten en dan via de PHPmyadmin de waardes goed zetten zoals u het wenst.
----
Volgens mij is mysql de database en phpmyadmin de software waardoor het beschikbaar is via internet. Naar mijn idee zou je een api moeten maken en uploaden naar phpmyadmin zodat het verbinding kan maken met de app.
Wat hun zeggen klopt, alleen jij zei het verkeerd.
Laat je niet op het verkeerde been zetten door het "php" in de naam phpMyAdmin: phpMyAdmin is een tool voor het beheren van MySQL-databases die is geschreven in PHP, maar je hebt phpMyAdmin niet nodig om zelf databases te benaderen met PHP. Alles wat phpMyAdmin kan dankzij PHP, kun je zelf ook bouwen in PHP. En meer.
Werner gast op 01/12/2021 13:34:09:
Volgens mij is mysql de database en phpmyadmin de software waardoor het beschikbaar is via internet. Naar mijn idee zou je een api moeten maken en uploaden naar phpmyadmin zodat het verbinding kan maken met de app.
Ja, Mysql is de database.
Maar die is van zichzelf al verbonden met internet. Mogelijk, of eerder waarschijnlijk, geblokkeerd door een firewall, maar die database is een zelfstandig draaiende service.
Net als Apache en vsFTPd dat bijvoorbeeld zijn.
phpMyAdmin is een tool voor de ontwikkelaar om te kunnen kijken in de database: structuren (tabellen, views etc) aanmaken en data erin zetten of bewerken.
Maar phpMyadmin heb je niet nodig. Er zijn alternatieven. Webgebaseerd zoals phpmyadmin, zodat je die in de browser draait, maar het kan ook met HeidiSQL of als je daar toegang toe hebt, via de command line (via SSH).
PHP scripts zet je normaal op de server (in je hostingpakket) en dan wordt dat door Apache uitgevoerd (mbt de php executable).
Dus als je al wilt zeggen dat je je api.php ergens "op" zet dan zou dat Apache zijn.
vervolgens kan je in dat script, laten we het api.php noemen, iets als doen om een verbinding met die database te maken.
En dan kun je query's afschieten op die database.
Het resultaat daarvan zou je in kunnen pakken in "xml" of "json" en dat naar de browser of Android app kunnen terugsturen.
Maar phpmyadmin is een overbodig stuk software in een productieproces.
Gewijzigd op 01/12/2021 22:20:28 door Ivo P
Dit maakt het wel een stuk duidelijker, thxs :)
Zou ik dan ook nog iets moeten veranderen (behalve servername, username, password, databasename (zie *******)) in DataBaseConfig.php of DataBase.php? Login.php en Signup.php zijn al gemaakt.
De database is al ingericht.
Code (php)
Of in DataBase.php?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
require "DataBaseConfig.php";
class DataBase
{
public $connect;
public $data;
private $sql;
protected $servername;
protected $username;
protected $password;
protected $databasename;
public function __construct()
{
$this->connect = null;
$this->data = null;
$this->sql = null;
$dbc = new DataBaseConfig();
$this->servername = $dbc->servername;
$this->username = $dbc->username;
$this->password = $dbc->password;
$this->databasename = $dbc->databasename;
}
function dbConnect()
{
$this->connect = mysqli_connect($this->servername, $this->username, $this->password, $this->databasename);
return $this->connect;
}
function prepareData($data)
{
return mysqli_real_escape_string($this->connect, stripslashes(htmlspecialchars($data)));
}
function logIn($table, $username, $password)
{
$username = $this->prepareData($username);
$password = $this->prepareData($password);
$this->sql = "select * from " . $table . " where username = '" . $username . "'";
$result = mysqli_query($this->connect, $this->sql);
$row = mysqli_fetch_assoc($result);
if (mysqli_num_rows($result) != 0) {
$dbusername = $row['username'];
$dbpassword = $row['password'];
if ($dbusername == $username && password_verify($password, $dbpassword)) {
$login = true;
} else $login = false;
} else $login = false;
return $login;
}
function signUp($table, $gender, $age, $eater_type, $email, $username, $password)
{
$gender = $this->prepareData($fullname);
$age = $this->prepareData($fullname);
$eater_type = $this->prepareData($username);
$email = $this->prepareData($email);
$username = $this->prepareData($email);
$password = $this->prepareData($password);
$password = password_hash($password, PASSWORD_DEFAULT);
$this->sql =
"INSERT INTO " . $table . " (gender, age, eater_type, email, username, password) VALUES ('" . $gender . "','" . $age . "','" . $eater_type. "','" . $email . "''" . $username . "','" . $password . "')";
if (mysqli_query($this->connect, $this->sql)) {
return true;
} else return false;
}
}
?>
require "DataBaseConfig.php";
class DataBase
{
public $connect;
public $data;
private $sql;
protected $servername;
protected $username;
protected $password;
protected $databasename;
public function __construct()
{
$this->connect = null;
$this->data = null;
$this->sql = null;
$dbc = new DataBaseConfig();
$this->servername = $dbc->servername;
$this->username = $dbc->username;
$this->password = $dbc->password;
$this->databasename = $dbc->databasename;
}
function dbConnect()
{
$this->connect = mysqli_connect($this->servername, $this->username, $this->password, $this->databasename);
return $this->connect;
}
function prepareData($data)
{
return mysqli_real_escape_string($this->connect, stripslashes(htmlspecialchars($data)));
}
function logIn($table, $username, $password)
{
$username = $this->prepareData($username);
$password = $this->prepareData($password);
$this->sql = "select * from " . $table . " where username = '" . $username . "'";
$result = mysqli_query($this->connect, $this->sql);
$row = mysqli_fetch_assoc($result);
if (mysqli_num_rows($result) != 0) {
$dbusername = $row['username'];
$dbpassword = $row['password'];
if ($dbusername == $username && password_verify($password, $dbpassword)) {
$login = true;
} else $login = false;
} else $login = false;
return $login;
}
function signUp($table, $gender, $age, $eater_type, $email, $username, $password)
{
$gender = $this->prepareData($fullname);
$age = $this->prepareData($fullname);
$eater_type = $this->prepareData($username);
$email = $this->prepareData($email);
$username = $this->prepareData($email);
$password = $this->prepareData($password);
$password = password_hash($password, PASSWORD_DEFAULT);
$this->sql =
"INSERT INTO " . $table . " (gender, age, eater_type, email, username, password) VALUES ('" . $gender . "','" . $age . "','" . $eater_type. "','" . $email . "''" . $username . "','" . $password . "')";
if (mysqli_query($this->connect, $this->sql)) {
return true;
} else return false;
}
}
?>
Opsich niks mis mee, hoewel logIn() en signUp() niet in een Database class behoort.
Bedankt voor alle hulp en snelle reacties :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function signUp($table, $gender, $age, $eater_type, $email, $username, $password)
{
$gender = $this->prepareData($fullname);
$age = $this->prepareData($fullname);
$eater_type = $this->prepareData($username);
$email = $this->prepareData($email);
$password = $this->prepareData($password);
$password = password_hash($password, PASSWORD_DEFAULT);
$this->sql =
"INSERT INTO " . $table . " (gender, age, eater_type, email, username, password) VALUES ('" . $gender . "','" . $age . "','" . $eater_type. "','" . $email . "''" . $username . "','" . $password . "')";
if (mysqli_query($this->connect, $this->sql)) {
return true;
} else return false;
}
?>
function signUp($table, $gender, $age, $eater_type, $email, $username, $password)
{
$gender = $this->prepareData($fullname);
$age = $this->prepareData($fullname);
$eater_type = $this->prepareData($username);
$email = $this->prepareData($email);
$password = $this->prepareData($password);
$password = password_hash($password, PASSWORD_DEFAULT);
$this->sql =
"INSERT INTO " . $table . " (gender, age, eater_type, email, username, password) VALUES ('" . $gender . "','" . $age . "','" . $eater_type. "','" . $email . "''" . $username . "','" . $password . "')";
if (mysqli_query($this->connect, $this->sql)) {
return true;
} else return false;
}
?>
Deze functie zal nog steeds werken.
Maar ik heb 1 regel verwijderd. ($username) Die wordt nu niet escaped.
Daarom zou ik een van deze 2 werkwijzes voorstellen:
En dan $email_esc in de query plaatsen.
Of
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$this->sql =
"INSERT INTO " . $table . " (gender, age, eater_type, email, username, password)
VALUES ('" . $this->prepareData($gender) . "',
'" . $this->prepareData($age) . "',
'" . $this->prepareData($eater_type). "',
'" . $this->prepareData($email) . "',
'" . $this->prepareData($username) . "',
'" . $password . "')";
?>
$this->sql =
"INSERT INTO " . $table . " (gender, age, eater_type, email, username, password)
VALUES ('" . $this->prepareData($gender) . "',
'" . $this->prepareData($age) . "',
'" . $this->prepareData($eater_type). "',
'" . $this->prepareData($email) . "',
'" . $this->prepareData($username) . "',
'" . $password . "')";
?>
Daarmee ben je er zeker van dat in de query alles "beveiligd" is
Verder is de hash van een ge-escaped password niet per se gelijk aan de hash van het echte password.
En de hash hoeft niet ge-escaped te worden...
Ga nu de rest in expo afmaken, hoop dat het werkt :)