Gestion bdd chez un hebergeur internet qui ne vous ne permet pas d'y acceder directement

0/5 (14 avis)

Vue 9 404 fois - Téléchargée 2 235 fois

Description

Ce programme va vous permettre par une petite astuce et un composant indy de gérer une base de donnée stocké chez un herbergeur qui ne vous permet pas d'y accéder directement avec un logiciel. Pratique si vous ne voulez pas utiliser internet et/ou le php pour la gérer. Le principe est trés simple.
Avec ce soft vous pourrez récupere des données et tout ce qui est possible de faire avec mysql.

J'attends vos commentaires, suggestions et avis.

J'ai remarqué que pas mal de personne ont eu des problemes avec mon ancienne version en voici donc une nouvelle meilleur(surtout au niveau de la vitesse) et qui fonctionne pour vu que vous vous y preniez correctement.

Renommer GestBase.-x- en GestBase.exe pour avoir la version compilé.

Source / Exemple :


Oui c'est du php !
Avant toute chose vous devez mettre ça dans votre fichier gestiondb.php :
Ce fichier doit être uploader chez l'hebergeur.
Remarque que ces variables doivent être les memes que celle que vous avez mise dans le fichier post.txt
Et finalement il est fournit dans le zip !

<?

//Detection de la requette.
if(isset($_POST["sql"]))
	$sql=$_POST["sql"]; else $sql="";
/*

pour ne permettre que la lecture seul vous pouvez ajouter,
par exemple ceci :

$lsql=explode(";",$sql);
$newsql="";
for($i=0;$i<count($lsql);$i++)
{
//On s'assure que la premiere instruction de la requete est un select.
//Si c'est le cas on ajoute la requete
	if(strpos(strtolower(" ".$lsql[$i]),"select")==1)
		$newsql.=$lsql[$i].";";
}

Peut est améliorée, dans la mesure ou peut encore générer des erreures Je m'explique : Essayons "insert into commentaire values('JE ne suis pas d\'accord; ok !');" dans ce cas c'est le second ";" qui marque la fin de l'instruction et non le premier donc forcément on génerera une erreur.
//Finalement on réaffecte la requete sql. $sql=$newsql;
  • /
//Teste des mot de passe et login pour valider la requete. //Si possible cryptez les ! if(($_POST["mdp"]=="leking")&&($_POST["log"]=="mokost")) execreq($sql); //Cette fonction va formater la sortie pour pouvoir utiliser le resultat correctement. function execreq($Req){ //informations concernant la base de donnée. $host="localhost"; $user="root"; $mdp=""; //Base de données sur laquelle on doit agire. $db="matable"; //Séparateure de données concrettes. $sep1="?";//alt + 0158 $sep2="?";//alt + 0154 //Définit la zone de donnée(s) utile(s) évitant ainsi les publicitées. $sepd="?";//alt+ 0138; /* Pour ces séparateure utiliser des chaines non contenue dans vos données et de préférence un caractère. Cepandant assurez vous qu'ils soient les mêmes que ceux de votre variable TReq dans votre appli delphi.
TReq est contenu dans l'unité specproc ainsi que la fonction strtoreq().
Exemple :(c'est du delphi); [...] var MesDonnees : TReq; begin with MesDonnees do begin sep1:='?';//alt + 0158 sep2:='?';//alt + 0154 sepd:='?';//alt+ 0138 end; strtoreq(donneesnonformatees,MesDonnees); [...];
  • /
//le "a" assure qu'il y ait au moin 1 charactere avant. echo "a".$sepd; $cntx= mysql_connect($host, $user, $mdp); if ($cntx) { $link=mysql_select_db($db); if ($link) { $ret=mysql_query($Req); if ($ret) { $nbrow=mysql_num_fields($ret); $str=$nbrow.$sep1.mysql_num_rows($ret).$sep1; for($i=0;$i<$nbrow;$i++) $str=$str.mysql_field_name($ret,$i).$sep1; echo $str.$sep2; while($res=mysql_fetch_row($ret)) { $str=""; for($i=0;$i<$nbrow;$i++) $str=$str.$res[$i].$sep1; //$str=substr($str,2,strlen($str)-1); echo $str."<br>"; } } } } else return 0; echo mysql_error(); mysql_close($cntx); //Le "z" assure qu'il y ait au moin 1 charactere aprés. echo $sepd."z"; } ?>

Conclusion :


il y a une limitation dans le nombre de caracteres admis pour une requete. Je n'ai pas compter mais eviter de lancer une requete du genre :

exec('insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+
'insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+
'insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+
'insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+ ...)
lancer la plutôt de cette maniere :
exec('insert into xxx values(yy,zz)');
exec('insert into xxx values(yy,zz)');
exec('insert into xxx values(yy,zz)');
exec(...);

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
dimanche 15 juin 2003
Statut
Membre
Dernière intervention
18 juin 2009

Salut GO2EDS,

j'ai le même problème que toi (erreur šñìL@^£1)
Tu dis l'avoir contournée...
Tu peux nous dire comment ??

merci !
Messages postés
2
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
11 février 2009

OK, j'ai contourné le problème et cela fonctionne. Maintenant je constate que dans une clause WHERE cela fonctionne très bien si le contenu du champ pour lequel on fait la clause WHERE est numérique mais cela ne fonctionne pas du tout pour du texte :
exmple :
select * from users where id=1; cela va renvoyer un résultat.
select * from users where country='France'; ne fonctionne pas et génère le message d'erreur suivant :
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'France\'' at line 1"

Une idée de comment faire fonctionner la requête avec du texte?
Messages postés
2
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
11 février 2009

Super ce code, im me sera d'une grande utilité!
Petit prob toutefois : si je lance GestBase.-x- (après l'avoir renomé) cela se passe très bien. Par contre si je compile la source et lance l'exécutable j'obtiens l'erreur šñìL@^£1(
A l'ouverture du projet dans Delphi 2009 j'ai les deux messages suivants :
1. Erreur lors de la lecture de idHTTP1.MaxLineAction:La propriété MaxLineAction n'existe pas.
2. Erreur lors de la lecture de idHTTP1.ReadTimeout:La propriété ReadTimeout n'existe pas.

Une idée pourquoi la source compilée ne fonctionne pas alors que l'exe fournit fonctionne très bien?
Messages postés
13
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
29 mars 2009

J'ai voulu utiliser ce code pour me connecter a une base de donnes depuis mon programme delphi mais ca ne fonctionne pas. A chaque fois j'ai une erreur socket #11004.
Quelqu'un pourrait-il m'aider?
Merci
Messages postés
128
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
14 juillet 2008

Tres interressant cette source
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.