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

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

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

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

Q&A

解決済

5回答

187閲覧

値が空からだったらkey消去したい

yuyuyuyugi2

総合スコア17

PHP

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

0グッド

0クリップ

投稿2019/02/07 02:15

編集2019/02/07 02:27

現在状態
$errorsが空でもkeyもっているので表示されてしまう。

やりたいこと
$errorsが空だったらkyeを持たず$errorsが空ではなかったら表示させるようにする。

session_start(); $message = $_POST['message']; $mail = $_POST['mail']; $comment = $_POST['comment']; $upfile = $_FILES['upfile']; Class Errorchak { public $message; public $mail; public $comment; public $upfile; public $errors; //メッセージエラーチェック public function chakmes($message) { $errors = ""; if ((mb_strlen($message) >= 10 || mb_strlen($message) <= 5)) { $errors = "5文字以上10文字以下で記入してください。"; } } public function chakmessa($message) { $errors = ""; $pattern = "/^[a-zA-Z0-9]+$/"; if (preg_match($pattern, $message)) { $errors = "ひらがなで入力してください。"; } } //メールのエラーチェック public function chakmail($mail) { $errors = ""; $pattern = "/^[a-zA-Z0-9_¥.¥-]+@[a-zA-Z0-9¥-]+.[a-zA-Z0-9]{2,4}$/"; if (!preg_match($pattern, $mail)) { $errors = "メールアドレスを正しく入力してください<br>"; } } //画像のエラーチェック public function cheakfile($upfile) { $errors = ""; if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { if (move_uploaded_file($_FILES['upfile']['tmp_name'], "./" . $_FILES['upfile']['name'])) { echo "uploaded<br>"; } else { $errors = "アップロードできませんでした。"; } } } public function cheakfiletype($upfile) { $errors = ""; $upfil = $_FILES['upfile']['type']; if (!preg_match("/.*.jpg|.*.png||.*.gif/i", $upfil)) { $errors = "対象ファイルはPNG,JPG,GIFのみです。<br>"; } } public function totalerror($errors){ if (!empty($errors)) { $this->errors = $errors; echo $errors; }else{ unset($errors); } return $errors; } } $errorchak = new Errorchak($errors); $errors = array(); $errors[] = $errorchak->chakmes($_POST['message']); $errors[] = $errorchak->chakmessa($_POST['message']); $errors[] = $errorchak->chakmail($_POST['mail']); $errors[] = $errorchak->cheakfile($_POST['upfile']); $errors[] = $errorchak->cheakfiletype($_FILES['upfile']); ?>

やってみたこと

public function totalerror($errors){ $errors = array(); $errors[] = chakmes($_POST['message']); $errors[] = chakmessa($_POST['message']); $errors[] = chakmail($_POST['mail']); $errors[] = cheakfile($_POST['upfile']); $errors[] = cheakfiletype($_FILES['upfile']); if (!empty($errors)) { $this->errors = $errors; echo $errors; }else{ unset($errors); } return $errors; } } $errorchak = new Errorchak($errors); $errorchak->totalerror(); ?>

これですとFatal error: Uncaught ArgumentCountErrorになってしまっていました。
よろしくお願いします

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

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

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

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

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

m.ts10806

2019/02/07 02:23

kye ではなく key です。 細かいですが決まっている文言についてはスペルミスは命取りになりますのでご注意を。
guest

回答5

0

記述されているコードだとエラー(Notice)でまくるけど、

これですとFatal error: Uncaught ArgumentCountErrorになってしまっていました。

の原因は
public function totalerror($errors){なのに$errorchak->totalerror(); で引数がないからです

投稿2019/02/07 02:25

rururu3

総合スコア5545

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

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

yuyuyuyugi2

2019/02/07 02:48

ありがとうございます!
guest

0

値が空からだったらkye消去したい

の意味がよくわかりません。
そもそも「空」とは送られてきていない状態のことなのか
""(長さ0の文字列)ということなのかにもよります

おそらくfilter_inputである程度かいけつできると思います

PHP

1$message = filter_input(INPUT_POST,'message'); 2$mail = filter_input(INPUT_POST,'mail'); 3$comment = = filter_input(INPUT_POST,'comment');

ただ$_FILESは任意の処理が必要かも

PHP

1$upfile = isset($_FILES['upfile'])?$_FILES['upfile']:null;

投稿2019/02/07 02:24

yambejp

総合スコア114843

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

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

yuyuyuyugi2

2019/02/07 02:50

ありがとうございます。試してみます!
guest

0

そもそもですが、Errorchakクラスの各functionで$errorsと言う変数に文言を入れていますが、returnしていません。
何も返してないので基本nullが格納されるのでは?

まずは「エラーがあったかどうか」を確認する必要があります。
Errorchakクラスの各functionでreturn $errors;でも入れておいて1度適当な変数に受け取っておいて、判断すると良いです。

php

1 2$message_error = $errorchak->chakmes($_POST['message']); 3if($message_error !== ""){ 4 $errors[] = $errorchak->chakmes($_POST['message']); 5}

1点注意。
$_POSTはスーパーグローバル変数で、どこからでも同じ形で参照できるため、引数で渡す意味がありません。
nameだけ渡すようにして$_POST[$name]のように受け取っても良いのでは。

投稿2019/02/07 02:29

m.ts10806

総合スコア80850

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

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

yuyuyuyugi2

2019/02/07 02:47

ありがとうございます。やってみます!
guest

0

ベストアンサー

php

1$errors = array(); 2$errors[] = $errorchak->chakmes($_POST['message']); 3$errors[] = $errorchak->chakmessa($_POST['message']); 4$errors[] = $errorchak->chakmail($_POST['mail']); 5$errors[] = $errorchak->cheakfile($_POST['upfile']); 6$errors[] = $errorchak->cheakfiletype($_FILES['upfile']); 7$errors = array_filter($errors, function($e) { return $e !== "";});

↑これで空のやつが消えるんで、そしたらempty($errors)がtrueになるんで、とりあえず、全部の関数でreturn書きましょう。

投稿2019/02/07 02:25

編集2019/02/07 02:52
papinianus

総合スコア12705

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

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

papinianus

2019/02/07 02:26

chakmesとかchakmessaとかchakmailとか全部でreturn $error;してねってことです。
yuyuyuyugi2

2019/02/07 02:45

ありがとうございます $errors = array_filter($e, function($e) { return $e !== "";}); は、returnの結果がtrueじゃなかったら配列されないってことでよいのでしょうか?
papinianus

2019/02/07 02:51

記載ミスがあった。 $errors = array_filter($erros, function($e) { return $e !== "";}); array_filterは、第一引数の配列から、おっしゃるようにreturnがtrueのものだけ残した別の配列を作ってくれる子です。 なんで、全部、空文字だったら、配列されないというか0個しかない配列になって、これはempty
yuyuyuyugi2

2019/02/07 03:15

ありがとうございます。 なんとかなりそうなので、後は自力でがんばってみます!
guest

0

このソースだけでは再現できないのでなんともですが、エラーを見る限り、
以下でtotalerror()に渡す引数が指定されていないことが原因ではないかと。

PHP

1$errorchak->totalerror();

投稿2019/02/07 02:21

madoka9393

総合スコア992

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問