提示コードですがこれはアカウントを作成する画面のコードでパスワードや名前、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>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/10/02 02:08
2021/10/02 02:22