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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

630閲覧

cakePHPで作るファイル転送システムに関しての質問

aiai_yano

総合スコア11

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2019/01/22 02:28

編集2019/01/22 02:51

PHP(CakePHP)でファイル転送システムを作っています。
システムの基本設定を変更することができる機能を実装中に以下のエラーメッセージが発生しました。
現在実習中で、自分の前にこのシステムを作っていたコードがこれらなのですが、
この人の書いたコードの意味が分からずどこからどう手をつけて直していけば良いのか分かりません。
ご教授よろしくお願いします。

発生している問題・エラーメッセージ

Notice (8): Undefined variable: set_data [APP/Controller\ConfigsController.php, line 57]

PHP

1*ConfigController.php 2### 該当のソースコード 3 /*==================================================== 4 * add 5 * --------------------------------------------------- 6 * 7 ====================================================*/ 8 public function add() 9 { 10 11 $session = $this->request->session(); 12 // ConfigsTableの構造を取得 13 $user = $this->Configs->newEntity(); 14 15 //確認ボタンが押されたとき 16 if ($this->request->is(['patch', 'post', 'put'])) { 17 18 dump($this->request->data); 19 20 //入力チェック 21 $set_data = $this->Configs->patchEntities($set_data,$this->request->getData()); 22 //var_dump($set_data); 23 //var_dump($result[0]); 24 if ($this->Configs->saveMany($set_data)) { 25 return $this->redirect(['action' => 'index']); 26 } 27 28 } 29 } 30 31

PHP

1*UplordsController.php 2 3 /*==================================================== 4 * initialize 5 ====================================================*/ 6 public function initialize() { 7 8 parent::initialize(); 9 10 //$user_info = $this->Auth->user(); 11 //$this->set('user_info',$user_info); 12 13 // ページタイトルの設定 14 $this->set('title', 'ファイルアップロード'); 15 16 //他のテーブルを参照する為に記述 17 $this->Configs = TableRegistry::get("configs"); 18 $this->domains = TableRegistry::getTableLocator()->get('domains'); 19 $this->Users = TableRegistry::getTableLocator()->get('users'); 20 $this->Downloads = TableRegistry::getTableLocator()->get('downloads'); 21 } 22 23 /*==================================================== 24 * beforeFilter 25 ====================================================*/ 26 public function beforeFilter(Event $event) { 27 28 parent::beforeFilter($event); 29 30 // ログインユーザー情報取得 31 // $user_info = $this->Auth->user(); 32 $user_info = array(); 33 $user_info['user_name'] = 'ログインユーザー'; 34 $user_info['user_kbn'] = 1; 35 $this->set('user_info',$user_info); 36 37 //Query オブジェクトを作成 38 $query = $this->Configs->find('all',[ 39 'keyField' => 'id', 40 'valueField' => 'expiration','download_count' 41 ]); 42 43 //配列に変換 44 $config_list = $query->toArray(); 45 46 //setする変数 47 $max = $config_list[0]->expiration;//上限有効期限 48 $max2 = $config_list[0]->download_count;//上限ダウンロード回数 49 $max_file_count = $config_list[0]->file_count;//上限ファイル数 50 51 /* 52 配列の[0]~[29]に1~30の値が入っている。取得したい値マイナス1した数を配列[]内に指定すると取得できる。 53 この辺りの記述はテンプレートで書いてもOK。さほど重要な処理ではないのでテンプレートにあった方が読みやすくなる。 54 */ 55 $config_expiration = -1 + $config_list[1]->expiration;//デフォルト有効期限 56 $config_download_count = -1 + $config_list[1]->download_count;//デフォルトダウンロード回数 57 58 //var_dump('コントローラーの$max_file_count',$max_file_count); 59 60 //1~有効期限上限値までを配列にする 61 for($i = 0; $i < $max; $i++){ 62 $expiration_list[$i] = $i + 1; 63 } 64 //echo $expiration_list; 65 66 //1~ダウンロード回数上限値までを配列にする 67 for($s = 0; $s < $max2; $s++){ 68 $download_count_list[$s] = $s + 1; 69 } 70 71 //setメソッドでViewにデータを渡す(cakephp3のコントローラーの機能) 72 $this->set('expiration_list',$expiration_list); 73 $this->set('download_count_list',$download_count_list); 74 $this->set('config_expiration',$config_expiration); 75 $this->set('config_download_count',$config_download_count); 76 $this->set('max_file_count',$max_file_count); 77 78 } 79 80

PHP

1*add.ctp 2<?php 3/** 4 * @var \App\View\AppView $this 5 * @var \App\Model\Entity\Config $config 6 */ 7 8 //ConfigsControllerでconfigsテーブルの中身全てを配列に変換 9 //それぞれ欲しい部分だけを変数に代入し直す。 10 //[0]がシステム上限値、[1]がユーザーデフォルト値を指す。 11 // ex, expiration[0] ... 有効期限のシステム上限値 12 $expiration = array_column( $result, 'expiration' ); 13 $file_count = array_column( $result, 'file_count' ); 14 $download_count = array_column( $result, 'download_count' ); 15 $file_size = array_column( $result, 'file_size' ); 16 //cakePHP defaultのテンプレートを無効化する 17 // $this->Form->templates([ 18 // 'inputContainer' => '{{content}}', 19 // 'inputContainerError' => '{{content}}{{error}}', 20 //]); 21 22?> 23 24<div class="row"> 25 <div class="col-md-12"> 26 <div class="box box-info"> 27 <div class="box-header with-border"> 28 <h3 class="box-title">システム基本設定</h3> 29 </div> 30 <?= $this->Form->create('Configs',['class'=>'form-inline']) ?> 31 <fieldset> 32 <div class="box-body"> 33 <div class="row"> 34 <div class="col-lg-6"> 35 <div class="input-group"> 36 <?php 37 echo $this->Form->control('configs[1][expiration]',['label'=>'ダウンロードの有効期限:デフォルト ','value'=>"$expiration[1]"]); 38 ?> 日間 39 </div> 40 </div> 41 <div class="col-lg-6"> 42 <div class="input-group"> 43 <?php 44 echo $this->Form->control('configs[2][expiration]',['label' => 'システム上限値 ','value'=>"$expiration[0]"]); 45 ?> 日間 46 </div> 47 </div> 48 </div> 49 <div class="row"> 50 <div class="col-lg-6"> 51 <div class="input-group"> 52 <?php 53 echo $this->Form->control('configs[1][file_count]',['label'=>'  ファイル数    :デフォルト ','value'=>"$file_count[1]"]); 54 ?> ファイルまで 55 </div> 56 </div> 57 <div class="col-lg-6"> 58 <div class="input-group"> 59 <?php 60 echo $this->Form->control('configs[2][file_count]',['label' => 'システム上限値 ','value'=>"$file_count[0]"]); 61 ?> ファイルまで 62 </div> 63 </div> 64 </div> 65 <div class="row"> 66 <div class="col-lg-6"> 67 <div class="input-group"> 68 <?php 69 echo $this->Form->control('configs[1][download_count]',['label'=>' ダウンロード回数  :デフォルト ','value'=>"$download_count[1]"]); 70 ?> 回まで 71 </div> 72 </div> 73 <div class="col-lg-6"> 74 <div class="input-group"> 75 <?php 76 echo $this->Form->control('configs[2][download_count]',['label' => 'システム上限値 ','value'=>"$download_count[0]"]); 77 ?> 回まで 78 </div> 79 </div> 80 </div> 81 <div class="row"> 82 <div class="col-lg-6"> 83 <div class="input-group"> 84 <?php 85 echo $this->Form->control('configs[1][file_size]',['label'=>' 合計ファイルサイズ :デフォルト ','value'=>"$file_size[1]"]); 86 ?> GBまで 87 </div> 88 </div> 89 <div class="col-lg-6"> 90 <div class="input-group"> 91 <?php 92 echo $this->Form->control('configs[2][file_size]',['label' => 'システム上限値 ','value'=>"$file_size[0]"]); 93 ?> GBまで 94 </div> 95 </div> 96 </div> 97 </div>* 98 </fieldset> 99 <?php 100 echo $this->Form->input('configs[1][id]', [ "type" => "hidden", 101 "value" => "1" ] ); 102 ?> 103 <?php 104 echo $this->Form->input('configs[2][id]', [ "type" => "hidden", 105 "value" => "2" ] ); 106 ?> 107 <?php 108 echo $this-> Form-> submit ( "戻る",['class'=>'btn btn-info pull-right', 109 'style'=>'margin-right: 80px;']); 110 ?> 111 <?php 112 echo $this-> Form-> submit ( "確 認",['class'=>'btn btn-info pull-right','style'=>'margin-right: 10px' 113 ]); 114 ?> 115 <?= $this->Form->end() ?> 116 </div>

試したこと

$set_dataに入るのは入力チェックによる結果だと思ったので$set_data2を作って実際に入力された値たちはそこに入れて渡してみたら解決するかなと思い試してみましたが、出てきたエラーの内容は同じでした。

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

実はこれまではjavaのみやってきましたがいきなりphpに切り替わって、基本は調べつつ解決していっていますがあまり人に聞ける環境でもないのでとても困っています。
どうか助けてください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/22 02:31

コードはマークダウンのcode機能を利用してご提示ください。 エラーについては調べればわかりますが変数が未定義のエラーです。 分岐関係なく初期値を設定しておけばエラー自体は解消できると思いますが、 いかがでしょうか?
aiai_yano

2019/01/22 02:39

初心者なので分かりづらい質問のあげ方をしてしまい大変申し訳ございません・・・。 初期値に空文字を入れて $set_data = ""; と試してみたこともありますが同じく未定義のエラーが出てしまったので困惑中です・・・。
m.ts10806

2019/01/22 02:44

質問は編集できるので適宜ご対応いただければと。 $set_data自体はおそらく配列のようにも思いますが、 本当に初心者であれば既に回答がついている通り、フレームワークに入る前に基本部分をおさえて(入門書でもいいです)からの方が良いかと思います。 学習コストがあまり高くないフレームワークですが、それでもある程度基本部分が理解できていることが前提なので。
aiai_yano

2019/01/22 02:53

修正してみたのでよろしければご確認お願いいたします。 そうですよね、私はjavaしかやったことがないためphpに関しては非常に理解が不足していると考えています。 そのため私がこのシステムを途中から担当して完成させるのは極めて困難です・・・。
m.ts10806

2019/01/22 03:15

「実習中」と「途中から担当」というのがあまりつながらないのですが、任された以上はやりきるしかありません。 質問サイトで質問するより基本をおさえるところからやってください。それが何よりも先決で他人に頼っても解決しないところです。
aiai_yano

2019/01/22 04:03

学校から企業先に実習に来ているのです。 そこで、誰かが途中まで作成したプロジェクトを渡されているのです。 それを現在取り組んでいます! アドバイスをありがとうございました、頑張ります。
m.ts10806

2019/01/22 04:10

Javaがどの程度できるかにもよりますね。Javaですら初心者とあまり変わらないようでしたらあまり「Javaしかやってない」というのは頭から消してPHPのことだけ考えたほうがいいです(やりとり見てると失礼かもしれませんがJavaもそこまでできると言えない様に見えます)
aiai_yano

2019/01/22 04:14

javaは短期のスクールに通ってサーブレットやjspを一通り頑張った程度のものですのでほとんど初心者のようなレベルです。 事業主に相談し、参考書を用意してphpの学習を進めていこうと考えております・・・
m.ts10806

2019/01/22 04:17

そうですね。そちらの方で準備してもらえるならその方がいいです。 書籍については一長一短ありますし、最低でも「PHP7対応」の書籍を選ぶようにしてください。(できれば評価やレビューは確認されたほうがいいです) 評価の高いQiitaの記事を読み漁るのもありです。
aiai_yano

2019/01/22 04:19

ご回答ありがとうございます。 あなたのアドバイスを今後に役立てることができそうです。
m.ts10806

2019/01/22 04:20

直接の回答になっていなくて申し訳なかったです。少しでも前に進めそうなら良かったです
guest

回答2

0

ベストアンサー

$this->Configs->patchEntities($set_data,$this->request->getData())$set_data が未定義なためエラーになっているので適切な値を設定してください。

patchEntitiesの第一引数にはentityの配列構造をセットします。

(ConfigController がかなりおかしなことになってるので、直接的な指摘が難しいレベルです...)

投稿2019/01/22 03:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiai_yano

2019/01/22 04:06

ご回答ありがとうございます。 そうなのですよね、定義を空文字にすることで一応この注意書きを消すところまではできたのですが、ConfigControllerをイニシャライズで作られてしまっているところが難しく、これは私に理解できるものではないのです。 やはり事業主に相談して一緒に解決していただこうと考えています・・・。
guest

0

業務で行っているのであればあなたにはまだ他人のコードを扱うレベルに達していないことを業務指示者に訴えて下さい。
まずは書籍でもサイトでもいいので、入門者向けのPHPプログラム学習をゼロから進め、HelloWorldを10回表示する程度のコードは自分で書けるようにしてから指示を仰いで下さい。
そのエラー(ではなく注意文言ですが)は、$set_dataのところを@$set_dataにするか、その直前に$set_data='';と追記すれば消えます。

投稿2019/01/22 02:40

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiai_yano

2019/01/22 02:44

現在は業務ではなく実習の状態なので、給料もいただいていないのです。 ネットで調べて$set_data='';を試してみたことはあるのですが、それでは解決しなかったため打つ手が思いつかなくなってしまいここに来ました・・・
kunai

2019/01/22 02:49

なんだかブラックな匂いがしますが。 あなたがネットで調べたのは「なぜそのメッセージが表示されているか」「そのメッセージの意味するところはなにか」ではなく、「なんかこんなメッセージが出た時に何をしたら治るか」ですよね? それでは実習の意味はなく、「なんだかよくわからんけど、ググってコピペしたら治った」という悪習が身につくだけです。 他人のコードをいじるレベルに達していないし、このままだと悪習が身につくだけなので、まずご自身でゼロからコードを書いて下さい。 実習を受け入れている方にその旨訴えてみるといいと思います。
aiai_yano

2019/01/22 02:58

実習とはいえそれまでjavaしかやってこなかったので、自分で調べてがんばってくださいと言われてしまうとじゃあ何からがんばればよいのか?という疑問から始まってしまうため、ここで皆さんに対して助けを求めることが私にとっての最終手段でした。 私のphpに対する理解度は大変低く、ある程度の学習が必要と感じています。 事業主に相談して助けを仰いでみることにします。 ご親切にありがとうございます。
kunai

2019/01/22 03:15

自分で調べろと言っているのではなく、最低限のコードは自分で書けるようになってから他人のコードを扱うようにした方がよいと言っているわけです。 Javaの経験があるなら、少なくともこのNoticeが意味するところくらいはわかりそうなものですが。。 「自分は経験がない(浅い)から何もわからない。原因を調べるのなんて無理だ」と自分で思ってしまうとロクなことがありません。 Teratailでも「初心者ですが」と質問文に書かれる事が嫌われるのはこのためで、思考停止を招く魔法のことばであるからです。 知識がないならないなりに、ひとつずつ学習すれば必ず理解が蓄積されます。 今のやり方のままだと、なにかエラーが起こるたびにそのエラーメッセージでググったモノをワケも分からずコピペして「治った/治らない」の繰り返しになりますよ。 https://secure.php.net/manual/ja/language.variables.basics.php
aiai_yano

2019/01/22 04:11

助言をありがとうございます。 私はこれからphpについて学習をすすめていくことにします。 回答者さまの仰るとおり、私の現在取り組んでいることは単なるその場しのぎであり私のためになっていません。 そのため事業主に相談して学習の時間をとっていただこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問