Hallo,

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 :)
Huh? Een PHP-script uploaden naar phpMyAdmin? Leg eens uit?

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.
Dit is wat ik als reactie heb gekregen:

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 <?php mysqli_connect(); ?> 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.
Ik ben inderdaad nog niet echt thuis in de termen buiten het programmeren om.
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.

<?php

class DataBaseConfig
{
    public $servername;
    public $username;
    public $password;
    public $databasename;

    public function __construct()
    {

        $this->servername = '********';
        $this->username = '*******';
        $this->password = '*******';
        $this->databasename = '*******';

    }
}

?>




Of in DataBase.php?


<?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;
    }

}

?>
Opsich niks mis mee, hoewel logIn() en signUp() niet in een Database class behoort.
Top, dan ga ik daarmee verder !!
Bedankt voor alle hulp en snelle reacties :)
misschien een puntje van aandacht: (afgezien van dat je $gender nu met de fullname vult)
<?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;
}
?>

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:

<?php $email_esc = $this->prepareData($email); ?>

En dan $email_esc in de query plaatsen.
Of
<?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 . "')";
?>

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...
De aanpassingen heb ik verwerkt, ik heb voor optie 1 gekozen.
Ga nu de rest in expo afmaken, hoop dat het werkt :)

Reageren