PHPでつくったJSONを編集するでうまくできない

実現したいこと

  • リスト新規ユーザー追加で、「,」の前に改行が入らないようにする
  • 新規ユーザー追加のIDフォームをフォームAに入力された内容+フォームBに入力された内容、フォームBには最初、自動的に8桁の数字を入力しておくようにする

前提

PHPでログインされたら処理内容選択画面(新規ユーザー追加とpswd.json直接編集)を表示し、新規ユーザー追加ではpswd.jsonの「]」の前の行の最後に「,」を追加し、改行して半角スペースを四個追加し、「{"id": "【IDフォームの内容】", "password": "【パスワード入力フォームの内容】", "content": "HTML入力フォームの内容"}」をフォームの内容に合わせて追加する、JSON直接編集ではJSONを直接編集する、というもの。

該当のソースコード

PHP

1<?php2session_start();3 4// ログアウト5if (isset($_GET['logout'])) {6 $_SESSION['logged_in'] = false;7 session_destroy();8 header("Location: {$_SERVER['PHP_SELF']}");9 exit;10}11 12// ログイン13if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {14 if (isset($_POST['id']) && isset($_POST['password']) && $_POST['id'] === '012' && $_POST['password'] === '234') {15 $_SESSION['logged_in'] = true;16 header("Location: {$_SERVER['PHP_SELF']}");17 exit;18 } else {19 if (isset($_POST['id']) || isset($_POST['password'])) {20 $error_message = "ユーザー名またはパスワードが間違っています。";21 }22 ?>23 <!DOCTYPE html>24 <html>25 <head>26 <title>ログイン</title>27 </head>28 <body>29 <h1>ログイン</h1>30 <?php if (isset($error_message)) { ?>31 <p style="color: red;"><?php echo $error_message; ?></p>32 <?php } ?>33 <form method="post">34 ID: <input type="text" name="id"><br>35 パスワード: <input type="password" name="password"><br>36 <input type="submit" value="ログイン">37 </form>38 </body>39 </html>40 <?php41 exit;42 }43}44 45// 更新処理46if (isset($_POST['json_content'])) {47 file_put_contents('pswd.json', $_POST['json_content']);48 $message = '更新が完了しました。';49}50 51// ユーザー追加処理52if (isset($_POST['action'])) {53 if ($_POST['action'] === 'edit_json') {54 ?>55 <!DOCTYPE html>56 <html>57 <head>58 <title>JSONの編集</title>59 </head>60 <body>61 <h1>JSONの編集</h1>62 <form method="post">63 <textarea name="json_content" rows="10" cols="50"><?php echo htmlspecialchars(file_get_contents('pswd.json')); ?></textarea><br>64 <input type="submit" value="更新">65 </form>66 </body>67 </html>68 <?php69 exit;70 } elseif ($_POST['action'] === 'add_user') {71 ?>72 <!DOCTYPE html>73 <html>74 <head>75 <title>新規ユーザー追加</title>76 </head>77 <body>78 <h1>新規ユーザー追加</h1>79 <form method="post">80 ID: <input type="text" name="new_id"><br>81 パスワード: <input type="text" name="new_password"><br>82 HTMLコンテンツ: <input type="text" name="new_content"><br>83 <input type="submit" value="追加">84 </form>85 </body>86 </html>87 <?php88 exit;89 }90}91if (isset($_POST['action']) && $_POST['action'] === 'add_user') {92 ?>93 <!DOCTYPE html>94 <html>95 <head>96 <title>新規ユーザー追加</title>97 </head>98 <body>99 <h1>新規ユーザー追加</h1>100 <form method="post">101 ID: <input type="text" name="new_id"><br>102 パスワード: <input type="text" name="new_password"><br>103 HTMLコンテンツ: <textarea name="new_content"></textarea><br>104 <input type="submit" name="action" value="追加">105 </form>106 </body>107 </html>108 <?php109 exit;110}111 112// ユーザー追加処理(フォーム送信後)113if (isset($_POST['new_id']) && isset($_POST['new_password']) && isset($_POST['new_content'])) {114 $new_data = array(115 'id' => $_POST['new_id'],116 'password' => $_POST['new_password'],117 'content' => $_POST['new_content']118 );119 120 // pswd.jsonの最後の行に追加121 $json = file_get_contents('pswd.json');122 $json = rtrim($json, "]\n") . ", " . json_encode($new_data) . "\n]";123 file_put_contents('pswd.json', $json);124 $message = '新規ユーザーが追加されました。';125}126?>127<!DOCTYPE html>128<html>129<head>130 <title>処理内容選択</title>131</head>132<body>133<?php if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) { ?>134 <p>ログイン中</p>135 <a href="?logout=true">ログアウト</a>136<?php } ?>137 138<?php if (isset($message)) { ?>139 <p><?php echo $message; ?></p>140<?php } ?>141 142<?php if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) { ?>143 <h1>処理内容を選択してください</h1>144 <form method="post">145 <input type="submit" name="action" value="edit_json"> pswd.jsonの編集<br>146 <input type="submit" name="action" value="add_user"> 新規ユーザー追加 147 </form>148<?php } ?>149</body>150</html>

JSON

1[2 {"id": "ID-148975697", "password": "PSWD-8453427", "content": "これはHTML①です"},3 {"id": "ID-248975697", "password": "PSWD-4453427", "content": "これはHTML②です"},4 {"id": "ID-348975697", "password": "PSWD-7453427", "content": "これはHTML③です"}5]

コメントを投稿

0 コメント