IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Envoyer un base de donnée SQLite en PHP-AJAX-JS


Sujet :

AJAX

  1. #1
    Membre confirmé
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Par défaut Envoyer un base de donnée SQLite en PHP-AJAX-JS
    Bonjour à tous,

    Je souhaite récupérer le contenu d'un fichier qui correspond à une base de données SQLite stockée sur le serveur. Pour cela, j'utilise AJAX ainsi qu'un script PHP dont le rôle est de récupérer le nom du fichier en question. De cette façon je ne donne pas le chemin pour y accéder côté serveur. Voici comment j'envoie le contenu du fichier avec le script PHPLoadSQLiteDatabase.php.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $path = $_SERVER['DOCUMENT_ROOT'] . 'ViktorIDE/Users/' . $usrLogin;
    $path .= '/' . $fileName . 'sqllite3';
    // 4- Ouvre la base de données
    $fileRef = fopen($path,'r');
    if (! ($fileRef === false))
    {
    	// 5- On l'expédie
    	$fileSize = filesize($path);
    	$contents = fread($fileRef,$fileSize);
    	echo $contents;
    	fclose($fileRef);
    }

    De l'autre coté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var xhr = new XMLHttpRequest();
    var db;
     
    xhr.open('GET','PHPViktorIDE/PHPLoadSQLiteDatabase.php?Name='+inName,true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function(e) {
    	var uInt8Array = new Uint8Array(this.response);
    	var subDB = new SQL.Database(uInt8Array);
     
    	db = new JSSQLEngine(subDB);
     
    	// test pour vérifier que tout est OK
    	var res = db.execSQLString("SELECT FORMULA FROM VIK_FORMULAS WHERE REFINTCLASS='C12'");
     
    }
    J'ai essayé également d'ouvrir la base de données caractère par caractère. J'ai adapté le code JavaScript afin de transformer le caractère en octet, sans succès.
    Étant donné que la base de données peut avoisiner les 100 Mo, il est donc nécessaire de ne pas transformer les données à expédier pour ne pas accroître la taille. Je pensais recourir à base 64.

    Lorsque j'exécute le code, le fichier correspondant à la base de données provoque une erreur qui dit que le fichier est corrompu ou que la base est cryptée.

    N'hésitez pas à me poser des questions pour compléter ma présentation. Par avance merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 635
    Par défaut
    est ce que vous avez essayé de lire la base de données avec PHP ?
    https://www.php.net/manual/fr/ref.pdo-sqlite.php

  3. #3
    Membre confirmé
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Par défaut
    Non, je ne l'ai pas ouverte avec PDO SQLite. Je veux utiliser l'implémentation de SQLite js en utilisant le projet sql.js.
    En revanche, j'ai réussi à l'ouvrir avec un accès direct en transmettant l'URL complète qui chez moi donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost:8888/ViktorIDE/Users/me_viktoride_com/TravelAgencyA.sqlite3
    L'objectif est de faire fonctionner une application en local (sur portable ou tablette par exemple), càd js/sqlite pour de petites applications et pour les autres on utilise PHP(PDO)/mySQL.

    Merci pour la proposition.

    La base de données SQLite peut varier de 1Mo jusqu'à 100Mo maxi.

  4. #4
    Membre confirmé
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Par défaut
    Finalement j'ai essayé avec l'encodage très coûteux de base64.

    Coté serveur, le script php lit le fichier sqlite3 OK et j'envoie avec cet encodage car il y des caractères problématiques dans la chaîne produite…

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $fileRef = fopen($path,"r");
    $contents = fread($fileRef, filesize($path));
    echo base64_encode($contents);

    coté js, je récupère (j'ai omis le code AJAX pour ne pas alourdir)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var subDB = new SQL.Database(_base64ToArrayBuffer(this.response));
    Quant à la fonction magique _base64ToArrayBuffer elle est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function _base64ToArrayBuffer(base64) {
        var binary_string = window.atob(base64);
        var len = binary_string.length;
        var bytes = new Uint8Array(len);
        for (var i = 0; i < len; i++) 
        {
            bytes[i] = binary_string.charCodeAt(i);
        }
        return bytes.buffer;
    }
    Pas de chance, lorsque j'effectue une requête simple j'obtiens :

    Nom : FAIL.jpg
Affichages : 381
Taille : 129,7 Ko

    Je ne comprends pas pourquoi ? Quelqu'un aurait-il une idée ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Par défaut Fin du monologue
    Puisque personne ne réponds, je clôture le thread.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2008, 10h22
  2. [MySQL] Requête pour vérifier base de donné Mysql en php
    Par srab2pac dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/06/2008, 09h48
  3. Problème de copie d'une base de données MySQL avec PHP
    Par rheem dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 15/10/2007, 14h52
  4. Classe de gestion de base de données SQLITE
    Par Munkey74 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 1
    Dernier message: 09/08/2007, 16h50
  5. [MySQL] Synchronisation de base de données MySQL en PHP
    Par takepaf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/07/2007, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo