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

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

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

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

Q&A

解決済

2回答

1278閲覧

php入門者 多岐にわたるエラー処理を書きながらもコードをわかりやすくする方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/10/02 01:51

提示コードですがこれはアカウントを作成する画面のコードでパスワードや名前、IDが入力されいない時または規定に合っていない時等のときにエラーメッセージを分けたいのですがどうもif文のネスト等が深くなってしまい。シンプルなコードになりません。この場合どのようなコード設計をすればいいのでしょうか?

※文字数の関係で表示するコードの一部を省略しています。

<!DOCTYPE html> <html> <head> <title> 新規作成完了 </title> <link rel="stylesheet" href="Style.css"> <meta charset="UTF-8"> </head> <body> <?php session_start(); ini_set( 'display_errors', 1 ); ini_set( 'error_reporting', E_ALL ); ?> <?php $register = true; $password = password_hash($_REQUEST['password'],PASSWORD_DEFAULT); $id = htmlspecialchars($_REQUEST['id']); $name = htmlspecialchars($_REQUEST['name']); $imageExtension = ""; if( (empty($password) == false) && (empty($id) == false) && (empty($_FILES['icon']) == false) && (empty($_REQUEST['name']) == false) ) { // パスワードエラー if(preg_match('/[a-zA-Z0-9]{5,25}/',$_REQUEST['password']) == false) { echo '<center>'; echo '<p>パスワード ' ,$password,' が正しくありません。</p>'; echo '<input type="button" onclick="history.back()" value="戻る" style="background-color:red; size:15;width:150px;height:30px">'; echo '</center>'; $register = false; } else { //IDエラー if( preg_match("/[a-zA-Z0-9]{5,12}/",$_REQUEST['id']) == false) { echo '<center>'; echo '<p>ID ' ,$id,' が正しくありません。</p>'; echo '<input type="button" onclick="history.back()" value="戻る" style="background-color:red; size:15;width:150px;height:30px">'; echo '</center>'; $register = false; } else { //名前エラー if( preg_match("/[^@]{1,12}/",$_REQUEST['name']) == false) { echo '<center>'; echo '<p>名前が ' ,$name,' が正しくありません。12文字以内で入力してください</p>'; echo '<input type="button" onclick="history.back()" value="戻る" style="background-color:red; size:15;width:150px;height:30px">'; echo '</center>'; $register = false; } else { //アイコンアップロードエラー if(is_uploaded_file($_FILES['icon']['tmp_name']) == false ) { echo '<center>'; echo '<p>アイコンアップロードエラー。</p>'; echo '<input type="button" onclick="history.back()" value="戻る" style="background-color:red; size:15;width:150px;height:30px">'; echo '</center>'; $register = false; } else { $image = strtolower(pathinfo($_FILES['icon']['name'],PATHINFO_EXTENSION)); $imageExtension = pathinfo($_FILES['icon']['name'],PATHINFO_EXTENSION); //拡張子 if(in_array($image,["jpg","jpeg","png"]) == false) { echo '<center>'; echo pathinfo($_FILES['icon']['name'],PATHINFO_EXTENSION),'<p> 形式は対応しておりません</p>'; echo '<input type="button" onclick="history.back()" value="戻る" style="background-color:red; size:15;width:150px;height:30px">'; echo '</center>'; $register = false; } } } } } //すべて正しいとき if($register == true) { $pdo = new PDO('mysql:host=localhost;dbname=Bulletin_Board;charset=utf8','root','Shigurechan7240'); $sql = $pdo->prepare('select * from Bulletin_Board where id=? password=?'); if($sql->execute([$id,$password]) == true) { foreach($sql->fetch_All() as $row) { $_SESSION['account']= [ 'id'=>$row['id'], 'password'=>$row['password'] ]; } //アカウントがある時 if(isset($_SESSION['account']) == true) { } else { //アカウントがない時 if(file_exists($id) == false) { if ( mkdir($id) == false) { echo 'ディレクトリ作成失敗。'; } } $pdo = new PDO('mysql:host=localhost;dbname=Bulletin_Board;charset=utf8','root','Shigurechan7240'); $sql = $pdo->prepare('insert into Account values(?,?,null,?)'); if($sql->execute([$id,$password,$name]) == true) { echo '<center>'; echo '<form action="Top.php" method="post"> <button type="submit" name="add">トップページ</button> </form>'; echo '</center>'; } } } } } else { echo '<center>'; if(empty($_FILES['icon']['tmp_name']) == true) { echo '<p>アイコンがアップロードされていません。</p>'; } echo '<input type="button" onclick="history.back()" value="戻る" style="background-color:red; size:15;width:150px;height:30px">'; echo '</center>'; } ?> </body> </html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

elseの直後にifしか来ないときはネストを増やさずにelse ifとしてはどうでしょうか?

投稿2021/10/02 02:02

maisumakun

総合スコア146018

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

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

退会済みユーザー

退会済みユーザー

2021/10/02 02:08

なるほど。状況にもよると思いますがプロはどうするのでしょうか?
maisumakun

2021/10/02 02:22

1つの正解があるわけではありません。「生PHPなど使わず、フレームワークの機能性をフル活用する」というのすら合理的な選択肢です。
guest

0

何も考えず上から順番に書くからです。
基礎の基礎ができてない証拠。

機能単位で共通点やまとめられる点がないか整理し、フローチャートを書いてロジックをイメージし、時にルールや法則を自分で作る。

言語の特性や機能を理解してないとできません。だから基礎です。ひたすら基礎。

やりたいことだけやってても初心者からは一生抜け出せません。
言語やフレームワークに限りません。
(あと人の指摘を素直に受け入れること。今の事態は自らが引き起こしてる自覚を持ちましょう)

投稿2021/10/02 03:27

m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問