Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sauvegarder données

    20 mai 2017 à 16:17:56

    Bonjour,

    Je fais un site où l'utilisateur doit pouvoir enregistrer des données (en gros, je veux faire un planning pour les dates de réservation d'une maison où chacun met les dates où il peut venir). La boite de dialogue est en javascript, comment je dois enregistrer les données ? En fichier texte ? En SQL ? Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      20 mai 2017 à 17:24:01

      Tu peux stocker tes données en XML aussi :)

      Après tout dépend de la taille de ta BDD. 1 seule table ou 50 tables ?

      là va faire la différence.

      Pas beaucoup de table (3 maxi) = tu peux utiliser des fichiers .txt ou < 10:  donnees.xml

      Au-delà, il est préférable d'avoir un support sérieux qui peut traiter beaucoup de données donc c'est selon la taille de ta BDD en fait et le nombre d'infos que tu dois stocker

      • Partager sur Facebook
      • Partager sur Twitter

      Le CSS ça peut craindre -->Conférence CSS3.CREATE

        20 mai 2017 à 19:38:40

        D'accord, merci !

        je pense que je vais faire avec le xml, connais-tu un tutoriel expliquant comment l'utiliser ? Merci !

        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2017 à 20:54:23

          Hello,

          Voici le cours de notre ami qui a aussi écrit un livre :

          -> https://openclassrooms.com/courses/structurez-vos-donnees-avec-xml 

          Pour moi une base de données est plutôt une solution simple et qui permet surtout de trier par critères utilisateur.

          Le format json est aussi sympa comme méthode. On utilise partout dans les API.

          ex -> https://openweathermap.org/current 

          En JS tu fais une requête Ajax qui exécute un script côté serveur comme PHP. Le script interroge la DB puis renvoie toutes les infos au format json. On le parcours en JS puis on injecte le tout dans le document HTML.

          Le plus important est de décider quelle concept tu veux mettre en place afin d'en déduire la solution et les méthodes... 

          -
          Edité par Lucky13 20 mai 2017 à 20:59:48

          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2017 à 21:50:20

            D'accord, merci pour ces liens, je vais regarder ça...

            En gros voilà mon site : trazmor.esy.es (cest moche mais je fais la forme en dernier, d'abord le fond)

            La colonne de gauche représente les familles et la ligne du haut représente les maisons. Chacun clique sur la case correspondante et rentre ses dates, en xml, il faudrait un fichier par maison ou je peux tout faire avec un seul fichier ?

            -
            Edité par Trazmor 20 mai 2017 à 22:19:07

            • Partager sur Facebook
            • Partager sur Twitter
              20 mai 2017 à 22:29:11

              Tu peux utiliser un formulaire HTML, on clic sur une case, on entre la donnée puis on valide -> Ajax ou traitement direct côté serveur.

              Autre solution, simple exemple. Tu peux changer les valeurs de chaque case directement dans la page. Clic sur valider pour les récupérer. 

              Je le laisse tester en modifiant les textes de chaque cases:

              -> https://jsfiddle.net/v01wwvzu/3/ 

              Ensuite on envoie cela côté serveur. Reste à choisir le mode de sauvegarde, fichier texte ou en DB.

              Pour l'inverse on renvoie le texte sous forme de chaîne de caractère (normal) ou au format json si DB. On Split (découpe) la chaîne, le caractère | sert seulement de séparateur. 

              -
              Edité par Lucky13 20 mai 2017 à 22:41:46

              • Partager sur Facebook
              • Partager sur Twitter
                20 mai 2017 à 22:58:09

                Merci beaucoup pour ton aide.

                Je vais essayer pour la sauvegarde et je poste mes avancées

                -
                Edité par Trazmor 20 mai 2017 à 23:01:16

                • Partager sur Facebook
                • Partager sur Twitter
                  20 mai 2017 à 23:30:59

                  Ok, pour ajax je te laisse regarder le cours javascript. on peut simplifier avec jQuery, exemple

                            $.ajax({
                              type: 'GET',
                              url: 'traitement.php?envoi=' + liste,
                              timeout: 20000,
                              success: function(data) {
                                alert(data); },
                              error: function() {
                                alert('La requête n\'a pas abouti'); }
                            }); 

                  Ce code envoi la liste sous forme de chaine de caractère ( le contenu du alert() de mon code) au fichier traitement.php. C'est de type GET, comme pour un formulaire HTML.

                  Toujours en PHP, tu enregistre la liste soit dans un simple fichier texte ou en DB. Puis tu informe que tout c'est bien passé en fin de code PHP. Si oui un simple echo '1' / sinon echo '0'

                  success: function(data) -> le data reçois le contenu du echo (1 ou 0). Tu peux ainsi savoir ou informer l'utilisateur que ces données ont bien été enregistrées.

                  Pour les récupérer c'est le même principe, sauf que le PHP va renvoyer une chaine de type texte, ou un json -> echo $liste par exemple.

                  Cette information sera la aussi contenu dans data . Une simple boucle JS pour découper ( séparateur | comme indicateur) et insérer dans le HTML de la page.

                  Voilà pour la théorie si Ajax te tente... évidemment cela va plus vite, on ne recharge pas la page HTML mais juste le tableau. C'est bien plus pratique pour l'utilisateur. Et tu n'a pas de PHP dans ton HTML puisque c'est le JS qui fait la requête. Ton fichier de travail  peut rester en .html et non pas .php

                  ps: je parle de PHP, je vois que tu est plus en Java ou c++, mais le principe reste le même côté client bien sûr.

                  -
                  Edité par Lucky13 20 mai 2017 à 23:38:17

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 mai 2017 à 17:34:22

                    J'ai essayé de sauvegarder la chaine "liste" dans un txt en javascript mais ca ne fonctionne pas, voila mon code :

                    let element = document.querySelectorAll(".foo");
                    var btn = document.querySelector(".btn--valider");
                    
                    btn.addEventListener('click', function() {
                      var liste = '';
                      for (var i = 0; i < element.length; i++) {	
                          var str = element[i].innerHTML;
                          str = str.replace('&nbsp;', ''); // supprime le caractère espace html &nbsp;
                          liste +=  str + " | ";
                      }
                      alert(liste);
                    	var fileSystem=new ActiveXObject("Scripting.FileSystemObject");
                    	var monfichier=fileSystem.OpenTextFile("data.txt", 2 ,true); //Ouverture du fichier  en mode écriture
                    	monfichier.WriteLine(liste);
                    	monfichier.Close();
                    	alert("fini");
                    });

                    La première alerte s'affiche mais pas la deuxieme... Je vais essayer avec le fichier traitement.php comme tu propose. J'ai aucune idée de comment utiliser ta fonction, je n'ai jamais touché à une ligne de ajax ou jQuery, il faut l'utiliser comme n'importe quelle fonction en faisant $.ajax(); ?

                    Encore merci de ton aide !

                    -
                    Edité par Trazmor 21 mai 2017 à 17:44:40

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 mai 2017 à 18:17:45

                      Non c'est du jQuery, une bibliothèque JS qui simplifie les choses. Il faut donc charger les fichiers nécessaires. Rien de méchant, juste appeler son fichier  CSS dans le <head> et le fichier JS.

                      -> https://openclassrooms.com/courses/simplifiez-vos-developpements-javascript-avec-jquery/avant-de-commencer-6 

                      Puis Ajax :

                      jquery -> https://openclassrooms.com/courses/simplifiez-vos-developpements-javascript-avec-jquery/premiers-pas-avec-ajax 

                      Mais tu peux le faire en JS pure -> https://openclassrooms.com/courses/dynamisez-vos-sites-web-avec-javascript/xmlhttprequest-1 

                      Ensuite écrire dans un fichier texte en locale, ok ; mais pas une fois ton projet en ligne. C'est une sécurité qui empêche de le faire sur le poste du client, et heureusement.

                      Donc, ton projet est pour tourner le local ou prévu pour être en ligne ?

                      Mais la on sort du cadre HTML, il faut te rendre sur la forum JS une fois que tu as compris pour proposer un code. Au pire je peux t'aider par MP mais je ne suis pas toujours dispo. et ne code qu'en PHP (simple novice en java ou c#)

                      Dernière solution, la méthode standard:  créer une interface par formulaire, faire le traitement côté serveur puis recharger page entière.

                      De plus: dans mon code j'utilise le séparateur |

                      - tu peux en choisir un autre, comme *, -, etc... du moment que l'utilisateur  ne s'en serve pas dans son texte. Le | est une bonne solution je trouve.

                      - Dans mon code j'écris  + " | " ; j'ai mis volontairement des caractères d'espace pour la visibilité. Il faudra les supprimer sous peine d'avoir des soucis lors du découpage, donc ce sera + "|"; 

                      - avec cette méthode (contenteditable)  l'utilisateur peut faire un retour à la ligne (touche entrée). Ce qui entraine un <br>  dan sla chaine, il faut aussi le supprimer comme on le fait avec &nbsp; . Ou alors bloquer la touche via JS.

                      Ce n'est pas des plus pertinent comme interface, bien pratique mais il faut prévoir de vérifier tout cela. Par contre PHP propose des filtres prêt à l'emploi pour nettoyer les chaines...

                      Voilà, ça fait beaucoup d'informations mais c'est juste pour te donner une idée. Il existe aussi certainement des plugins JS qui font cela, à voir sur le web...

                      -------------------

                      Perso voilà comment je procède dans ton cas  : je prévois tout d'avance, le concept en me mettant à la place de l'utilisateur. je notes toutes les actions proposées. Je créé l'interface sur une feuille (ou autre). une fois que tout est clair je m'oriente vers telle ou telle méthode = langages à utilisés.

                      Autrement dit, il faut savoir et être sûr de ce que l'on veut proposer, reste à suivre la feuille de route.

                      -
                      Edité par Lucky13 21 mai 2017 à 18:37:47

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 mai 2017 à 20:12:39

                        Merci beaucoup pour ces informations !

                        Oui le site est prévu pour être en ligne. Je vais voir comment je m'en tire avec du PHP/Ajax et je créerais un autre topic autre part si besoin.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mai 2017 à 19:48:11

                          Alors j'ai fait un formulaire qui redirige vers "modif.php" qui enregistre les données dans un .txt :

                          <?php
                          $monfichier = fopen('data.txt', 'w');
                          for($i=1; $i<=15; $i++){
                          	fputs($monfichier, $_POST[$i] . "|");
                          }
                          fclose($monfichier);
                          echo "Enregistrement...";
                          ?>

                          Donc pour l'enregistrement, c'est bon, ca fonctionne !

                          Maintenant je voudrais que quand on arrive sur le site, les input soient synchronisés avec ce qui est dans le .txt, j'ai commencé en javascript, pour ça j'utilise document.getElementById() qui fonctionne bien mais je n'arrive pas avec document.getElementsbyName() ce qui m'évite d'avoir à renseigner un id en plus d'un name, une idée de comment faire ?

                          (Désolé pour le double post mais sinon vous avez pas la notification)

                          -
                          Edité par Trazmor 24 mai 2017 à 20:24:58

                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 mai 2017 à 20:24:34

                            J'imagine que tu as fait un explode(), tu obtient donc un tableau à parcourir avec un for ou mieux un foreach suffit:

                            -> https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-tableaux#/id/r-4239146 

                            Bon tout cela reste de la théorie, maintenant il faut penser à faciliter la conception. ton tableau HTML est-il statique (en 3x3)?

                            Cette question définie la suite, rester sur le même principe ou passer au format json (toujours enregistré dans un simple fichier .txt) pour un tableau plus complexe...

                            json_encode() et _decode -> http://php.net/manual/fr/function.json-encode.php 

                            ps: oui la on n'est plus du tout dans le HTML, changer de forum...

                            -
                            Edité par Lucky13 24 mai 2017 à 20:27:40

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Sauvegarder données

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown