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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1664閲覧

入力フォームをjavascriptでエラー表示の設定したらPHPが発動しなくなりました。

ghtew2

総合スコア245

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/11/30 07:39

編集2021/12/01 01:17

入力フォームのエラーメッセージを発するコードを書いているのですが、PHPよりもエラーメッセージが目立ちやすいので、javascriptでエラーメッセージが出るようにコードを書いたのですが、
そうすると、入力フォームに対するPHPの全ての効果が発動されなくなります。

入力フォームに入力して、次の確認画面から、戻るときに入力した情報の保持など提示コードのスタイルシートに書いてあるPHPの効果がすべて発動しません。

これを全てPHPも発動するようにしたいのですが、調べても方法が分からずに止まったままです。
javascriptでエラーメッセージは最初の送信ボタンを押すときに発動するのみで良いと考えています。
どうしたらよいでしょうか?回答よろしくお願いいたします。

入力フォーム→確認表示画面→送信完了画面の3つで構成されています。
入力フォームの最初の画面のコード(companyhp6form1.php)

php

1<?php 2session_start(); 3 4$errors = array(); 5 6if(isset($_POST['submit'])) { 7 8 9 10$name = $_POST['name']; 11$furigana = $_POST['furigana']; 12 13if($name === "") { $errors['name'] ="名前が入力されていません。 "; 14} 15 16if($furigana === "") { $errors['furigana'] ="フリガナが入力されていません。 "; 17} 18 19$name = htmlspecialchars($name, ENT_QUOTES); 20$furigana = htmlspecialchars($furigana, ENT_QUOTES); 21 22if(count($errors) === 0) { 23 24 $_SESSION['name'] = $name; 25 $_SESSION['furigana'] = $furigana; 26 27 /* 確認画面の表示, */ 28 header('Location:http:▼▼'); 29 exit(); 30 } 31 } 32 33 34 if(isset($_GET['action']) && $_GET['action'] === 'edit'){ 35 36 $name = $_SESSION['name']; 37 $furigana = $_SESSION['furigana']; 38 39 } 40 41 ?> 42 43 44<!DOCTYPE html> 45 46<html lang="ja"> 47 48<head> 49 <meta content="text/html; charset=utf-8" /> 50 <meta name="viewport" content="width=device-width, initial-scale=1"> 51 <title>企業ホームページ お問い合わせ画面</title> 52 <link rel="stylesheet" href="companyhp6form1.css"> 53 <link rel="stylesheet" href="reset.css"> 54 <script src="jquery-3.6.0.min.js"></script> 55 <style type="text/css"> 56 57 /* 入力フォームの位置 */ 58 59 .auto-style1 { 60 61text-align: center; 62 63} 64 65 66</style> 67 68 69<?php echo "<ul>";foreach($errors as $value) { 70 71echo "<li>"; 72echo $value; 73echo "</li>"; 74} 75 76echo "</ul>"; 77 78?> 79 80 81 82</head> 83 84<body> 85 86 87 <!--javaによるエラー表示のためid="form"を追加--> 88 <form action="companyhp6form1.php" method="post" id="form"> 89 90 91<!--フォーム中央寄せのため1つ1つdivで囲むauto-style1--> 92 93 94 95 <div class="auto-style1"> 96 97 <p class="tel-titile"> 98 名前:※ 99 </p> 100 <input type="text" class="name" name="name" id="name" value="<?php if(isset($name)){ echo $name; } ?>" /> 101 </div> 102 <div class="auto-style1"> 103 104 <p class="tel-titile"> 105 フリガナ:※ 106 </p> 107 <input type="text" class="furigana" name="furigana" id="furigana" 108 value="<?php if(isset($furigana)){ echo $furigana; } ?>" /> 109 110 </div> 111 112 113 <div class="auto-style1"> 114 115 <button type="submit" id="submit" name="submit" class="auto-style4"> 116 送信</button> 117 </div> 118 119 </form> 120 121 122</body> 123 <script src="main.js"></script> 124 <script> 125 const form = document.querySelector('#form'); /* <form action="companyhp6form1.php" method="post" id="form"> 126 フォームエラーの表示のため id="form" */ 127 128 const name = document.querySelector('#name'); 129 const furigana = document.querySelector('#furigana'); 130 131 form.addEventListener('submit', function(event) { 132 let msg = ""; 133 /* エラーメッセージが箇条書きに表示されるように改行\n"コードを記入 */ 134 135 if (name.value == "") msg += "名前が入力されていません。\n"; 136 if (furigana.value == "") msg += "フリガナが入力されていません。\n"; 137 138if (msg == "") return; event.preventDefault(); alert(msg); 139 140}); 141</script> 142 143 <script src="jquery-3.6.0.min.js"></script> 144</html>

●●●入力確認表示画面のPHP(companyhp6form2.php)

php

1<?php 2session_start(); 3 4if(isset($_SESSION['name'])){ 5 6$name = $_SESSION['name']; 7$furigana = $_SESSION['furigana']; 8 9 10$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(48)); 11 12$token = htmlspecialchars($_SESSION['token'], ENT_QUOTES); 13 14?> 15 16 17<!DOCTYPE html> 18 19<html> 20 21<head> 22 <meta content="text/html; charset=utf-8" /> 23 <meta name="viewport" content="width=device-width, initial-scale=1"> 24 <title>企業のホームページお問い合わせ入力確認画面</title> 25 <link rel="stylesheet" href="companyhp6form2.css"> 26 <link rel="stylesheet" href="reset.css"> 27 28 29 /* 申し込みボタンの位置 */ 30 31 .auto-style1 { 32 33text-align: center; 34 35} 36 37</style> 38 39 40</head> 41 42<body> 43 44 <form action ="companyhp6form3.php" method ="post"> 45 46 <input type ="hidden" name ="token" value ="<?php echo $token ?>"> 47 48 <div class="title"> 49 <label class="title" for="title">お申し込み内容の確認</label> 50 </div> 51 52 53 <div class="row"> 54 <label class="col-sm-2 control-label" for="name">名前:<small><?php echo $name; ?></small></label> 55 </div> 56 <p></p> 57 <p></p> 58 <p></p> 59 <div class="row"> 60 <label class="col-sm-2 control-label" for="furigana">フリガナ:<small><?php echo $furigana; ?></small></label> 61 </div> 62 63 64 65 66 <div class="auto-style1"> 67 68 <button type="submit" id="submit" name="submit" class="auto-style4"> 69 内容を確認して送信</button> 70 </div> 71 72 73 <div class="auto-style5"> <!--リンク文字中央配置のためのdiv--> 74 <p><a href="companyhp6form1.php"> &#9664;お申し込み内容を変更する</a></p> 75 </div><!--特殊記号三角&#9664;--> 76 77 78 </form> 79 80 81 82</body> 83 84</html>

●●●PHPMailerを使った送信画面のコード(companyhp6form3.php)

php

1<?php 2 3// PHPMailer クラスをネーム空間にインポート 4use PHPMailer\PHPMailer\PHPMailer; 5use PHPMailer\PHPMailer\SMTP; 6use PHPMailer\PHPMailer\Exception; 7 8 9 10require('PHPMailer/src/PHPMailer.php'); 11require('PHPMailer/src/Exception.php'); 12require('PHPMailer/src/SMTP.php'); 13 14 15 16 17 18// 入力内容の取得・変数に格納 19session_start(); 20 21 22if(isset($_POST['token'], $_SESSION['token']) && ($_POST['token'] === $_SESSION['token'])){ 23 unset($_SESSION['token']); 24 25$name = $_SESSION['name']; 26$furigana = $_SESSION['furigana']; 27 28} 29// メール日本語対応 30mb_language("japanese"); 31mb_internal_encoding("UTF-8"); 32 33// インスタンス生成 34$mail = new PHPMailer(true); 35 36// 文字エンコードを指定 37$mail->CharSet = 'utf-8'; 38 39try { 40 // デバッグ設定 41 // $mail->SMTPDebug = 2; // デバッグ出力を有効化(レベルを指定) 42 // $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";}; 43 44 // SMTPサーバの設定 45 $mail->isSMTP(); // SMTPの使用宣言 46 $mail->Host = '●●.com'; // SMTPサーバーを指定 47 $mail->SMTPAuth = true; // SMTP authenticationを有効化 48 $mail->Username = '■■@email.com'; // SMTPサーバーのユーザ名 49 $mail->Password = '????'; // SMTPサーバーのパスワード 50 $mail->SMTPSecure = 'ssl'; // 暗号化を有効(tls or ssl)無効の場合はfalse 51 $mail->Port = 465; // TCPポートを指定(tlsの場合は465や587) 52 53 54 55 // メール本体 56 $mail->setFrom('■■@email.com', 'sana'); // 送信元メールアドレスと名前 57 58 59 60 $mail->Body = "下記の情報を受け取りました。\n内容を確認し、こちらから折り返し、ライン又はメールアドレスにてご案内させて頂きます。\n\n"; 61 $mail->Subject = mb_encode_mimeheader('会社'); 62 63 $mail->Body .= "お名前:".$name."\n"; 64 $mail->Body .= "フリガナ:".$furigana."\n"; 65 66// 送信 67 $mail->send(); 68 echo '送信済み'; 69} catch (Exception $e) { 70 echo "送信失敗: {$mail->ErrorInfo}"; 71} 72?> 73 74 75<!DOCTYPE html> 76 77<html> 78 79<head> 80 <meta content="text/html; charset=utf-8" /> 81 <meta name="viewport" content="width=device-width, initial-scale=1"> 82 <title>企業のホームページ お問い合わせ 送信後の画面</title> 83 <link rel="stylesheet" href="companyhp6form3.css"> 84 <style type="text/css"> 85 86</style> 87 88 89</head> 90 91<body> 92 93 94</body> 95 96</html> 97 98 99 100 101 102 103 104

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

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

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

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

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

maisumakun

2021/11/30 07:42

> 提示コードのスタイルシートに書いてあるPHPの効果がすべて発動しません。 提示されたコードにスタイルシートは見当たらないのですが、何を指していますか?
ghtew2

2021/11/30 09:31

回答ありがとうございます。わかりにくくてすみません。この質問で提示しているPHPコードのことです。
ghtew2

2021/11/30 09:48

PHPの効果で入力フォームに入力したデータを、確認表示画面→送信という流れで、今まで行っていたのですが、この質問で提示したPHPがそうです。 ただ、最初の入力フォームの画面だけPHPとjavascriptで2重にしてエラー表示したかったので、javascriptのコードを追加しました。 javascriptのコードを追加するとPHPが動作しないのです。この質問で提示したPHPも全て発動させたいです。
ghtew2

2021/11/30 09:56

確認表示画面のPHPのコードも追加しました。
yambejp

2021/11/30 10:03

action="companyhp6form1.php" これは自分自身がcompanyhp6form1.phpということですか?
ghtew2

2021/11/30 10:16

回答ありがとうございます。今、提示コード3つにタイトルを追加しました。companyhp6form1.phpは、PHPファイルのタイトル名になります。 最初の入力フォーム画面(companyhp6form1.php) 入力確認画面の表示(companyhp6form2.php) 送信画面PHPMilarを使ったコード(companyhp6form3.php) です。
Lhankor_Mhy

2021/12/01 00:58

CSS は関係なさそうなので、質問タグの削除を願います。
ghtew2

2021/12/01 01:20

消去しました。すみません。
Lhankor_Mhy

2021/12/01 01:21

ご対応ありがとうございます。
guest

回答2

0

おもいつきですが

javascript

1if (msg == "") return;

javascript

1if (msg == "") return true;

でなんかかわりませんでしょうか。
--- 追記 ---
JavaScript でエラーが出ないときは問題ない。
エラーが出るはずの場合に(予想に反して)沈黙している。
ということですかね。

となると event.preventDefault(); はなんで書いてるんですかね?
(いらないのでは?)

投稿2021/11/30 08:11

編集2021/11/30 11:40
takasima20

総合スコア7464

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

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

ghtew2

2021/11/30 09:38

回答ありがとうございます。変化ないです。
ghtew2

2021/12/01 01:19

回答ありがとうございます。そうでね。いらないかもしれません。
guest

0

ベストアンサー

jsで入力チェックをしているなら理論的にはPHPでは常に入力された状態で受け付けるはずなので
エラー処理は発生しないと思います
jsのバリデートをはずせば、PHP側でエラー処理が発生しているのがわかりますし
エラーがないときはheaderで別ページにも飛ぶようです
とんださきで

PHP

1<?PHP 2session_start(); 3print_r($_SESSION);

すればセッションデータが渡ってきていることが確認できると思います

投稿2021/11/30 10:10

編集2021/11/30 10:17
yambejp

総合スコア116724

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

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

ghtew2

2021/12/01 01:18

ありがとうございます。確かにphpは発動していることを確認できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問