質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

メモアプリの編集内容が変更されない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 185

wasabi13679

score 7

編集機能を追加し、メモの内容は表示されるのですが変更する内容が保存されません。

下記のサイトを参考にしております。
https://gray-code.com/php/make-the-board-vol20/

該当のソースコード

<?php 
// データベースの接続情報
define( 'DB_HOST', 'localhost');
define( 'DB_USER', 'root');
define( 'DB_PASS', 'root');
define( 'DB_NAME', 'board');

// タイムゾーン設定
date_default_timezone_set('Asia/Tokyo');

// 変数の初期化
$now_date = null;
$data = null;
$file_handle = null;
$split_data = null;
$message_array = array();
$error_message = array();
$clean = array();

session_start();

if( !empty($_POST['btn_submit']) ) {

    // メッセージの入力チェック
    if( empty($_POST['message']) ) {
        $error_message[] = 'なにか入力してください。';
    } else {
        $clean['message'] = h( $_POST['message'], ENT_QUOTES);
    }

    if( empty($error_message) ) {

        // データベースに接続
        $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME);

        // 接続エラーの確認
        if( $mysqli->connect_errno ) {
            $error_message[] = '書き込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error;
        } else {

            // 文字コード設定
            $mysqli->set_charset('utf8');

            // 書き込み日時を取得
            $now_date = date("Y-m-d H:i:s");

            // データを登録するSQL作成
            $sql = "INSERT INTO message (message, post_date) VALUES (  '$clean[message]', '$now_date')";

            // データを登録
            $res = $mysqli->query($sql);

            if( $res ) {
                $_SESSION['success_message'] = '書き込みに成功しました。';
            } else {
                $error_message[] = '書き込みに失敗しました。';
            }

            // データベースの接続を閉じる
            $mysqli->close();
        }

        header('Location: ./');
    }
}

// データベースに接続
$mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME);

// 接続エラーの確認
if( $mysqli->connect_errno ) {
    $error_message[] = 'データの読み込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error;
} else {

    $sql = "SELECT id,message,post_date FROM message ORDER BY post_date DESC";
    $res = $mysqli->query($sql);

    if( $res ) {
        $message_array = $res->fetch_all(MYSQLI_ASSOC);
    }

    $mysqli->close();
}


//htmlspecialcharsのショートカット
function h($value){
    return htmlspecialchars($value, ENT_QUOTES);
}

?>

<!DOCTYPE html>
<html lang="ja">

<head>

    <title>メモ</title>
    <script src="js/count.js"></script>
    <link rel="stylesheet" type=text/css href="style.css">
</head>

<body>

    <!--メインコンテンツ-->
    <h1>メモ</h1>
    <?php if( empty($_POST['btn_submit']) && !empty($_SESSION['success_message']) ): ?>
    <p class="success_message"><?php echo $_SESSION['success_message']; ?></p>
    <?php unset($_SESSION['success_message']); ?>
    <?php endif; ?>
    <?php if( !empty($error_message) ): ?>
    <ul class="error_message">
        <?php foreach( $error_message as $value ): ?>
        <li><?php echo $value; ?></li>
        <?php endforeach; ?>
    </ul>
    <?php endif; ?>
    <form method=post>
        <div>
            <textarea id="area1" id="message" name="message" onkeyup="viewStrLen();" cols="50" rows="10" placeholder="ここに書いてね"></textarea>
        </div>
        <input type="submit" name="btn_submit" value="登録" class="btn-square">
        <form method="get" action="./download.php">
            <input type="submit" name="btn_download" class="btn-square" value="CSV">
        </form>
        <p id="strLen">文字</p>
    </form>
    <section>

        <?php if(!empty($message_array) ){ ?>
        <?php foreach($message_array as $value ){ ?>
        <article>
            <div class="info">
                <h2><?php echo $value['view_name']; ?></h2>
                <time><?php echo date('Y年m月d日 H:i',strtotime($value['post_date'])); ?></time>
                   <?php if($_SESSION['id']); ?>
                   <form method="get" mode="delete.php<?php echo($message['id']); ?>">
                   <a class="btn-square" href="edit.php?message_id=<?php echo $value['id']; ?>">編集</a>  
                   <a class="btn-square" href="delete.php?message_id=<?php echo $value['id']; ?>">削除</a>
                </form>
            </div>
            <p><?php echo $value['message']; ?></p>
        </article>
        <?php } ?>
        <?php } ?>
    </section>
</body>

</html>

[edit.php]
<?php

// データベースの接続情報
define( 'DB_HOST', 'localhost');
define( 'DB_USER', 'root');
define( 'DB_PASS', 'root');
define( 'DB_NAME', 'board');

// タイムゾーン設定
date_default_timezone_set('Asia/Tokyo');

// 変数の初期化
$message_id = null;
$mysqli = null;
$sql = null;
$res = null;
$error_message = array();
$message_data = array();

session_start();

if(!empty($_GET['message_id']) && empty($_POST['message_id']))  {
    $message_id = (int)h($_GET['message_id'], ENT_QUOTES);
    // データベースに接続
    $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME);

    // 接続エラーの確認
    if( $mysqli->connect_errno ) {
        $error_message[] = 'データベースの接続に失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error;
    } else {

        // データの読み込み
        $sql = "SELECT * FROM message WHERE id = $message_id";
        $res = $mysqli->query($sql);

        if( $res ) {
            $message_data = $res->fetch_assoc();
        } else {

            // データが読み込めなかったら一覧に戻る
            header("Location: ./index.php");
        }

        $mysqli->close();
    }
}elseif(!empty($_POST['message_id'])){
    $message_id = (int)h($_POST['message_id'], ENT_QUOTES);
    if( empty($_POST['message']) ) {
        $error_message[] = '入力してください。';
    } else {
        $message_data['message'] = h($_POST['message'], ENT_QUOTES);
    }

    if( empty($error_message) ) {
        // データベースに接続
        $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME);

        // 接続エラーの確認
        if( $mysqli->connect_errno ) {
            $error_message[] = 'データベースの接続に失敗しました。 エラー番号 ' . $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
        } else {
            $sql = "UPDATE message set post_date = '$message_data[post_date]', message= '$message_data[message]' WHERE id =  $message_id";
            $res = $mysqli->query($sql);
        }

        $mysqli->close();

        // 更新に成功したら一覧に戻る
        if( $res ) {
            header("Location: ./index.php");
        }
}
}

//htmlspecialcharsのショートカット
function h($value){
    return htmlspecialchars($value, ENT_QUOTES);
}

?>
<!DOCTYPE html>
<html lang="ja">

<head>

    <title>編集</title>
    <script src="js/count.js"></script>
    <link rel="stylesheet" type=text/css href="style.css">
</head>

<body>

    <!--メインコンテンツ-->
    <h1>編集</h1>
    <?php if( !empty($error_message) ): ?>
    <ul class="error_message">
        <?php foreach( $error_message as $value ): ?>
        <li><?php echo $value; ?></li>
        <?php endforeach; ?>
    </ul>
    <?php endif; ?>
    <form method=post>
        <div>
            <textarea id="area1" id="message" name="message" onkeyup="viewStrLen();" cols="50" rows="10" placeholder="ここに書いてね"><?php if(!empty($message_data['message']) ){ echo $message_data['message']; }?></textarea>
        </div>
        <a class="btn-square" href="index.php">キャンセル</a>
        <a class="btn-square" href="index.php?message_id=<?php echo $value['id']; ?>">登録</a>  
        <input type="hidden" name="message_id" value="<?php echo $message_data['id']; ?>">
        <p id="strLen">文字</p>
    </form>

</body>

</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • wasabi13679

    2019/06/24 13:36

    分かりました。
    他のところにも入力したら出力されたので、処理を追ってみます。

    キャンセル

  • wasabi13679

    2019/06/25 13:27

    無事に解決しました。
    アドバイスをくださった皆様、ご協力ありがとうございました。

    キャンセル

  • m.ts10806

    2019/06/25 13:29

    解決までの経緯を自身で回答書かれて自己解決とされた方が良いように思います(現状だとベストアンサーに選ばれた回答がどのように解決のヒントとなったのか分からないので、せめてコメントで書いてあげてください)

    キャンセル

回答 1

checkベストアンサー

+1

編集画面のリンク「登録」をクリックしてもそのままの画面
かつ更新内容が元の内容になる、という現象ですかね?

PHPスクリプトの処理内容に合わせるなら
submitボタンで更新するように変更しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る