Acceder à une BDD MySQL Free depuis un programme purebasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Acceder à une BDD MySQL Free depuis un programme purebasic

Message par Kayne »

Bonjour à tous,

Je voudrais créer un programme qui puisse m'afficher les entrées de ma BDD sur sql.free.fr.

Avec la libmysql.dll on peut faire quelquechose avec localhost et Wamp mais quand j'essaye avec "sql.free.fr" ca marche pas.

J'ai aussi vu des trucs sur ETNA mais j'ai pas vraiment compris l'utilisation.
Si quelqu'un pouvait m'aider ? Je lui serait très reconnaissant :D
pastor
Messages : 54
Inscription : sam. 14/avr./2007 22:59

Message par pastor »

Bonjour Kayne,

Je connais bien MySQL et ca marche fantastiquement bien avec Purebasic et pourtant avec Purebasic je suis le roi des débutant.

Si tu veux faire un essai sans te prendre la tête :

1. Récupère sur Internet EasyPHP ou mieux XAMP
2. En 30 secondes c'est installé
3. Copie la librairie libmysql.dll qui se trouve dans le répertoire d'installation de Xampp, d'EasyPHP ou de la distrib que tu as choisi vers le répertoire ..\Purebasic\Compilers
4. Fait un essai de connexion avec ton navigateur sur le serveur MySQL avec l'appli PhpmyAdmin, généralement l'adresse est : http://127.0.0.1/phpmyadmin
5. Toujours dans PhpMyAdmin, crée une table ma_table dans la base test pour faire tes tests justement.
6. Utilise ce code que j'ai pompé sur le forum :

Code : Tout sélectionner

#libmysql = 1 

host.s    = "127.0.0.1" 
user.s    = "root" 
passwd.s  = "" 
db.s      = "test" 
port.l    = 3306 

dbHnd.l 
SQL.s 
row.s 
i.l 
j.l 
affRows.l 
fieldNum.l 
rowsNum.l 

Procedure.s GetError(db_ID,requester) 
  
  Protected Errormsg.s, i.l, Error.l 
  
  If CallFunction(#libmysql,"mysql_errno",db_ID) > 0 
    *Error =CallFunction(#libmysql,"mysql_error",db_ID) 
    i=-1 
    Repeat 
      i=i+1 
      Errormsg=Errormsg+PeekS(*Error+i,1) 
    Until PeekB(*Error+i)=0 
    If requester 
      Result= MessageRequester("MySQL error",Errormsg,#PB_MessageRequester_Ok) 
    EndIf 
  EndIf 
  
  ProcedureReturn Errormsg 
  
EndProcedure 



If OpenLibrary(#libmysql,"libmysql.dll") 
  Result=CallFunction(#libmysql,"mysql_init",dbHnd) 
  If Result 
    dbHnd = Result 
    If CallFunction(#libmysql,"mysql_real_connect",dbHnd, host, user, passwd, db, port, "", 0) = 0 
      GetError(dbHnd,1) 
    Else 
      CallDebugger 
      SQL = "SELECT * FROM ma_table" 
      If CallFunction(#libmysql,"mysql_real_query", dbHnd, SQL, Len(SQL)) 
        GetError(dbHnd,1) 
      Else 
        *mysqlResult=CallFunction(#libmysql,"mysql_store_result",dbHnd) 
        
        ;no result returned 
        If *mysqlResult=0 
          ;no fields returned means error 
          If CallFunction(#libmysql,"mysql_field_count",dbHnd) 
            GetError(dbHnd,1) 
            ;fields are returned, so no error but query didn't return data 
          Else 
            
          EndIf 
          ;results are returned 
        Else 
          
          
          affRows   = CallFunction(#libmysql,"mysql_affected_rows",dbHnd) 
          fieldNum  = CallFunction(#libmysql,"mysql_num_fields",*mysqlResult) 
          rowsNum   = CallFunction(#libmysql,"mysql_num_rows",*mysqlResult) 
          
          Debug affRows 
          Debug fieldNum 
          Debug rowsNum 
          
          
          For i=1 To rowsNum 
            *mysqlRow=CallFunction(#libmysql,"mysql_fetch_row",*mysqlResult) 
            *mysqlLen=CallFunction(#libmysql,"mysql_fetch_lengths",*mysqlResult) 
            
            row = "" 
            
            ;length of given field 
            For j=1 To fieldNum 
              length=PeekL(*mysqlLen+4*(j-1)) 
              fieldptr=PeekL(*mysqlRow+4*(j-1)) 
              If fieldptr>0 
                content.s=PeekS(fieldptr,length) 
              Else 
                ;zero pointer returend means empty field 
                content="NULL" 
              EndIf 
              row = row + content + ";" 
            Next j 
            
            Debug row 
            
          Next i 
          Result.l=CallFunction(#libmysql,"mysql_free_result",*mysqlResult) 
        EndIf 
      EndIf 
    EndIf 
  EndIf 
Else 
  MessageRequester("Error!", "Couldn't open the libmysql.dll!") 
EndIf
 


Le plus important c'est cette ligne : SQL = "SELECT * FROM ma_table" c'est la que tu mets toutes les commandes que tu veux faire sur tes données.

Cerise sur le gateau, ta base est simultanément accessible depuis ton appli Purebasic et sur Internet avec le navigateur

Concernant sql.free.fr, visiblement c'est uniquement l'interface web de free pour utiliser phpmyadmin et gérer ta base.

J'ai moi aussi un compte chez Free et je ne suis pas arrivé à me connecter depuis Pure dessus (Les connexions externes ne sont peut être pas autorisé chez Free ?!

Voila, si pour une fois je peux aider quelqu'un sur ce forum...

Laurent
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

ETNA, c'est super simple. Je l'est utilisé pour un projet et ça marche nickel.

Tu ne peux pas accédez à ta BDD Free depuis autre chose qu'une page sur leurs serveurs.
Donc en fait, le principe est d'avoir une page (en PHP par exemple) qui va réceptionner et exécuter les requêtes que tu va lui envoyer via ETNA.
Via un ECHO en PHP par exemple tu vas récupérer dans PB, les logs que tu veux renvoyer. ETNA sert donc à simplifier l'appel de la page (en y passant des arguments) et à récupérer les données résultants de cet appel.

Par contre,j il faut que tout soit programmer dans ta page PHP pour modifier ou lire dans ta BDD. Tu peux alors t'arranger pour renvoyer un flux XML pour plus de simplicité de lecture (si tu veux récupérer des gros volumes de données), sinon une réponse bien structurée suffit.

J'espère t'avoir aidé.
Lio :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

Merci de vos réponses.

Lionel_OM tu a l'air de bien t'y connaitre ac ETNA tu pourrait me montrer un petit exemple. Code purebasic, Code php, ou placer la page dans le serveur, que faut il placer dans Purebasic/compilers etc.

Merci a toi aussi pastor, mais je connaissait déja ton code et il ne marche pas ac FREE.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Si tu as bien télécharger le programme depuis http://repeatuntil.free.fr/Etna/ tu as un dossier Doc où tu as tout le nécessaire.

Mais grossomodo il suffit de faire une boucle :

Code : Tout sélectionner

#Etna_Send_Id = 1 ; Id d'un process (car on peut appeler plusieurs pages simultanément
FileToCall$ = "score.php?id=blabla&sort=true" ; nom de la page PHP depuis la racine du site (définie par ETNA_SetServer())


ETNA_Initialise()
ETNA_SetServer("http://mon-serveur.free.fr/")


ETNA_Send(#Etna_Send_Id, FileToCall$)
While ETNA_GetNumberOfCommandsInQueue()
  ETNA_Update()
  If ETNA_Receive(#Etna_Send_Id)
    ; Test des données
    If ETNA_GetState() = #ETNA_OK
      msg$ = ETNA_GetResult()
    Else
      msg$ = "Erreur lors de la réception des données !!!"
    EndIf
  EndIf
Wend

Debug msg$
; affiche tout ce qui aura été généré avec un Echo/Print/Header par ta page PHP
Ta page PHP peut ensuite ressembler à ça :

Code : Tout sélectionner

<?php
// File : score.php

if(isset($_GET['id']))
{
	$sort = FALSE;
	switch( $_GET['sort'] )
	{
		case 1: case "1": case "yes": case "true": $sort = TRUE;
	}
	if($row = $bd->getOneRow("SELECT * FROM `table1` WHERE id='".$_GET['id']."'"
		.($sort ? " ORDER BY SortKeyItem" : "") ))
	{
		echo '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>'."\n"
			."<item>\n"
			."\t<nom>".$row->nomItem."</nom>\n"
			."\t<desc>".$row->descItem."</desc>\n"
			."\t<prix>".$row->prixItem."</prix>\n"
			."</item>\n";
	}
	else
	{
		echo "Item not found !";
	}
}
else
{
	echo "ID is missing !";
}

?>
PS : j'utilise la classe de ce topic : http://www.purebasic.fr/french/viewtopic.php?t=6181

Si t'as des questions, n'hésite pas
Lio :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

Merci de ton aide Lionel,

Mais le probleme c'est que quand je tape

Code : Tout sélectionner

ETNA_Initialise()
Purebasic me renvoie : etna-initialise() is not a function, an array, or a linked list. Que faut il faire pour éviter cette erreur? (J'ai le dossier ETNA sur mon disque dur et le fichier ETNA.dll ds Purebasic/compilers)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Kayne a écrit :Merci de ton aide Lionel,

Mais le probleme c'est que quand je tape

Code : Tout sélectionner

ETNA_Initialise()
Purebasic me renvoie : etna-initialise() is not a function, an array, or a linked list. Que faut il faire pour éviter cette erreur? (J'ai le dossier ETNA sur mon disque dur et le fichier ETNA.dll ds Purebasic/compilers)
Lis bien les directives. T'as deux fichiers à copier/coller et sans doute aussi l'appel à une DLL pour récupérer les fonctions (vrai dans la version que j'ai utilisée, peut-être plus maintenant). Puis faut que tu fermes/réouvre l'éditeur PB.

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

ok, Merci bcp Lionel :D :D

Les fonctions ont l'air de marcher, si j'ai encore des problemes, je viendrais te reposer des questions.

Encore merci
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

Déja un nouveau un nouveau probleme, lorsque je compile l'exemple pour purebasic, j'ai un message d'erreur:
The following purelibrary is missing: object.

Est-ce que qu'elqu'un sais ou je trouve cette library?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Kayne a écrit :Déja un nouveau un nouveau probleme, lorsque je compile l'exemple pour purebasic, j'ai un message d'erreur:
The following purelibrary is missing: object.

Est-ce que qu'elqu'un sais ou je trouve cette library?
Je viens de tester l'exemple "ETNA_HighScore.pb" et il marche très bien.
Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

Moi je le teste à l'instant et ca ne marche pas,
Toujours ce message d'erreur : The following purelibrary is missing : object :(

Je vois pas comment faire pour résoudre ce pb ..
Même si je retelecharge, ca change rien
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

T'as quelle version de PB ? c'est une version démo ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

Non j'ai la version 3.94
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

et pourquoi tu ne télécharges pas la 4.10 sur ton compte ??
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

La 4.10 est finalisée ? 8O 8O 8O
Répondre