Italian [B4A] database online

Aldo's

Well-Known 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
 
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
 
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
 
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 ??
 
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!
 
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();

?>
 
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
.
 
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".
 
Ecco. Se quindi ho capito bene, non so come realizzarlo.

Dovrei avere un altro file in php, immagino, ma come scriverlo e/o richiamarlo?
 
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:
[CODE lang="php" highlight="3"](...)
include('config.php');
include('keyqueries.php');

$md5 = md5("SJ".$sql."PT");
(...)[/CODE]

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!
[CODE lang="php"]include('config.php');[/CODE]
funziona, nel senso che nella query non devo specificare in quale db cercare. Con
[CODE lang="php"]include('include/config.php');[/CODE]
la query ha bisogno anche del db in cui cercare.
[CODE lang="php"]include('queries.php');[/CODE]
funziona, nel senso che... funziona! Con
[CODE lang="php"]"include('include/queries.php');[/CODE]
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:
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:
$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
 
Back
Top