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

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

ただいまの
回答率

90.52%

  • PHP

    20330questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CodeIgniter

    274questions

    CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

  • MAMP

    218questions

    Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

データの更新のためにDBの値をビュー→コントローラ→ビューに渡したい。

解決済

回答 2

投稿

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

Ika3242

score 6

前提・実現したいこと

現在CodeIgniterでPHPの勉強をしています。
DBにあるデータの更新を行う処理を追加しようとしています。
登録と更新は同一の画面で行いたいと考えています。
そのため、データの登録時はフォームに初期値がない状態、更新時はフォームに初期値をDBの値が入っている状態にしたいです。
処理のイメージはついていてもコードの書き方がわかっていない状態です。
下記のコードのコメントアウトしている箇所にどのようなコードを書けば良いのかご教授お願いします。
割愛している部分もありますのでもし、不明点がありましたらご質問お願いします。

処理としてやりたいことを大まかに下記にまとめました。
登録:「フォームの情報をカラムに当てはめる(初期値はない)→DBにinsert→トップ画面に戻る」
更新:「トップ画面にあるデータをクリック(IDを取得)→取得したIDからをDBの値を取得→フォームに初期値として入力しておく→(内容変更)→フォームの情報をカラムに当てはめる→DBにupdate→トップ画面に戻る」

humanテーブル。id,name,memoで構成されていてidはオートインクリメントになっています。
|id|name|memo|
|1|satou |abcd |
|2|katou |asdf  |
|3|kudou| aaaa |

該当のソースコード

<?php
    defined('BASEPATH') OR exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="UTF-8">
  <link rel='stylesheet' type='text/css' href='/css/common.css'>
  <link rel='stylesheet' type='text/css' href='/css/simplePagination.css'>
</head>
<body>
<html lang="ja">
 <title>トップ画面(view)</title>

 <div class="main-view"></div>
 <div class="is-search-block util-float-clear">

 <form action="index.php/Top/register">
  <div>
   <button class="btn btn-lg">新規登録</button>
  </div>
 </form>
</div>
 <header>
  <h2 class="page-title">データ一覧</h2>
 </header>
 <div class="scroll-table-wrap">
  <table id="js-search-table" class="table table-striped table-bordered table-hover scroll-table"">
   <thead>
    <tr>
     <th>ID</th>
     <th>名前</th>
     <th>備考</th>
    </tr>
   </thead>
   <tbody>
    <form method="post" action="">
<?php

    foreach ($human as $vals){
        echo "<tr>";
        foreach($vals as $val){
            echo "<td>".htmlspecialchars($val)."</td>";
        }
        echo "</tr>";
    }
?>
    </form>
   </tbody>
  </table>
 </div>
 <div id="paging"></div>

<script>
$("#paging").pagination();

$("#js-search-table td").click(
                               function() {
                               // IDの部分を渡したい
                               location.href = 'index.php/Top/rewrite?id=' + $(this).parent().get(0).id;
                               });
</script>
</body>
</html>
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Top extends CI_Controller {

    public function index()
    {
        $this->load->database();
        $query = $this->db->query('SELECT * FROM human');
        $date = array();

        foreach ($query->result() as $row)
        {
            $date['human'][] = array('id'=>$row->id, 'name'=>$row->name, 'memo'=>$row->memo);
        }
        $this->load->view('top',$date);
    }

    public function register()
    {
        // フラグ
        $titleDate['title'] = 'register';

        $this->load->view('register', $titleDate);
    }

    public function rewrite()
    {
        // トップ画面から取得したidでデータを絞り込む
        // name,memoをregisterのビューに値として渡す

        $this->load->view('register', $date);
    }
<?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body>
<html lang="ja">
<head>
    <title>
<?php
                if($title == "register"){
                    echo "登録画面";
                } elseif($title == "rewrite"){
                    echo "更新画面";
                } else {
                    echo "不正画面";
                }
?>
    </title>
</head>
<body>

<table id="user_base" class="table table-bordered">
<thead>
<tr>
<th class="util-align-left" colspan="3">データの情報</th>
</tr>
</thead>
<tbody>
<tr>
<td class="is-contents">名前</td>
<td class="is-select-form">
<!-- if($title == "rewrite")のとき、valueにコントローラで取得した値を表示したい -->
<input type="text" name="name" th:errorclass="fieldError" value="" placeholder="なまえ" />
</td>
<td class="is-tips"></td>
</tr>
<tr>
<td class="is-contents">備考</td>
<td class="is-select-form">
<!-- if($title == "rewrite")のとき、valueにコントローラで取得した値を表示したい -->
<input class="is-textform-defult form-control" type="text" name="memo" value="" placeholder="何かあれば" th:errorclass="fieldError" />
</td>
<td class="is-tips" />
</tr>
</tbody>
<?php
    if($title == "register"){
        echo '<form method="post" action="index.php/Top/insert">';
        echo '<button class="btn">登録</button>';
        echo '</form>';

    } elseif($title == "rewrite"){
        echo '<form method="post" action="index.php/Top/update">';
        echo '<button class="btn">更新</button>';
        echo '</form>';
    }
?>
</form>
</table>
</div>

<div class="form-inline action-layout-block">

<form action="/">
<button class="btn">トップ</button>
</form>
</div>
</body>
</html>

補足情報(言語/FW/ツール等のバージョンなど)

MAMP
CodeIgniter

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mts10806

    2017/09/28 17:22

    フォーム送信・DB取り扱いの基本の流れと処理だと思うので、フレームワークを使わず、生PHPで実装してみてからの方がイメージがつくと思います。

    キャンセル

  • mts10806

    2017/09/28 17:23

    「PHP CRUD」で調べると結構でてきますよ。

    キャンセル

  • Ika3242

    2017/10/02 09:43

    調べたら参考になるものがありました。自分で調べる単語もあまりよくなかったみたいです。。。教えていただきありがとうございます。

    キャンセル

回答 2

checkベストアンサー

0

一度、Codeigniterチュートリアルを読みましょう。
やりたいことが説明されています。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/02 09:42

    チュートリアルを見て解決することができました。ありがとうございます。

    キャンセル

0

INSERT INTO ~ ON DUPLICATE KEY UPDATE
で処理すればユニークなキーをベースに
競合がなければINSERT、競合していたらUPDATEが実行されます

詳細はユーザーがサーバーに何を送れるかと
SQL側のテーブル構成がどうなっているか仕様を決めないと
説明できません

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/02 09:44

    自分の説明が不足している点など多々あり申し訳ございません。ご指摘今後にも活かせるよう努力いたします。ありがとうございます。

    キャンセル

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

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

関連した質問

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

  • PHP

    20330questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CodeIgniter

    274questions

    CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

  • MAMP

    218questions

    Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト