Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $error = '';
- /* chemin du fichier: dossier courant + nom arbitraire */
- $chemin = dirname(__FILE__).'/sauvegarde.json';
- function affiche_input($nom_du_champ, $valeur_du_champ)
- {
- /* utilise de la recursion pour gerer les champs imbriques */
- if (is_array($valeur_du_champ)) {
- foreach ($valeur_du_champ as $sous_champ => $sous_valeur) {
- /* rappelle affiche input */
- affiche_input($nom_du_champ.'['.$sous_champ.']', $sous_valeur);
- }
- return;
- }
- echo '
- <label class="logIn__form__label email">'.
- htmlspecialchars($nom_du_champ).'
- <input
- id="login"
- name="'.htmlspecialchars($nom_du_champ).'"
- type="text"
- placeholder="'.htmlspecialchars($valeur_du_champ).'"
- aria-label="Tapez votre email"
- class="logIn__form__input"
- value="'.htmlspecialchars($valeur_du_champ).'"
- />
- </label>';
- }
- function majJSON($json)
- {
- /* important pour acceder a une variable globale dans une fonction */
- global $error;
- global $chemin;
- /* le parametre LOCK_EX evite que les utilisateurs ecrivent en meme temps */
- if (file_put_contents($chemin, $json, LOCK_EX) === FALSE) {
- $error = 'Impossible d\'ecrire dans le fichier '.$chemin.' !';
- return false;
- }
- return true;
- }
- /* gere le POST */
- if (isset($_POST['maj'])) {
- /* on va re-encoder le contenu de POST sous forme de JSON */
- /* idealement il faudrait boucler sur la liste des champs pour verifier
- qu'un utilisateur facetieux n'en a pas rajoute, et faire de la validation
- pour les valeurs */
- foreach ($_POST as $champ => $valeur) {
- switch ($champ) {
- case 'a': {
- if ($valeur != 'b') {
- $error = 'Mauvaise valeur pour le parametre a !';
- break 2; /* sort directement de la boucle */
- }
- } break;
- case 'plop': /* valeur libre */ break;
- /* on supprime tous les champs inconnus */
- //default: unset($_POST[$champ]);
- }
- }
- /* apres cette boucle le contenu de POST est cense etre propre */
- if (! $error) {
- $json = json_encode($_POST);
- if (! majJSON($json)) {
- /* erreur */
- }
- }
- }
- /* dans tous les cas : */
- /* lis le fichier json actuel pour l'afficher (possiblement vide au depart) */
- $json_actuel = file_get_contents($chemin);
- ?>
- <!DOCTYPE html>
- <html lang="fr">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Connexion</title>
- <link rel="stylesheet" href="/style.css" />
- </head>
- <body>
- <main>
- <div class="logo"></div>
- <?php
- /* affiche un message d'erreur s'il y en a un */
- if ($error) { ?>
- <span class="erreur"><?php echo htmlspecialchars($error); /* toujours se proteger avec htmlspecialchars pour eviter de casser le HTML */ ?></span>
- <?php
- }
- ?>
- <?php
- if ($json_actuel) {
- ?>
- <span class="fichier"><pre><?php echo print_r(json_decode($json_actuel, true), true); /* affiche le contenu interprete du JSON */ ?></pre></span>
- <?php } else { ?>
- <span class="fichier">FICHIER VIDE</span>
- <?php } ?>
- <section class="logIn">
- <form action="/tuto.php" class="logIn__form" method="post">
- <input type="hidden" name="maj" value="true" />
- <?php
- $contenu = json_decode($json_actuel, true);
- if ($contenu) {
- foreach ($contenu as $nom_du_champ => $valeur_du_champ) {
- /* gere les tableaux ! */
- affiche_input($nom_du_champ, $valeur_du_champ);
- ?>
- <?php
- } /* fin du foreach */
- ?>
- <?php
- } /* if contenu */
- ?>
- <input id="btn_Login" type="submit" value="Uploader JSON" class="btn red" />
- </form>
- </section>
- </main>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement