🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

1461閲覧

PHPのフォームのバリーデーションの一部が働かない

ysmd

総合スコア17

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

1グッド

0クリップ

投稿2019/10/18 03:27

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

メールフォームのバリデーションで、

URl
ファイル添付

の2つの項目で、
どちらか1つのデータが受け取れれば進む挙動にしたいのですが

今は
「両方無し」→エラー
「両方あり」→OK
「URLのみ」→OK
「ファイル添付のみ」→両方なしの時のエラーがでる

という挙動になります。
「ファイル添付のみ」もOKとなるような挙動にしたいです。

下記のサイトにあるコードを参考にしています。
https://gray-code.com/php/make-the-form-vol8/

以下画像がフォーム画面です。
イメージ説明

アドバイスのほどよろしくお願いします。
足りない情報や補足すべき点があればコメントください。

該当のソースコード

php

1<?php 2 3   $page_flag = 0; 4   $clean = array(); 5   $error = array(); 6 7   function validation($data) { 8   $error = array(); 9 10     //該当部分のバリデーション 11   if( empty($data['resumeUrl']) && empty($data['attachment_file']) ) { 12   $error[] = "・「URL」か「ファイルの添付」のどちらかは必ず入力してください。"; 13   } elseif( !empty($data['resumeUrl']) || !empty($data['attachment_file'])) { 14   //次ページへ進む 15   $page_flag === 1; 16    } 17 18     return $error; 19} 20?> 21 22<!DOCTYPE> 23<html lang="ja"> 24<head> 25<meta charset="UTF-8"> 26 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 27 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 28 <title>フォーム</title> 29</head> 30<body> 31 32<!--入力内容確認ページ--> 33<?php if( $page_flag === 1 ): ?> 34 35<div class="form"> 36 <div class="title"> 37 <h2>採用面談<br/>お申し込みフォーム</h2> 38 <p class="attention">入力内容確認</p> 39 </div> 40 41 <div class="mui-container"> 42 <form class="mui-form" method="post" action=""> 43 <div class="mui-textfield"> 44 <label>お名前</label> 45 <p><?php echo $clean['your_name']; ?></p> 46 </div> 47 <div class="mui-textfield"> 48 <label>電話番号</label> 49 <p><?php echo $clean['tel']; ?></p> 50 </div> 51 <div class="mui-textfield"> 52 <label>メールアドレス</label> 53 <p><?php echo $clean['email']; ?></p> 54 </div> 55 <p class="rireki">履歴書(下記のいずれか)</p> 56 <div class="mui-urlfield"> 57 <label>URL</label> 58 <p><?php echo $clean['resumeUrl']; ?></p> 59 </div> 60 <?php if( !empty($clean['attachment_file']) ): ?> 61 <div class="mui-filefield"> 62 <label>添付ファイル</label> 63 <p><img src="<?php echo FILE_DIR.$clean['attachment_file']; ?>"></p> 64 </div> 65 <?php endif; ?> 66 <input class="mui-btn mui-btn--flat mui-btn--primary" type="submit" name="btn_back" value="修正"> 67 <input class="mui-btn mui-btn--flat mui-btn--primary" type="submit" name="btn_submit" value="送信"> 68 <input type="hidden" name="your_name" value="<?php echo $clean['your_name']; ?>"> 69 <input type="hidden" name="tel" value="<?php echo $clean['tel']; ?>"> 70 <input type="hidden" name="email" value="<?php echo $clean['email']; ?>"> 71 <input type="hidden" name="resumeUrl" value="<?php echo $clean['resumeUrl']; ?>"> 72 <?php if( !empty($clean['attachment_file']) ): ?> 73 <input type="hidden" name="attachment_file" value="<?php echo $clean['attachment_file']; ?>"> 74 <?php endif; ?> 75 </form> 76 </div> 77</div> 78 79<?php else: ?> 80 81<!--フォーム送信完了画面--> 82<?php elseif( $page_flag === 2 ): ?> 83 84<div class="content"> 85 <h2>送信が完了しました。</h2> 86</div> 87 88<?php else: ?> 89 90 91<!--フォーム入力画面--> 92<div class="form"> 93 <div class="title"> 94 <h2>採用面談<br/>お申し込みフォーム</h2> 95 <p class="attention"><span class="needed"></span> は必須項目です。</p> 96 </div> 97 <div class="mui-container"> 98 99 <form class="mui-form" name="entryForm" action="" method="post" enctype="multipart/form-data"> 100 101     <!--エラーメッセージ表示--> 102 <?php if( !empty($error) ): ?> 103 <ul class="error_list"> 104 <?php foreach( $error as $value ): ?> 105 <li><?php echo $value; ?></li> 106 <?php endforeach; ?> 107 </ul> 108 <?php endif; ?> 109 110 111 <div class="mui-textfield"> 112 <label>お名前 <span class="needed"></span></label> 113 <input type="text" name="your_name" required value="<?php if( !empty($clean['your_name']) ){ echo $clean['your_name']; } ?>"/> 114 </div> 115 <div class="mui-textfield"> 116 <label>電話番号</label> 117 <input type="tel" name="tel" pattern="\d{2,4}-?\d{2,4}-?\d{3,4}" title="市外局番から記入してください。"/> 118 </div> 119 <div class="mui-textfield"> 120 <label>メールアドレス <span class="needed"></span></label> 121 <input type="email" name="email" required value="<?php if( !empty($clean['email']) ){ echo $clean['email']; } ?>"/> 122 </div> 123 <p class="rireki">履歴書(下記のいずれか) <span class="needed"></span></p> 124 <div class="mui-urlfield"> 125 <label>URL</label> 126 <input type="url" name="resumeUrl" value="<?php if( !empty($clean['resumeUrl']) ){ echo $clean['resumeUrl']; } ?>"/> 127 </div> 128 <div class="mui-filefield"> 129 <label>アップロード(8MBまで)</label> 130 <input type="hidden" name="MAX_FILE_SIZE" value="8388608"> 131 <input type="file" name="attachment_file" value="<?php if( !empty($clean['attachment_file']) ){ echo $clean['attachment_file']; } ?>"/> 132 </div> 133 <div class="button-box_form"> 134 <input class="mui-btn mui-btn--flat mui-btn--primary" type="submit" name="btn_confirm" value="確認"> 135 </div> 136 </form> 137 </div> 138</div> 139 140<?php endif; ?> 141</body> 142</htm>
ryuii👍を押しています

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

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

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

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

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

guest

回答3

0

まずはエラーを表示するようにしましょう。

<?php ini_set('display_errors', 'On'); error_reporting(E_ALL);

エラーがあるということはそもそも正常に動作しないということなので
動作が正常であるかどうかはエラーを修正してから考えましょう。

投稿2019/10/18 04:51

Y.H.

総合スコア7918

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

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

0

ベストアンサー

まず全角スペースでインデントしている箇所を修正してください
またelseの後にあるelseifはおかしいです

sample

urlとfileのどちらかにデータが入っていることを確認するにはこう
(一部場合分けをわかるように調整しました)

PHP

1<?PHP 2$url=filter_input(INPUT_POST,"resumeUrl",FILTER_VALIDATE_URL); 3$file=(isset($_FILES["attachment_file"]) && $_FILES["attachment_file"]["error"]!==4)?$_FILES["attachment_file"]:null; 4if(is_null($url) and is_null($file)){ 5 print "void:"; 6}elseif($url!==false and !is_null($file)){ 7 print "ok:both"; 8}elseif($url!==false){ 9 print "ok:url"; 10}elseif(!is_null($file)){ 11 print "ok:file"; 12}else{ 13 print "error:"; 14} 15?> 16<form method="post" enctype="multipart/form-data"> 17<div>url:<input type="url" name="resumeUrl" ></div> 18<div>file:<input type="file" name="attachment_file" ></div> 19<input type="submit" value="確認"> 20</form>

投稿2019/10/18 03:41

編集2019/10/18 04:17
yambejp

総合スコア116690

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

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

ysmd

2019/10/18 05:47

回答ありがとうございました。 条件毎の出し分けを実際にページに組み込んでみます。
ysmd

2019/10/18 07:31

無事解決できました! ありがとうございました!
guest

0

以下の該当部分のバリデーションで、$page_flagに1を代入しようとしていると思われるのですが、

php

1//該当部分のバリデーション 2if( empty($data['resumeUrl']) && empty($data['attachment_file']) ) { 3 $error[] = "・「URL」か「ファイルの添付」のどちらかは必ず入力してください。"; 4} elseif( !empty($data['resumeUrl']) || !empty($data['attachment_file'])) { 5 //次ページへ進む 6 $page_flag === 1; 7}
  • $page_flag === 1;

と比較演算子になっております。

  • $page_flag = 1;

上記のように代入すれば、意図する挙動となると思います。

投稿2019/10/18 03:39

ryuii

総合スコア438

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

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

ysmd

2019/10/18 05:41

回答ありがとうございます。 試してみたところ原因は$page_flag === 1ではなかったようでした。 探ってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問