Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.03 KB | None | 0 0
  1. <?php
  2.  
  3. $error = '';
  4.  
  5. /* chemin du fichier: dossier courant + nom arbitraire */
  6. $chemin = dirname(__FILE__).'/sauvegarde.json';
  7.  
  8. function affiche_input($nom_du_champ, $valeur_du_champ)
  9. {
  10.     /* utilise de la recursion pour gerer les champs imbriques */
  11.     if (is_array($valeur_du_champ)) {
  12.  
  13.         foreach ($valeur_du_champ as $sous_champ => $sous_valeur) {
  14.             /* rappelle affiche input */
  15.             affiche_input($nom_du_champ.'['.$sous_champ.']', $sous_valeur);
  16.         }
  17.  
  18.         return;
  19.     }
  20.  
  21.     echo '
  22.    <label class="logIn__form__label email">'.
  23.     htmlspecialchars($nom_du_champ).'
  24.    <input
  25.      id="login"
  26.      name="'.htmlspecialchars($nom_du_champ).'"
  27.      type="text"
  28.      placeholder="'.htmlspecialchars($valeur_du_champ).'"
  29.      aria-label="Tapez votre email"
  30.      class="logIn__form__input"
  31.      value="'.htmlspecialchars($valeur_du_champ).'"
  32.    />
  33.    </label>';
  34. }
  35.  
  36. function majJSON($json)
  37. {
  38.     /* important pour acceder a une variable globale dans une fonction */
  39.     global $error;
  40.     global $chemin;
  41.  
  42.     /* le parametre LOCK_EX evite que les utilisateurs ecrivent en meme temps */
  43.     if (file_put_contents($chemin, $json, LOCK_EX) === FALSE) {
  44.         $error = 'Impossible d\'ecrire dans le fichier '.$chemin.' !';
  45.         return false;
  46.     }
  47.  
  48.     return true;
  49. }
  50.  
  51. /* gere le POST */
  52. if (isset($_POST['maj'])) {
  53.  
  54.     /* on va re-encoder le contenu de POST sous forme de JSON */
  55.  
  56.     /* idealement il faudrait boucler sur la liste des champs pour verifier
  57.        qu'un utilisateur facetieux n'en a pas rajoute, et faire de la validation
  58.        pour les valeurs */
  59.     foreach ($_POST as $champ => $valeur) {
  60.         switch ($champ) {
  61.  
  62.         case 'a': {
  63.             if ($valeur != 'b') {
  64.                 $error = 'Mauvaise valeur pour le parametre a !';
  65.                 break 2; /* sort directement de la boucle */
  66.             }
  67.         } break;
  68.  
  69.         case 'plop': /* valeur libre */ break;
  70.  
  71.         /* on supprime tous les champs inconnus */
  72.         //default: unset($_POST[$champ]);
  73.  
  74.         }
  75.     }
  76.  
  77.     /* apres cette boucle le contenu de POST est cense etre propre */
  78.     if (! $error) {
  79.         $json = json_encode($_POST);
  80.  
  81.         if (! majJSON($json)) {
  82.             /* erreur */
  83.         }
  84.     }
  85. }
  86.  
  87. /* dans tous les cas : */
  88.  
  89. /* lis le fichier json actuel pour l'afficher (possiblement vide au depart) */
  90. $json_actuel = file_get_contents($chemin);
  91.  
  92. ?>
  93. <!DOCTYPE html>
  94. <html lang="fr">
  95.   <head>
  96.     <meta charset="UTF-8" />
  97.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  98.     <title>Connexion</title>
  99.     <link rel="stylesheet" href="/style.css" />
  100.     </head>
  101.   <body>
  102.     <main>
  103.       <div class="logo"></div>
  104.  
  105.       <?php
  106.       /* affiche un message d'erreur s'il y en a un */
  107.       if ($error) { ?>
  108.       <span class="erreur"><?php echo htmlspecialchars($error); /* toujours se proteger avec htmlspecialchars pour eviter de casser le HTML */ ?></span>
  109.       <?php
  110.       }
  111.       ?>
  112.  
  113.       <?php
  114.       if ($json_actuel) {
  115.       ?>
  116.       <span class="fichier"><pre><?php echo print_r(json_decode($json_actuel, true), true); /* affiche le contenu interprete du JSON */ ?></pre></span>
  117.       <?php } else { ?>
  118.       <span class="fichier">FICHIER VIDE</span>
  119.       <?php } ?>
  120.       <section class="logIn">
  121.         <form action="/tuto.php" class="logIn__form" method="post">
  122.           <input type="hidden" name="maj" value="true" />
  123.           <?php
  124.           $contenu = json_decode($json_actuel, true);
  125.           if ($contenu) {
  126.               foreach ($contenu as $nom_du_champ => $valeur_du_champ) {
  127.                   /* gere les tableaux ! */
  128.                   affiche_input($nom_du_champ, $valeur_du_champ);
  129.           ?>
  130.  
  131.           <?php
  132.           } /* fin du foreach */
  133.           ?>
  134.           <?php
  135.           } /* if contenu */
  136.           ?>
  137.           <input id="btn_Login" type="submit" value="Uploader JSON" class="btn red" />
  138.         </form>
  139.         </section>
  140.     </main>
  141.   </body>
  142. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement