Italian Connessione database mysql - easyphp

gdelvecchio

Member
Licensed User
Longtime User
Ciao a tutti
sono nuovo del framework B4A e avrei bisogno di una mano sulla connessione a database mysql.
Lo scenario è questo:
ho installato mysql php e apache con easyphp.
Ho seguito il tutorial di EREL sulla connessione a db mysql, ma quando lancio l'applicazione e provo a eseguire uno statement sql, select o insert che sia, ritorna sempre queto errore:

Risposta Errore server: org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused, Codice stato: -1

Potete aiutarmi?????

:sign0085:

Grazie mille

Grande B4A!!!!!!!:sign0098:
 

gdelvecchio

Member
Licensed User
Longtime User
Ciao e grazie per la risposta celere!

Allora io ho creato un file .php e ho inserito il seguente codice:

PHP:
<?

$databasehost = "127.0.0.1";
$databasename = "nome db";
$databaseusername ="user";
$databasepassword = "pw";

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
$query = file_get_contents("php://input"); 
$sth = mysql_query($query);

if (mysql_errno()) { 
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error(); 
}
else
{
    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>

Nel file ho cancellato tutto e esiste solo il codice che ti ho riportato!
E' giusto?

Il codice b4a è il seguente:

B4X:
Sub Process_Globals
   Dim hc As HttpClient
   Dim TaskID_SUB As Int
   TaskID_SUB = 1
End Sub

Sub Globals
   Dim ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("test")
   If FirstTime Then
      hc.Initialize("hc")
   End If
End Sub

Sub Seleziona_da_tab1
   ProgressDialogShow("Select da tabella TAB1")
   ExecuteRemoteQuery("SELECT * FROM TAB1", 1)
End Sub

Sub ExecuteRemoteQuery(Query As String, TaskID As Int)
   ' connessione al db mysql
    Dim req As HttpRequest
    req.InitializePost2("http://127.0.0.1:8080/MOBILE/Conn.php", Query.GetBytes("UTF8"))
    hc.Execute(req, TaskID)
End Sub
Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskID As Int)
    Log("Risposta Errore server: " & Reason & ", Codice stato: " & StatusCode)
    If Response <> Null Then
        Log(Response.GetString("UTF8"))
        Response.Release
    End If
    ProgressDialogHide
End Sub
Sub hc_ResponseSuccess (Response As HttpResponse, TaskID As Int)
   Dim res As String
   res = Response.GetString("UTF8")
   Log("Response from server: " & res)
   Dim parser As JSONParser
   parser.Initialize(res)
   Select TaskID
         Case TaskID_SUB
         'add the countries to the ListView
         Dim cmdslc As List
         cmdslc = parser.NextArray 'returns a list with maps
         For i = 0 To cmdslc.Size - 1
            Dim m As Map
            m = cmdslc.get(i)
            'We are using a custom type named TwoLines (declared in Sub Globals).
            'It allows us to later get the two values when the user presses on an item.
            Dim getline As String
            getline = m.get("DESC")
            ListView1.AddSingleLine(m)
         Next
         ProgressDialogHide
   End Select
   Response.Release
   
End Sub

All'evento click di un button richiamo la sub Seleziona_da_tab1.

Come vedi ho inserito il file php nell'area pubblica del web server ed è raggiungibile.

Cosa sbaglio?

Grazie mille per l'aiuto:sign0085:
 

gdelvecchio

Member
Licensed User
Longtime User
Scusami ma come faccio a simulare la richiesta??
 

arenaluigi

Well-Known Member
Licensed User
Longtime User
Connessione mysql

Scusami la frase corretta è:
"Io non sono molto esperto di php" :D

Semplicemente apri internet explore e nell'indirizzo scrive:
http://127.0.0.1:8080/MOBILE/Conn.php?input=select * from tab1"

Se vuoi puoi anche non passare la query, la fai direttamente nel php.
 

gdelvecchio

Member
Licensed User
Longtime User
Come vedi simaao in due!:D:D
Se inserisco la query nel file php mi ritorna il json corretto, se invece indico la query come mi hai inidcato mi dice sempre che la query è vuota!

questo è quello che scrivo nel browser
http://127.0.0.1:8080/MOBILE/Conn.php?input="select id, desc from tab1"

e il browser torna sempre:
\nLa query e` vuota

Cosa ne pensi?:sign0161:
 

arenaluigi

Well-Known Member
Licensed User
Longtime User
Connessione mysql

Prova a fare l' echo del comando che ricevi nella query string.
Prova a cambiare questo:
B4X:
$query = file_get_contents("php://input");

con questo:
B4X:
$query = $_GET['input'];
echo $query ;
 

gdelvecchio

Member
Licensed User
Longtime User
ho eseguita la echo della query e cambiando la stringa che passo a:

http://127.0.0.1:8080/MOBILE/Conn.php?input=select id from tab1

mi ritorna questo:
select id from tab1[{"id":"1"},{"id":"2"},{"id":"3"}]

quindi accedo al database!

Come facco, nel codice B4A a beccare la stringa che passo e visualizzarla in una messagebox?

Se faccio una cosa del tipo:
B4X:
Sub ExecuteRemoteQuery(Query As String, TaskID As Int)
   ' connessione al db mysql
    Dim req As HttpRequest
   Dim stringa As String
    req.InitializePost2("http://127.0.0.1:8080/MOBILE/Conn.php", Query.GetBytes("UTF8"))
    hc.Execute(req, TaskID)
   stringa = req
   Msgbox(stringa, "")
End Sub

Mi visualizza una stringa che non è la stringa che passa a mysql

In B4A cosa faresti??

:sign0085:

ancora grazie!:D:D
 

gdelvecchio

Member
Licensed User
Longtime User
Ma per collegare l'emulatore e fargli vedere la rete devo installare B4ABRIDGE!
O qualcos'altro??

L'emulatore su internet va!

:sign0085::sign0085:
 

gdelvecchio

Member
Licensed User
Longtime User
Ciao Luigi

Ho risolto tutto!
Ora mi collego tranquillamente al mio db mysql, ho testato anche la connessione al database su un mysql remto installato su un mio dominio e funziona benissimo!!

Grazie per le dritte su php!!

Ciao:sign0060::sign0060::sign0060:
 

arenaluigi

Well-Known Member
Licensed User
Longtime User

giannimaione

Well-Known Member
Licensed User
Longtime User
Ciao Luigi

Ho risolto tutto!
Ora mi collego tranquillamente al mio db mysql, ho testato anche la connessione al database su un mysql remto installato su un mio dominio e funziona benissimo!!

Grazie per le dritte su php!!

Ciao:sign0060::sign0060::sign0060:

ho attivato uno spazio web (linux - php) su altervista.org , ma ho problemi con il file php

puoi postare il file php ?

grazie
 

worm

Member
Licensed User
Longtime User
B4X:
Sub ExecuteRemoteQuery(Query As String, TaskID As Int)
   ' connessione al db mysql
    Dim req As HttpRequest
   Dim stringa As String
    req.InitializePost2("http://127.0.0.1:8080/MOBILE/Conn.php", Query.GetBytes("UTF8"))
    hc.Execute(req, TaskID)
   stringa = req
   Msgbox(stringa, "")
End Sub

Ciao ragazzi, il problema è l'indirizzo IP. Se vuoi usare Easyphp installato sul tuo pc non puoi usare 127.0.0.1 sull'emulatore..

Su windows devi lanciare il Command Prompt (da Start -> esegui -> cmd), scrivi ipconfig, e devi cercare "Indirizzo IPv4" (di solito è qualcosa del tipo 192.168.1.24) :)
 

gdelvecchio

Member
Licensed User
Longtime User
Perfetto Worm!
Scusate la mia assenza dal forum ma sono andato in ferie!:):)

Quello che dice worm è la cosa alla quale si deve stare attenti!
L'indirizzo ip della macchina è quello da indicare sull'indirizzo da chiamare!

Ora devo andare, ma domani mattina vi posto tutto così eliminiamo tutti i dubbi!

Dato che mi ci sono scornato ben bene spero di potervi aiutare al meglio

Ciao

A domani!
:sign0089::sign0089:
 

giannimaione

Well-Known Member
Licensed User
Longtime User
che strano....
sara' il caldo o cosa, ma con le API 13 e Platform 3.2 adesso funziona bene.

lo script PHP e' quello pubblicato da Erel.
 

micro

Well-Known Member
Licensed User
Longtime User
Salve ragazzi
stavo iniziando a giochicchiare anche io dopo aver installato easyphp sul pc.
Premetto che sto solo eseguendo prove direttamente dal browser del pc.
Non riesco a capire dove sbaglio, questo è il php
PHP:
<?php //definisco i parametri della connessione: nomeserver,username,password e nome db
$databasehost = "127.0.0.1";
$databasename = "mydb"; //con una sola table cliente
$databaseusername ="root";
$databasepassword = "";

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename, $con) or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
//$query = file_get_contents("php://input");
$query = $_GET['input'];
echo $query;
$sth = mysql_query($query);

if (mysql_errno()) {
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error();
}
else
{
    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
mysql_close($con);
?>

Da browser inserisco:
B4X:
http://localhost/connect.php?input="select * f_rom cliente"
e mi risponde:

"select * f_rom cliente"
Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\connect.php:12) in c:\programmi\easyphp1-8\www\connect.php on line 16
"select * f_rom cliente"\nYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"select * f_rom cliente"' at line 1

Ragazzi ho messo l'underscore accanto alla f_rom altrimenti (cosa strana) mi dice internal server error quando devo postare il reply
 

micro

Well-Known Member
Licensed User
Longtime User
ho scritto f_rom solo per poter postare ma nel browser lo scrivo correttamente :)
 
Top