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

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

ただいまの
回答率

87.34%

cakephpで、一つだけDBに保存できないカラムがある。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,104

score 26

Formからusername,password,genderを入力送信してDBに保存させたいのですが、genderだけ保存できません。

var_dump()で$_POSTを確認してみたところgenderの値も入っていました。
---array(5) { ["_method"]=> string(4) "POST" ["_csrfToken"]=> string(128) "4c5d6f8a4b0614cde3b1dff1c5bb4456f9b3a13240c48c21834390ba4a952cf78cc42abe638a4ec99a62e34cc5a839c55c29312275f304cc66423f0da8b5ba61" ["username"]=> string(5) "admin" ["password"]=> string(4) "dsds" ["gender"]=> string(6) "女性" }


テーブル定義は↓です。
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | NO   |     | NULL    |                |
| created  | datetime     | NO   |     | NULL    |                |
| modified | datetime     | NO   |     | NULL    |                |
| password | varchar(255) | NO   |     | NULL    |                |
| gender   | varchar(255) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+


var_dump($this->request->data)の結果は下記の通りです。
object(App\Model\Entity\User)#149 (11) { ["username"]=> string(5) "dfdfd" ["password"]=> string(60) "$2y$10$6oWv90.BfzGFvKqbh26R2uZVPAFNUcTOynLye/Rm1bmTKbKsaYGWW" ["[new]"]=> bool(true) ["[accessible]"]=> array(2) { ["username"]=> bool(true) ["password"]=> bool(true) } ["[dirty]"]=> array(2) { ["username"]=> bool(true) ["password"]=> bool(true) } ["[original]"]=> array(0) { } ["[virtual]"]=> array(0) { } ["[hasErrors]"]=> bool(false) ["[errors]"]=> array(0) { } ["[invalid]"]=> array(0) { } ["[repository]"]=> string(5) "Users" }

//UserController.php
<?php
namespace App\Controller;

use Cake\Auth\DefaultPasswordHasher;
use Cake\Event\Event;

class UsersController extends AppController
{
  public $paginate = [
    'limit' => 5,
    'soft' => 'id',
    'direction' => 'asc'
  ];

  public function login()
  {
    if($this->request->is('post')) {
      $user = $this->Auth->identify();
      if(!empty($user)) {
        $this->Auth->setUser($user);
        return $this->redirect($this->Auth->redirectUrl());
      }
      $this->Flash->error('ユーザー名かパスワードが間違っています。');
    }
  }

  public function logout()
  {
    $this->request->session()->destroy();
    return $this->redirect($this->Auth->logout());
  }

  public function beforeFilter(Event $event)
  {
    parent::beforeFilter($event);
    $this->Auth->allow(['login', 'add', 'index']);
  }


  public function index()
  {
      $users = $this->paginate($this->Users);
      // $users = $this->Users->find('all');

      $this->set(compact('users'));
  }

  public function add() {
    $user = $this->Users->newEntity();
    if($this->request->is('post')){
      $user = $this->Users->patchEntity($user, $this->request->data);
      if ($this->Users->save($user)) {
        $this->Flash->success('Add success!');
        return $this->redirect(['action'=>'index']);
      } else {
        $this->Flash->error('Add error!');
      }
    }
    $this->set(compact('user'));
  }
}
//User.php
<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table
{
  public function initialize(array $config)
  {
    $this->addBehavior('Timestamp');
  }

  public function validationDefault(Validator $validator)
  {
    $validator
      ->notEmpty('username')
      ->requirePresence('username')
      ->notEmpty('password')
      ->requirePresence('password')
      ->notEmpty('gender')
      ->requirePresence('gender');
      return $validator;
  }
}
//add.ctp
<h1>ユーザー登録</h1>
  <?= $this->Form->create($user); ?>
  <?= $this->Form->control('username'); ?>
  <?= $this->Form->control('password'); ?>
  <?= $this->Form->radio('gender', [
      ['value'=>'男性', 'text'=>'男性'],
      ['value'=>'女性', 'text'=>'女性'],
      ['value'=>'etc', 'text'=>'etc']
    ]); ?>
  <?= $this->Form->submit('送信'); ?>
  <?= $this->Form->end(); ?>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • tunnel

    2019/08/30 17:57

    本文の最後に追加いたしました。

    キャンセル

  • nojimage

    2019/08/30 19:09

    src/Model/Entity/User.php を提示してください。 $_accessible はどうなっていますか?

    キャンセル

  • tunnel

    2019/08/31 12:44

    $_accessibleのgenderが抜けていて追加したらgenderも保存できるようになりました。
    ありがとうございます!

    キャンセル

回答 1

check解決した方法

0

$_accessibleのgenderが抜けていて追加したらgenderも保存できるようになりました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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