前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(Laravel5)で顧客管理なシステムを作っています。
C#を一年ほど勉強していました。
PHPはまだ初めて1ヵ月も満たない初心者です。不慣れな質問で申し訳ございません。
■やりたい事
同クラス内で関数を呼びだしinsertが終了するとtrueを返したいだけですが、中々うまくいきません。
ソースコード
※同クラス上部省略 $ret = $request->status; $response = insert(ret); return response()->json($response); } /** * insert */ static function insert($ret){ Log::debug('log_start:'.__FUNCTION__); $str = "insert into users (" ."create_user_name, " ."post_number, " ."address, " ."create_user_tel, " ."create_user_fax, " ."create_user_mail, " ."password, " ."create_date, " ."update_user_id, " ."update_date " .")values( " ."'$name', " ."'$post', " ."'$address', " ."'$tel', " ."'$fax', " ."'$mail', " ."'$password', " ."now(), " ."1, " ."now()" .")"; DB::insert($str); // Log::debug('log_end:'.__FUNCTION__); return true; }
self::insert($ret);
と書いてもダメなようですが、どのようなエラーが出ているのでしょうか?
遅くにありがとうございます。
検証ツール(js)
POST http://localhost/kasegu_management/public/createUserValidation 500 (Internal Server Error)
デバック
[2021-09-30 02:49:01] local.ERROR: Undefined variable: name {"exception":"[object] (ErrorException(code: 0): Undefined variable: name at C:\\xampp\\htdocs\\kasegu_management\\app\\Http\\Controllers\\User\\UserController.php:163)
すみません。
nameがわからない。というエラーになっています。
$name = $request->input('name');
insertの親元の初めにRequestから受け取ったデータを一番上に入れています。
この場合、insertにもrequestを渡してあげないといけないと思いますが、
そのinsert関数内でreturn trueといった返却は可能ですか?
/**
* 入力項目validation->insert->trueを返す
* 初期値;true
*/
public function createUserValidation(Request $request)
{
// 値取得
$name = $request->input('name');
$mail = $request->input('mail');
$post = $request->input('post');
$address = $request->input('address');
$tel = $request->input('tel');
$fax = $request->input('fax');
$password = $request->input('password');
$password_conf = $request->input('password_conf');
$agree = $request->input('agree');
/**
* validation
*/
// returnの出力値
$response = [];
// 初期値
$response["status"] = true;
// rules
$rules = [];
$rules['name'] = "required|string";
$rules['mail'] = "required|email";
$rules['post'] = "required|string";
$rules['address'] = "required|string";
$rules['tel'] = "required|string";
$rules['fax'] = "string";
// 英数字か判定
$rules['password'] = "required|alpha_num";
$rules['password_conf'] = "required|alpha_num";
// 個人情報保護方針=ture:false
if($agree == 'false'){
$rules['agree'] = "boolean";
};
// メッセージ
$messages = [];
$messages['name.required'] = "名前は必須です。";
$messages['name.string'] = "名前の形式が不正です。";
$messages['mail.required'] = "メールアドレスは必須です。";
$messages['mail.email'] = "メールアドレスの形式が不正です。";
$messages['post.required'] = "郵便番号は必須です。";
$messages['post.string'] = "郵便番号の形式が不正です。";
$messages['address.required'] = "住所は必須です。";
$messages['address.string'] = "住所の形式が不正です。";
$messages['tel.required'] = "Telは必須です。";
$messages['tel.required'] = "Telの形式が不正です。";
$messages['fax.string'] = "Faxの形式が不正です-。";
$messages['password.required'] = "パスワードは必須です。";
$messages['password.alpha_num'] = "パスワードは半角英数字で入力して下さい。";
$messages['password_conf.required'] = "パスワード再入力は必須です。";
$messages['password_conf.alpha_num'] = "パスワード再入力は半角英数字で入力して下さい。";
// 個人情報保護方針=ture:false
if($agree == 'false'){
$messages['agree.boolean'] = "個人情報保護方針をチェックして下さい。";
}
// 配列デバック
$arrString = print_r($messages , true);
Log::debug('messages:'.$arrString);
// validation判定
$validator = Validator::make($request->all(), $rules, $messages);
// error処理
if ($validator->fails()) {
// ajax返却定数
$keys = [];
$msgs = [];
// errorsをjson形式に変換(trueの場合、連想配列)
$ary = json_decode($validator->errors(), true);
// ループ&値をvalueに設定
foreach ($ary as $key => $value) {
// キーを配列に設定
$keys[] = $key;
// 値(メッセージ)を設定
$msgs[] = $value;
}
// keyデバック
$arrString = print_r($keys , true);
Log::debug('keys_messages:'.$arrString);
// response値設定
// status = falseの場合js側でerrorメッセージ表示
$response["status"] = false;
$response['msg'] = "入力を確認して下さい。";
$response["messages"] = $msgs;
$response["errkeys"] = $keys;
return response()->json($response);
}
/**
* メールアドレス重複確認
*/
$str = "select * from users "
."where create_user_mail = "
."'$mail'";
$data = DB::select($str);
// 該当データが存在する場合row=1:false
if(count($data) == 1){
Log::debug('メールアドレスが重複');
$response["status"] = false;
return response()->json($response);
}
/**
* insert
*/
// $ret = $request->status;
$response["status"] = self::insert($request);
return response()->json($response);
}
/**
* insert
*/
public function insert($request){
Log::debug('log_start:'.__FUNCTION__);
// 値取得
$name = $request->input('name');
$mail = $request->input('mail');
$post = $request->input('post');
$address = $request->input('address');
$tel = $request->input('tel');
$fax = $request->input('fax');
$password = $request->input('password');
$password_conf = $request->input('password_conf');
$agree = $request->input('agree');
$str = "insert into users ("
."create_user_name, "
."post_number, "
."address, "
."create_user_tel, "
."create_user_fax, "
."create_user_mail, "
."password, "
."create_date, "
."update_user_id, "
."update_date "
.")values( "
."'$name', "
."'$post', "
."'$address', "
."'$tel', "
."'$fax', "
."'$mail', "
."'$password', "
."now(), "
."1, "
."now()"
.")";
DB::insert($str);
$ret = true;
// Log::debug('log_end:'.__FUNCTION__);
return ret;
}
それともrequestから受け取ったデータ自体を関数化するのでしょうか?
コンストラクタで先に値をいれるのでしょうか?
※コンストラクタはインスタンスの時のみ一番初めにとおりますよね?
もし簡単な例文等いただければ幸いです。
質問は編集できます。コメント欄ではなく質問本文を編集して追記してください。
ただ「PHPを始めて」1か月ならフレームワークに手を出すのは早すぎると思います。特にLaravelは「Web職人のためのフレームワーク」といううたい文句がある通り、他のフレームワークより敷居は高いです。