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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

Q&A

解決済

2回答

2058閲覧

PHPでダイアログ(警告)表示

kakashi.

総合スコア12

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

0グッド

1クリップ

投稿2018/05/29 09:03

編集2018/05/29 09:11

実現したいこと

ログインに失敗した際に、ダイアログで「nameまたはpasswordを間違えています。」と表示したい。

現在のソースコード

index.php(ログインの画面)

PHP

1<?php 2 3 session_start(); 4 5 //ログイン済みかを確認 6 if (isset($_SESSION["USER"])) { 7 header("Location: top.php"); 8 exit; 9 } 10 11 //ログイン機能 12 $message = ""; 13 if(isset($_POST["login"])){ 14 if ($_POST["name"] == "kakashi" && $_POST["password"] == "123"){ 15 16 $_SESSION["USER"] = "kakashi"; 17 header("Location: top.php"); 18 exit; 19 } 20 else{ 21 header("Location: top.php"); 22 } 23 } 24 25?> 26 27<!DOCTYPE html> 28<html> 29<head> 30 <title>ログイン機能</title> 31</head> 32 33<link rel="stylesheet" type="text/css" href="logincss.css" media="all"> 34 35 36 37<body> 38 39<hgroup class="heading"> 40<h1 class="major">ログインフォーム</h1> 41</hgroup> 42 43<form method="post" action="index.php"> 44 <label for="name">メールアドレス</label> 45 <input id="name" type="name" class="sign-up-input" name="name"> 46 <br> 47 <label for="password">パスワード</label> 48 <input id="password" type="password" class="sign-up-input" name="password"> 49 <br> 50 <input type="submit" name="login" value="ログイン"> 51</form> 52 53</body> 54</html>

TOPのPHPファイル(ログイン完了後の画面)

PHP

1<?php 2 3session_start(); 4 5//ログイン済みかを確認 6if (!isset($_SESSION['USER'])) { 7 header('Location: index.php'); 8 exit; 9} 10 11//ログアウト機能 12if(isset($_POST['logout'])){ 13 14 $_SESSION = []; 15 session_destroy(); 16 17 header('Location: index.php'); 18 exit; 19} 20 21?> 22 23<!DOCTYPE html> 24<html> 25<head> 26 <title>トップ画面</title> 27</head> 28 29<body> 30<h1>トップ画面</h1> 31<p><?php echo $_SESSION['USER'] ?>さんでログイン中</p> 32<br> 33<form method="post" action="top.php"> 34 <input type="submit" name="logout" value="ログアウト"> 35</form> 36 37</body> 38</html>

試したこと

javascriptをPHPに埋め込むというもので、

PHP

1<?php 2 3echo <<<EOM 4<script type="text/javascript"> 5 alert( "TEST" ) 6</script> 7EOM; 8 9?>

このソースを

PHP

1 $message = ""; 2 if(isset($_POST["login"])){ 3 if ($_POST["name"] == "kakashi" && $_POST["password"] == "123"){ 4 5 $_SESSION["USER"] = "kakashi"; 6 header("Location: top.php"); 7 exit; 8 } 9 else{ 10 header("Location: top.php");

に入れてみたがエラー500により出来ませんでした。

よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/05/29 09:11 編集

掲載ソースコードのファイル名も添えてほしいです。top.phpなのか、top.phpと別なのか、それによって回答も変わってきます。また、500エラーになったときは、error_logを点検してそこに記録されているエラーメッセージも質問文内に追記してください。
guest

回答2

0

ベストアンサー

ログインに失敗した際に、ダイアログで「nameまたはpasswordを間違えています。」と表示したい。

まずログインに失敗したときの処理はこのif文のelseのところに書く感じになるかと思うんですけど、

PHP

1 if ($_POST["name"] == "kakashi" && $_POST["password"] == "123"){ 2 3 $_SESSION["USER"] = "kakashi"; 4 header("Location: top.php"); 5 exit; 6 } 7 else{ 8 header("Location: top.php"); 9 }

top.phpに飛ばす処理が書いてありますのでここを修正する必要があります。(ダイアログを表示するのはindex.phpのため)

で、どう修正するかといいますと以下のようにログインが成功か失敗かのフラグをもたせてやる方法があります。

PHP

1 // ログインが成功か失敗かのフラグを定義する 2 $flg = false; 3 4 if ($_POST["name"] == "kakashi" && $_POST["password"] == "123") 5 { 6 7 $_SESSION["USER"] = "kakashi"; 8 header("Location: top.php"); 9 exit; 10 } 11 else{ 12 13 // ログインに失敗した場合の処理を記述 14 15 // header("Location: top.php"); 16 17 // ログインに失敗した場合はtrueにする 18 $flg = true; 19 }

あと、

javascriptをPHPに埋め込むというもので、

逆にjavascriptにPHPを埋め込む、というのは考えてみましたでしょうか。
こういう感じで実現することができます。

PHP

1<?php $a = 1 ?> 2<script type="text/javascript"> 3 4 <?php if($a == 1){ ?> 5 6 alert("1だよ!"); 7 8 <?php } ?> 9 10</script>

これを応用し、$flgがtrueのときだけalert()が実行されるようにしてみると良いと思います。

投稿2018/05/29 11:38

編集2018/05/29 11:41
chibr

総合スコア74

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

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

kakashi.

2018/05/30 02:09

ご回答ありがとうございます。 ifのどちらのケースでもtop.phpになっていることに気付いていなかったです。 $flgを立てたうえでjavascriptのalertを埋め込む形で実現できました。 助かりました。ありがとうございます。
guest

0

最終的なソースコードです。
今回、変更を加えたソースコードはindex.phpのみでした。
①と②を変更しています。

PHP

1<?php 2 3 session_start(); 4 5 //ログイン機能 6 $message = ""; 7 if(isset($_POST['login'])){ 8 if ($_POST['name'] == 'sue' && $_POST['password'] == '123'){ 9 10 $_SESSION['USER'] = 'sue'; 11 header("Location: top.php"); 12 exit; 13 } 14 else{ 15 $a = true; //ここを変更① 16 } 17 } 18 19?> 20 21<!DOCTYPE html> 22<html> 23<head> 24 <title>ログイン機能</title> 25</head> 26 27<link rel="stylesheet" type="text/css" href="logincss.css" media="all"> 28 29 30 31<body> 32 33<hgroup class="heading"> 34<h1 class="major">ログインフォーム</h1> 35</hgroup> 36 37<form method="post" action="index.php"> 38 <label for="name">メールアドレス</label> 39 <input id="name" type="name" class="sign-up-input" name="name"> 40 <br> 41 <label for="password">パスワード</label> 42 <input id="password" type="password" class="sign-up-input" name="password"> 43 <br> 44 <input type="submit" name="login" value="ログイン"> 45 46 47<!-- ここから変更② --> 48 49 <script type="text/javascript"> 50 <?php if($a == true){ ?> 51 alert("nameまたはパスワードが間違えています。"); 52 <?php } ?> 53 </script> 54 55<!-- ここまで変更② --> 56 57</form> 58 59</body> 60</html>

投稿2018/05/30 02:13

編集2018/05/30 02:16
kakashi.

総合スコア12

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

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

chibr

2018/05/30 05:04

elseのときにだけ $a を定義していますので、 ②のjsのなかに書くif文の条件は($a == true)でも良いんですけど issetを使って記述するとベストかと思います。 でもとりあえず、無事に解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問