Bonjour,
Dans la présentation de ton problème, tu dis que les données sont accessibles en réseau. Je part du principe que tu utilises une base de donnée accessible de l'extérieur du restau genre Mysql ou autre. Si c'est une base sur un réseau local, tu dois l'ouvrir à internet.
Voici ma méthode pour lire ou écrire sur une base distante via une requête PHP avec PureBasic (poste info) et SpiderBasic (iOS)
Pour un affichage sur iOS, une solution PHP est possible mais le résultat avec SpiderBasic est plus efficace avec les gadgets, voir ci-dessous.
Programme en PureBasic. il est utilisable tel quel en utilisant ma requête de développement
Code : Tout sélectionner
;
;
; Bertrand maillard
; Lecture d'une base de donnée Mysql via un scrrip PHP
;
;
Enumeration 100
#Main
#scroll
EndEnumeration
#site = "http://bmaillard.free.fr/test/requete_temp.php?code=2498" ; site de test
; procedure de désérialisation de la réponse
Procedure.i SplitString(String.s, Delimiter.s, Array Output.s(1))
Define n, i
n = 1 + CountString(String, Delimiter)
Dim Output.s(n - 1)
For i = 0 To n-1
Output(i) = Trim(StringField(String, 1+i, Delimiter))
Next i
EndProcedure
Procedure LitBase()
ScrollAreaGadget(#Scroll, 10, 50, 480, 400, 480, 1000 )
; éxécution de la requet PHP
*Buffer = ReceiveHTTPMemory(#site)
If *Buffer
Taille = MemorySize(*Buffer)
Page.s = PeekS(*Buffer, Taille, #PB_UTF8|#PB_ByteLength)
FreeMemory(*Buffer)
Dim Requete.s(0)
SplitString(Page, "§", Requete()) ; separation des enregistrements
Nbitem = ArraySize(Requete())-1
Debug (nbitem)
x = 10
Y = 10
For i = 1 To Nbitem
Dim champs.s(0)
SplitString(Requete(i), "/", champs()) ; separation des champs
TextGadget(#PB_Any, X, Y, 100, 30,"id:"+champs(0))
TextGadget(#PB_Any, X+100, Y, 100, 30,champs(1))
TextGadget(#PB_Any, X+200, Y, 100, 30,champs(2))
TextGadget(#PB_Any, X+300, Y, 100, 30,champs(3)+"*")
y = y +20
Next
EndIf
CloseGadgetList()
EndProcedure
If OpenWindow(#Main, 50, 30, 500, 500, "lecture base ",#PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
litbase()
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget();
Type_Event= EventType()
Select EventWindow()
Case #Main
Select event
Case #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndSelect
EndSelect
Until Quit = 1
EndIf
La requête en PHP
Code : Tout sélectionner
<?php
header('Content-type: text/html; charset=UTF-8');
ini_set ( 'display_errors' , 1 ) ;
session_start();
error_reporting(1);
/*
echo '<pre>';
echo "post";
print_r($_POST);
echo "get";
print_r($_GET);
print_r($_SESSION);
echo '</pre>';
*/
if ($_GET[code] == "2498") // une petite sécurite d'accès
include ("database.php");
$db = mysql_connect($dbhost, $dbuname, $dbpass)or die('Erreur de connexion '.mysql_error());
mysql_select_db($dbname,$db) or die('Erreur de connnexion '.mysql_error())
$sql = "SELECT id, date, heure, temp FROM temperature LIMIT 0, 30";
$req = mysql_query($sql) or die('<br />Erreur SQL 947!<br>'.$sql.'<br>'.mysql_error());
echo mysql_num_rows($req)."§"; //retourne le nombre d'enregistrement
while($tab = mysql_fetch_object($req))
{ echo $tab -> id;
echo "/";
echo $tab -> date;
echo "/";
echo $tab -> heure;
echo "/";
echo $tab -> temp;
echo "§";
}
//echo "§";
?>
</body>
Pour l'application IOS , solution en SpiderBasic. Le code est tres similaire sauf l'appel de procedure.
Code : Tout sélectionner
;
;
; Bertrand maillard
; Lecture d'une base de donnée Mysql via un scrrip PHP
;
;
Enumeration Gadget
#MAinWindow
#Scroll
EndEnumeration
#site = "requete_temp.php?code=2498" ; site de test
Procedure.i SplitString(String.s, Delimiter.s, Array Output.s(1))
Define n, i
n = 1 + CountString(String, Delimiter)
Dim Output.s(n - 1)
For i = 0 To n-1
Output(i) = Trim(StringField(String, 1+i, Delimiter))
Next i
EndProcedure
Procedure HttpGetBase(Success, Result.s, UserData) ; retour de la requete info
ScrollAreaGadget(#Scroll, 5, 5, 335, 485, 330, 1000 )
Dim Requete.s(0)
Dim Donnee.s(0)
If Success
SplitString(Result, "§", Requete()) ; separe par enregistrement
Nbitem = ArraySize(Requete())-1
Debug (nbitem)
x = 10
Y = 10
For i = 1 To Nbitem
Dim champs.s(0)
SplitString(Requete(i), "/", champs()) ; separation des champs
TextGadget(#PB_Any, X, Y, 100, 30,"id:"+champs(0))
TextGadget(#PB_Any, X+100, Y, 100, 30,champs(1))
TextGadget(#PB_Any, X+200, Y, 100, 30,champs(2))
TextGadget(#PB_Any, X+300, Y, 100, 30,champs(3)+"*")
y = y +20
Next
Else
SetGadgetText(#PB_Any, "Erreur"+ result+ " "+ sql)
EndIf
CloseGadgetList()
EndProcedure
Procedure GadgetEvents()
gadget = EventGadget()
type_Event = EventType()
; traitement des gadget
EndProcedure
Procedure Start()
If OpenWindow(#MainWindow, 10, 10, 350, 500, "Base " );, #PB_Window_Background) ; |
BindEvent(#PB_Event_Gadget, @GadgetEvents())
HTTPRequest(#PB_HTTP_Get, #site , "", @HttpGetBase()) ; appel de la procedure asynchrone
EndIf
EndProcedure
start()
Pour tester le code compilé :
http://bmaillard.free.fr/test
Le code compilé doit-être placé sur le même domaine que la base de donnée.