Italian [B4A] database online

Aldo's

Active Member
Licensed User
Ciao, oggi avrei bisogno del vostro aiuto per l'utilizzo di un database (sqlite o mysql) on line.
Vedendo sul forum ho capito che ciò è sicuramente possibile.
Esiste un Erel-guida o un altrui-guida su come fare?
Dove la posso trovare?
In questo modo mi informo e provo a risolvere.
Grazie
 

Star-Dust

Expert
Licensed User
Longtime User
Ciao, oggi avrei bisogno del vostro aiuto per l'utilizzo di un database (sqlite o mysql) on line.
Vedendo sul forum ho capito che ciò è sicuramente possibile.
Esiste un Erel-guida o un altrui-guida su come fare?
Dove la posso trovare?
In questo modo mi informo e provo a risolvere.
Grazie
No, non esiste un Erel-Guida
 

amorosik

Expert
Licensed User
Ciao, oggi avrei bisogno del vostro aiuto per l'utilizzo di un database (sqlite o mysql) on line.
Vedendo sul forum ho capito che ciò è sicuramente possibile.
Esiste un Erel-guida o un altrui-guida su come fare?
Dove la posso trovare?
In questo modo mi informo e provo a risolvere.
Grazie

Vedi se questo puo' esserti utile
 

sirjo66

Well-Known Member
Licensed User
Longtime User
guardando il mio sorgente alla pagina che ho segnalato mi sono accorto che il codice PHP è un po' obsoleto poichè molti server (tipo Altervista) non supportano più la libreria mysql ma bisogna utilizzare la libreria mysqli
Ho già realizzato il codice PHP aggiornato, ma chiedevo: è meglio aggiornare il post all'indirizzo indicato oppure creo un nuovo thread e ci butto dentro tutto ??
 

Elric

Well-Known Member
Licensed User
guardando il mio sorgente alla pagina che ho segnalato mi sono accorto che il codice PHP è un po' obsoleto poichè molti server (tipo Altervista) non supportano più la libreria mysql ma bisogna utilizzare la libreria mysqli
Ho già realizzato il codice PHP aggiornato, ma chiedevo: è meglio aggiornare il post all'indirizzo indicato oppure creo un nuovo thread e ci butto dentro tutto ??
Allora non era solo la mia incapacità il motivo per cui non riuscivo ad usare la sirjo66-guida e far funzionare il db su altervista!

Attendo aggiornamenti e grazie in anticipo!
 

sirjo66

Well-Known Member
Licensed User
Longtime User
eccovi il file execute.php aggiornato

B4X:
<?php

// esegue un comando SQL (SELECT - UPDATE - DELETE - INSERT o altri)

$sql = '';
if (isset($_GET['sql'])) $sql = $_GET['sql'];

$chk = '';
if (isset($_GET['chk'])) $chk = $_GET['chk'];

include('include/config.php');

$md5 = md5("SJ".$sql."PT");
if ($md5 != strtolower($chk)) {
    echo "E\nErrore parametro CHK\nParametro CHK non corretto\n"; // 4 righe
    return;
}

//avvio connessione al database
$db = @new mysqli($mysql_host,$mysql_user,$mysql_password,$mysql_database);
if ($db->connect_error) {
    echo "E\nErrore connessione al database\n".$db->connect_error."\n"; // 4 righe
    return;
}
$db->query("SET CHARACTER SET utf8");

$rs = $db->query($sql);
if ($rs === false) {
    echo "E\nErrore query\n".$db->error."\n".$sql;
    $db->close();
    return;
}

// estraggo il comando base
$cmd = strtoupper($sql);
$vn = strpos($cmd, " ");
if ($vn !== false) $cmd = substr($cmd, 0, $vn);

switch ($cmd) {
case "SELECT":
    $nrs = mysqli_num_rows($rs); // record count
    $lst = [];
    for ($i = 0; $i < $nrs; $i++) { $lst[] = mysqli_fetch_assoc($rs); } // porto i risultati sull'array $lst
    echo json_encode($lst);
    break;
case "UPDATE":
    echo "K\n".$db->affected_rows;
    break;
case "DELETE":
    echo "K\n";
    break;
case "INSERT":
    echo "K\n".$db->insert_id;
    break;
default:
    echo "K\n";
}

$db->close();

?>
 

Elric

Well-Known Member
Licensed User

Elric

Well-Known Member
Licensed User
Invece di scrivere i testi delle query nel codice B4X, tenerli altrove.

Sempre se ho capito bene, nel codice uso una key (es. SelectAllCities) che viene inviata e viene poi tradotta in
SQL:
SELECT * FROM cities
.
 

LucaMs

Expert
Licensed User
Longtime User
Invece di scrivere i testi delle query nel codice B4X, tenerli altrove.

Sempre se ho capito bene, nel codice uso una key (es. SelectAllCities) che viene inviata e viene poi tradotta in
SQL:
SELECT * FROM cities
.
Appunto; invece il testo da inviare dovrebbe essee un tuo comando, ovvero il nome di una routine nel PHP che esegua la query.
In questo modo, nel tuo esempio, non invierai il nome della tabella "cities".
 

Elric

Well-Known Member
Licensed User
Ecco. Se quindi ho capito bene, non so come realizzarlo.

Dovrei avere un altro file in php, immagino, ma come scriverlo e/o richiamarlo?
 

Elric

Well-Known Member
Licensed User
Grazie @LucaMs, come sempre!

È stato un po' complesso (per me) perché non conosco bene php.

In breve, includo il file keyqueries.php al codice execute.php di sirjo66:
PHP:
(...)
include('config.php');
include('keyqueries.php');

$md5 = md5("SJ".$sql."PT");
(...)

e popolo il file keyqueries.php:
PHP:
<?php

$action = '';
if (isset($_GET['action'])) $action = $_GET['action'];

switch ($action)

{
    case "SelectAllCities":
        $sql = ("SELECT * FROM Cities");
    break;
 
    //inserire qui le altre query
}

?>

e, quindi, il codice B4X va modificato come segue:
B4X:
Dim keyquery As String
   keyquery = "SelectAllCities" ' qui ci scrivi la key

   Dim MD5 As String = MD5calc("password" & query) ' la password deve essere la stessa del file PHP
   'Dim su As StringUtils 'Non è più necessario
   'query = su.EncodeUrl(query,"UTF8") 'Non è più necessario
   HttpJob.Download("http://www.ilnomedelserver.it/execute.php?chk=" & MD5 & "&action=" & keyquery)

@sirjo66:
Intanto ancora grazie!
PHP:
include('config.php');
funziona, nel senso che nella query non devo specificare in quale db cercare. Con
PHP:
include('include/config.php');
la query ha bisogno anche del db in cui cercare.
PHP:
include('queries.php');
funziona, nel senso che... funziona! Con
PHP:
"include('include/queries.php');
invece non includeva.
è un refuso o mi sono perso qualcosa io?

Vedo se riesco a far funzionare il file con qualche altra query e pubblico il mio esempio.
 
Last edited:

Elric

Well-Known Member
Licensed User
Ciao...

ma esattamente, cos'è che non va nel codice qui di seguito?
PHP:
<?php

$action = '';
if (isset($_GET['action'])) $action = $_GET['action'];

$ID = '';
if (isset($_GET['ID'])) $ID = $_GET['ID'];

$values = '';
if (isset($_GET['values'])) $values = $_GET['values'];

switch ($action)
{
    case "SelectAllAnimals":
        $sql = ("SELECT * FROM Animals");
    break;
 
    case "DeleteOneAnimal":
        $sql = ("DELETE FROM Animals WHERE ID = $ID");
    break;
  
    case "InsertOneAnimal":
        $sql = ("INSERT INTO Animals (ID, type, name, birth_date, sex) VALUES ($ID, $values)");
    break;
  
    case "UpdateOneAnimal":
        $splittedvalues = explode(", ",$values);
        $sql = ("UPDATE Animals SET type = $splittedvalues[0], name = $splittedvalues[1], birth_date = $splittedvalues[2], sex = $splittedvalues[3] WHERE ID = $ID");
    break;
}

?>

SelectAllAnimals e DeleteOneAnimal funzionano.

InsertOneAnimal e UpdateOneAnimal no.

Ma non mi sembrano sbagliate.

Comandi in B4X
B4X:
HttpJob.Download(URL & "/execute.php?chk=" & MD5 & "&action=" & myQuery & "&ID=" & myID & "&values=" & myValue)
' con myQuery passo la key della query
' con myID passo l'ID del record
' con myValue in una sola stringa passo tutti i restanti campi separati da ", "
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
$sql = ("INSERT INTO Animals (ID, type, name, birth_date, sex) VALUES ($ID, $values)");
In quella passi solo il valore di 2 campi ma 5 nomi di campi.

$sql = ("UPDATE Animals SET type = $splittedvalues[0], name = $splittedvalues[1], birth_date = $splittedvalues[2], sex = $splittedvalues[3] WHERE ID = $ID");
Questa potrebbe avere problemi col nome di campo type (a naso, eh).

(primo sito che ho trovato, al volo = non ho letto e non è improbabile che ne siano di migliori):
https://www.mrw.it/php/gestione-eccezioni-php_7007.html
 
Top