Page 1 sur 1

Consultation des fichiers programmés en Pb sur Iphone

Publié : jeu. 23/janv./2025 23:09
par omega
Bonsoir,

En fait, j'ai une application développée en pb sous windows qui fonctionne bien (en mono et en réseau internet). Mon client me demande si c'est possible d'utiliser son Phone Mobile pour consulter ses fichiers? Avez-vous une idée ? Est ce possible?
Merci

Re: Consultation des fichiers programmés en Pb sur Iphone

Publié : dim. 02/févr./2025 13:14
par Bmld76
Bonjour,

Ma solution est d'utiliser Spiderbasic. J'ai une application de caisse Spider pour iPad ( identique pour iPhone ) qui fonctionne avec des données clients enregistrés en ligne sur un serveurs Mysql. Spider ne permettant pas une connexion directe sur un serveur distant , je passe par une passerelle PHP. Le résultat est rapide et fiable , mon client l'utilise depuis plus d'un an.

Il m'est possible d'envoyer une trame. Je n'ai pas créé d'appli IOS car cela nécessite d'être développeur enregistré. Il suffit de créer un appli web avec icône.

Re: Consultation des fichiers programmés en Pb sur Iphone

Publié : lun. 03/févr./2025 0:13
par omega
Bonjour Blmd76,

Et merci pour ces infos très utiles, moi qui ne connais rien sur SpiderBasic, j'aimerais si c'est possible voir un peu le code source de votre application pour avoir une idée générale sur l'utilisation du soft sur mobile.

Merci beaucoup d'avance

Re: Consultation des fichiers programmés en Pb sur Iphone

Publié : lun. 03/févr./2025 9:28
par falsam
Comment sont stocké tes données ?

Re: Consultation des fichiers programmés en Pb sur Iphone

Publié : lun. 03/févr./2025 15:55
par Bmld76
Bonjour

Quand on développe en Purebasic, l'utilisation de Spiderbasic est très accessible. Je vais extraire de mon code un exemple fonctionnel d'accès à une base mysql. Je vous fais ca dans la semaine.

Ma structure : hébergement PHP - Mysql
programme PHP qui fait la requête et sérialise la réponse. ( sécurisé)
Programme en spiderBasic donc WebApp
Le prog SpiderBasic interroge le PHP puis désieraliser la réponse

Je vais vous mettre ca à dispo avec un exemple en ligne.

Image

Re: Consultation des fichiers programmés en Pb sur Iphone

Publié : mer. 05/févr./2025 11:53
par Bmld76
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.

Image

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.