Forums Développement Multimédia

Aller au contenu

Enregistrer un tableau de 3600 cases dans une bdd ?

CODE

9 réponses à ce sujet

#1 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 28 September 2011 - 21:49 PM

Coucou tout le monde, me revoilou avec un petit soucis de communication flash -> php -> mysql concernant l'enregistrement et le loading d'une map représentées par un tableau de 3600 entrées.

J'ai testé les fonctions de sauvegarde et de load des données sans la map, tout marche impec. Mais dès que j'ajoute la sauvegarde ou le loading de la map dans la bdd, aie aie aie tout part en sucette !

Est-ce que vous auriez une solution a ce probleme ?

Plus de précisions :
1 dans mon AS, la map est un tableau.
2 je recupere la map dans mon php par le biais d'un $_POST
3 j'enregistre ma map dans une colonne BDD défini en tant que TEXT.

J'ai vu sur le net que certaiens personnes conseillent de faire une operation dans le php sur les tableaux avant de les sauvegarder, mais ce n'etait pas très bien expliqué donc la piste reste floue pour moi.

#2 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 29 September 2011 - 00:42 AM

D'après ce que j'ai trouvé, je dois utiliser la fonction serialize/unserialize dans mon php, seulement voilà je n'arrive pas a le faire fonctionner correctement il semblerait.

Petit exemple de mes php :

Php de sauvegarde :

<?php

$PasswordTest = $_POST['password'];
$PseudoTest =$_POST['pseudo'];

                       
$a   =$_POST['map'];
$ASerialized = serialize($a);

{
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=bla;dbname=bla, 'bla', 'bla');
 
 
        $reponse = $bdd ->query("UPDATE Login SET

                                        Map = '
$ASerialized',
WHERE Pseudo = '
$PseudoTest'");

}

catch (Exception $e)
{
        die('
Erreur : ' . $e->getMessage());
}
         
 
?>


Php de load :


 while ($donnees = $reponse -> fetch())
        {

                $MapUnserialized = unserialize ($donnees['Map'];

                 echo
                        $MapUnserialized."##".
                        $donnees['NombreMur3Stock'];
         
               


#3 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 29 September 2011 - 00:44 AM

Deja je pense que le tableau ne passe pas entier vu que je n'ai dans ma bdd que ceci d'enregistré :

s:119:"4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4";

Mais au moins, la serialisation semble fonctionner

#4 Billyben

    KlouChiPonshoñistäs

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2597 messages

Posté 29 September 2011 - 06:58 AM

Salut, 3600 int + 3599 virgules ça fait un paquet à enregistrer dans une base de donnée (faut paramétrer la colonne en conséquence je suppose) . Tu devrait peut être enregistrer les données dans un fichier, et ne conserver que le nom du fichier dans la bdd.

Sinon, tu peux essayer de passer par un byteArray, qui as la remarquable méthode "compress()" qui peut peut être réduire la taille des données à sauvegarder. (soit utiliser writeObject() ou encore mieux écrire chaque chiffre dans le BA directement (ce qui évite d'enregistrer tout ce qu'il y a autour d'un array!), tu pourrais même mettre la taille de chaque ligne dans le 1er integger du BA!)

#5 Logic

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2733 messages

Posté 29 September 2011 - 12:15 PM

Voir le messageBillyben, le 29 September 2011 - 06:58 AM, dit :

Tu devrait peut être enregistrer les données dans un fichier, et ne conserver que le nom du fichier dans la bdd.


Je ferais comme cela aussi.

Le PHP récupère la data de map par POST, enregistre ça dans un fichier, et stocke l'URL du fichier dans la BDD.

#6 St4n

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 98 messages

Posté 29 September 2011 - 12:32 PM

Bonjour,

Je pense que les opérations en question, c'est l'utilisation du json.

Mais là, il vaut mieux un fichier comme indiqué plus haut.

#7 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 29 September 2011 - 18:27 PM

Coucou a tous,

Merci pour vos réponses,

Je vais me pencher sur la génération d'un fichier de sauvegarde pour chaque joueur, cependant, concernant une question concernant cet enregistrement, où stocker ces fichier de sauvegarde, sur le serveur FTP?

Aussi, qu'est ce que le BA ?

#8 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 30 September 2011 - 02:17 AM

Bon alors je me suis penché aujourd'hui sur cette solution (enregistrer les données dans un fichier), mais quelque chose semble disfonctionner ...

Dans mon FTP, si je regle le CHMOD de mes fichier en 777, alors les scripts ne marchent plus. Si je laisse les Chmods par default (755), alors j'arrive bien a créer un fichier .txt pour chaque nouveau joueur, mais impossible d'ecrire dedans.

Avez vous une idée d'où viens le probleme?

#9 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 30 September 2011 - 07:16 AM

Bon bon bon, après moultes essais, voici le mieu que j'arrive a faire : créer un fichier de sauvegarde et y entre directement des données, mais une fois le fichié refermé, impossible de le modifier, pas très pratique pour sauvegarder l'evolution d'un joueur :/

Auriez vous une idée ?


Mon php :


<?php

$commande = $_POST['commande'];

$PasswordTest = $_POST['password'];
$PseudoTest = $_POST['pseudo'];
$MailTest = $_POST['mail'];


$FichierFormat = '.txt';



if ($commande == 1)
{

        $FichierSauvegarde = fopen ($PseudoTest.$FichierFormat,'a');
        fputs($FichierSauvegarde , 'la ligne a été créée');

        try
        {

        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=hide;dbname=hide, 'hide', 'hide');
 
       
        $reponse = $bdd ->prepare('
REPLACE INTO Login(Pseudo, Password, Mail, LaboLvl) VALUES (:Pseudo,:Password,:Mail,:LaboLvl)');

        $reponse->execute (array(

                '
Pseudo' => $PseudoTest,
                '
Password' => $PasswordTest,
                '
Mail' => $MailTest,
                '
LaboLvl' => 1,
       
                ));

       
        $reponse->closeCursor();
 
        }

        catch (Exception $e)
        {
                  die('
Erreur : ' . $e->getMessage());
        }


        fclose($FichierSauvegarde);
}



else if ($commande == 2)
{

$FichierSauvegarde = fopen ($PseudoTest.$FichierFormat,'
a');
fputs($FichierSauvegarde , '
la ligne a été modifiée');
fclose($FichierSauvegarde);

}
   
fclose($FichierSauvegarde);

?>


Mon fichier .txt a donc en ligne 1 : "la ligne a été créée".

#10 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 02 October 2011 - 02:21 AM

Bon après recherche, il s'est avéré que le problème venait du site FranceServ. En fait, le serveur FTP de FranceServ défini automatiquement les droits des fichiers pour en assurer la protection, ils ont fait une petite manip afin de mettre les bons droits a la définition :)

Maintenant que ça marche je vais pouvoir tester l'enregistrement des données dans un fichier, d'ailleur je me demandais, quitte a avoir ces fichiers, autant enregistrer toutes les données là au lieu d'utiliser la base de donnée non?



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)