Italian B4A Altervista mySql PHP

Xfood

Well-Known Member
Licensed User
Ciao A tutti,
ho attivato un account su altervista,
creata un db di esempio, ma adesso mi piacerebbe potermi connette
da un'app B4A, qualcuno mi puo aiutare a configurare un file php che mi permetta tramite parametri di inserire,ricercare,modificare i record della tabella.
Grazie mille a tutti
 

Star-Dust

Expert
Licensed User
Per leggere dati dal DataBase
PHP:
<?php
$username = "username";
$password = "";
$dbname = "my_database";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$query=$_GET["query"];
$campo=$_GET["campi"];
$campi = explode("|",$campo);

$result = $conn->query($query);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    $ret="";
    foreach($campi as $value) {
        $ret .= $row[$value]."&";
    }
    $ret = substr($ret,0,strlen($ret)-1);
    echo $ret. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>

La parte B4X per interfacciarsi con php , io di solito lo metto dentro una Classe non ui.
Questa Sub passa i parametri e restituisce il recond dentro una Lista di MAP. Ogni Map contiene una serie di Chiavi (sarebbero i campi) e Valori
B4X:
Public Sub ReadQuery(Query As String,Campi() As String) As ResumableSub
    Dim j As HttpJob
    Dim Result As List
    Dim Campo As String = ""
    Dim Addr As String
 
    For Each S As String In Campi
        Campo=Campo &"|" & s
    Next
    Campo=Campo.SubString(1)
    Addr = $"${url}query.php?query=${encode($"${Query.Trim}&campi=${Campo}"$)}"$

    Result.Initialize
    j.Initialize("", Me)
    j.Download(Addr)
    'Log(Addr)
    Wait For (j) JobDone(j As HttpJob)
    'Log(GetString(j))
    If j.Success And GetString(j)<>"0 results" Then
        Dim Righe() As String = Regex.Split("<br>",GetString(j)) ' Divide tutta la stringa in righe
     
        For I=0 To Righe.Length-1
            If Righe(I).EndsWith("&") Then Righe(I)=Righe(I) & " " ' Impedisce che lo split ignori l'ultimo campo generando un array con un elemento in meno
            Dim Col() As String = Regex.Split("&",Righe(I).Replace("&&","& &")) ' Impedisce allo split di ignorare campi nel mezzo se vuoto
         
            Dim M As Map
            M.Initialize
            If Campi.Length=Col.Length Then ' verifica che il numero dei campi risultanti siano gli stessi dei campi richiesti
                For C=0 To Campi.Length-1
                    Campo=Campi(C)
                    M.Put(Campo,Col(C).Trim) ' Inserisce il valore del campo in un Map, la chiave è il nome campo
                Next
                Result.Add(M) ' Inserisce la Mapp in nella lista
            Else
                Log("Errore di parametri:" & Campi.Length & "-" & Col.Length)
            End If
        Next
    End If
 
    j.Release
 
    Return Result
End Sub
Uso della sub che esegue la query con ph e restituisce una lista di MAP
B4X:
Wait For (ReadQuery($"SELECT * FROM ${Nome Tabella}  WHERE CampoFiltro="${Filtro}" "$,Array As String("Campo1","Campo2","Campo3"))) Complete (Result As List)
 
    For Each M As Map In Result
        Log(M.Get("Campo1"))
        Log(M.Get("Campo2"))
        Log(M.Get("Campo3"))
        Log("________________")
    Nex

Ovviamente ho tutto una classe che gestisce tutto, Lettura, Scrittura ecc.... ma potrai sviluppartela da solo
 
Last edited:

Xfood

Well-Known Member
Licensed User
Grazie Star Dust,
sono alle prima armi su db on line,
in altervista sai dove devo inserire il codice php da te suggerito?
Grazie e scusami se faccio domande stupide
 

Star-Dust

Expert
Licensed User
Grazie Star Dust,
sono alle prima armi su db on line,
in altervista sai dove devo inserire il codice php da te suggerito?
Grazie e scusami se faccio domande stupide
Devi andare prima nel pannello Bacheca e sul riquadro Applicazioni Clicca su Gestione File
In basso trovi crea file. Scrivi come nome query (questo è il nome che la mia sub richiama) e selezione l'estensione php nel combo delle estensioni.
Ti aprirà un editor rudimentale, copia e incolla il codice php e salvalo. Hai finito.
 

Xfood

Well-Known Member
Licensed User
sto facendo delle prove direttamente dal web,
,
mi fa vedere il tuo file php completo, con username, la password inserita, ecc e' normale?
Grazie per il tuo aiuto

P.s. ho modificato la passwor con una finta per adesso, visto che la faceva vedere in chiaro
 

Star-Dust

Expert
Licensed User
sto facendo delle prove direttamente dal web,
,
mi fa vedere il tuo file php completo, con username, la password inserita, ecc e' normale?
Grazie per il tuo aiuto

P.s. ho modificato la passwor con una finta per adesso, visto che la faceva vedere in chiaro
La password di solito è vuota. Comunque non ha importanza se è in chiaro, quando si richiama il file php non viene visualizzato ma eseguito. Quindi si riceve solo il risultato della ricerca non in contenuto del file.

Ma tu avrai sbagliato qualcosa
 

Star-Dust

Expert
Licensed User
Guarda la mia.... non mettendo parametri cosa ti restituisce
 
Last edited:

Xfood

Well-Known Member
Licensed User
Grazie, ci lavoro un po ,
comunque e' un buon inizio, grazie mille

P.s. io dicevo solamente se dal browser qualcuno scrive direttamente la stringa, potrebbe vedere il codice che ci sta dietro,a qul punto creero un file .php con nome strano, cosi e' piu difficile che qualcuno lo intercetti, qualcosa del tipo:
ax0000999944466555.php, dove dentro ci sono le tue funzioni , cosa ne pensi?
 

Star-Dust

Expert
Licensed User
Trasferisci il file contenuto in questo zip nella tua cartella. Ovviamente modifica User e Password e vedi che ti funzionerà
 

Attachments

  • query.zip
    502 bytes · Views: 108

Star-Dust

Expert
Licensed User
Grazie, ci lavoro un po ,
comunque e' un buon inizio, grazie mille

P.s. io dicevo solamente se dal browser qualcuno scrive direttamente la stringa, potrebbe vedere il codice che ci sta dietro,a qul punto creero un file .php con nome strano, cosi e' piu difficile che qualcuno lo intercetti, qualcosa del tipo:
ax0000999944466555.php, dove dentro ci sono le tue funzioni , cosa ne pensi?
Come ti ho spiegato non vede nulla, nemmeno il codice. Nel tuo caso hai sbagliato qualcosa. Vedi il mio, non riesci ad accedere nemmeno il codice

L'unico pericolo e che iniettino comandi aggiuntivi se imparano i parametri dalle richieste... ma questo è un altro problema
 

Xfood

Well-Known Member
Licensed User
Guarda la mia.... non mettendo parametri cosa ti restituisce:
cavolo, e perche la mia no?
ti metto il codice qui che ho incollato su query.php
ho solo aggiunto servername=localhost
$servername="localhost"
$username = "xxxxxx"; ' la user corretta chiaramente
$password = "";
$dbname = "xxxxxxx"; ' il db corretto chiaramente

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$query=$_GET["query"];
$campo=$_GET["campi"];
$campi = explode("|",$campo);

$result = $conn->query($query);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$ret="";
foreach($campi as $value) {
$ret .= $row[$value]."&";
}
$ret = substr($ret,0,strlen($ret)-1);
echo $ret. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
 

sirjo66

Well-Known Member
Licensed User
io ho sviluppato un file PHP che ti permette di accedere al database e di usare praticamente qualsiasi comando SQL
Lo trovi qui: https://www.b4x.com/android/forum/threads/mysql-su-aruba.62942/#post-397483

Per iniziare a fare le prove ti consiglio di disattivare il check della password, poi una volta che vedi che funziona la riattivi.
Se devi utilizzare il tutto su PHP 7 ho anche la nuova versione

Sergio
 

Xfood

Well-Known Member
Licensed User
Grazie, sergio, questa sera appena rientro provo.
Se ho dubbi ti disturbo.
 

giannimaione

Well-Known Member
Licensed User
fermo restando tutto uguale lato B4X, per chi ha poca competenza con PHP (IO!) è sempre possibile creare script lato server anche con ASP ,il buon vecchio ASP!
 

Star-Dust

Expert
Licensed User
fermo restando tutto uguale lato B4X, per chi ha poca competenza con PHP (IO!) è sempre possibile creare script lato server anche con ASP ,il buon vecchio ASP!
Ancora esiste?
 

Star-Dust

Expert
Licensed User

sirjo66

Well-Known Member
Licensed User
P.S.: su altervista (nella stessa cartella dove hai avrai il file execute.php) devi creare il file "config.php" che deve avere questo (ovviamente ci devi modificare il nome del database):
B4X:
<?php
    $mysql_host = "localhost";
    $mysql_database = "track";
    $mysql_user = "root";
    $mysql_password = "";
?>
 

LucaMs

Expert
Licensed User
per chi ha poca competenza con PHP (IO!) è sempre possibile creare script lato server anche con ASP ,il buon vecchio ASP!
Ancora esiste?
1591612292102.png


1591612300964.png



Vecchio... a chi? 😄
 
Top