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

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

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.