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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1716閲覧

PHP <form method="" action="">のエラー発生

kimura141899

総合スコア2

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/09/12 09:27

編集2021/09/12 09:56

前提・実現したいこと

DockerでPHP環境を構築してメモアプリを作成しています。

<form method="" action="">を使用してデータのやり取りを実現したいです。

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

formが実行(送信)された後、ブラウザ上でこのようなメッセージが出ます。

このサイトにアクセスできませんhttp://localhost:8080/user/action/register.php のウェブページは一時的に停止しているか、新しいウェブアドレスに移動した可能性があります。 ERR_FAILED

このURLを直接入力(画面更新ではだめ)すると指定のページは表示されます。

該当のソースコード

memo/index.php

php

1<?php 2session_start(); ?> 3 4<!DOCTYPE html> 5<html lang="ja"> 6<?php 7include_once "../common/header.php"; 8echo getHeader("ユーザー登録"); 9?> 10 11<body> 12 <div class="d-flex align-items-center justify-content-center h-100"> 13 <form action="./action/register.php" method="POST"> 14 <div class="card rounded login-card-width shadow"> 15 <div class="card-body"> 16 <?php if (isset($_SESSION["errors"])) { 17 echo '<div class="alert alert-danger" role="alert">'; 18 foreach ($_SESSION["errors"] as $error) { 19 echo "<div>{$error}</div>"; 20 } 21 echo "</div>"; 22 unset($_SESSION["errors"]); 23 } ?> 24 <div class="rounded-circle mx-auto border-gray border d-flex mt-3 icon-circle"> 25 <img src="../public/images/animal_stand_zou.png" class="w-75 mx-auto p-2" alt="icon" /> 26 </div> 27 <div class="d-flex justify-content-center"> 28 <div class="mt-3 h2">SimpleMemo</div> 29 </div> 30 <div class="row mt-3"> 31 <div class="offset-2 col-8 offset-2"> 32 <label class="input-group w-100"> 33 <span class="input-group-prepend"> 34 <span class="input-group-text"><i class="fas fa-file-signature"></i></span> 35 </span> 36 <input type="text" name="user_name" class="form-control" placeholder="ユーザー名" 37 autocomplete="off" maxlength="255" /> 38 </label> 39 <label class="input-group w-100"> 40 <span class="input-group-prepend"> 41 <span class="input-group-text"><i class="far fa-envelope"></i></span> 42 </span> 43 <input type="text" name="user_email" class="form-control" placeholder="メールアドレス" 44 autocomplete="off" maxlength="255" /> 45 </label> 46 <label class="input-group w-100"> 47 <span class="input-group-prepend"> 48 <span class="input-group-text"><i class="fas fa-key"></i></span> 49 </span> 50 <input type="password" name="user_password" class="form-control" placeholder="パスワード" 51 autocomplete="off" maxlength="255" /> 52 </label> 53 <button type="submit" class="form-control btn btn-success"> 54 登録する 55 </button> 56 </div> 57 </div> 58 </div> 59 </div> 60 </form> 61 </div> 62</body> 63 64</html>

user/action/register.php

php

1<?php 2session_start(); 3require "../../common/validation.php"; 4require "../../common/database.php"; 5 6// パラメータ取得 7$user_name = $_POST["user_name"]; 8$user_email = $_POST["user_email"]; 9$user_password = $_POST["user_password"]; 10 11// バリデーション 12$_SESSION["errors"] = []; 13 14// - 空チェック 15emptyCheck($_SESSION["errors"], $user_name, "ユーザー名を入力してください。"); 16emptyCheck( 17 $_SESSION["errors"], 18 $user_email, 19 "メールアドレスを入力してください。" 20); 21emptyCheck( 22 $_SESSION["errors"], 23 $user_password, 24 "パスワードを入力してください。" 25); 26 27// - 文字数チェック 28stringMaxSizeCheck( 29 $_SESSION["errors"], 30 $user_name, 31 "ユーザー名は255文字以内で入力してください。" 32); 33stringMaxSizeCheck( 34 $_SESSION["errors"], 35 $user_email, 36 "メールアドレスは255文字以内で入力してください。" 37); 38stringMaxSizeCheck( 39 $_SESSION["errors"], 40 $user_password, 41 "パスワードは255文字以内で入力してください。" 42); 43stringMaxSizeCheck( 44 $_SESSION["errors"], 45 $user_password, 46 "パスワードは8文字以上で入力してください。" 47); 48 49if (!$_SESSION["errors"]) { 50 // - メールアドレスチェック 51 mailAddressCheck( 52 $_SESSION["errors"], 53 $user_email, 54 "正しいメールアドレスを入力してください。" 55 ); 56 57 // - ユーザー名・パスワード半角英数チェック 58 halfAlphanumericCheck( 59 $_SESSION["errors"], 60 $user_name, 61 "ユーザー名は半角英数字で入力してください。" 62 ); 63 halfAlphanumericCheck( 64 $_SESSION["errors"], 65 $user_password, 66 "パスワードは半角英数字で入力してください。" 67 ); 68 69 // - メールアドレス重複チェック 70 mailAddressDuplicationCheck( 71 $_SESSION["errors"], 72 $user_email, 73 "既に登録されているメールアドレスです。" 74 ); 75} 76 77if ($_SESSION["errors"]) { 78 header("Location: ../../user/"); 79 exit(); 80} 81 82// DB接続処理 83$database_handler = getDatabaseConnection(); 84 85try { 86 if ( 87 $statement = $database_handler->prepare( 88 "INSERT INTO users (name, email, password) VALUES (:name, :email, :password)" 89 ) 90 ) { 91 $password = password_hash($user_password, PASSWORD_DEFAULT); 92 93 $statement->bindParam(":name", htmlspecialchars($user_name)); 94 $statement->bindParam(":email", $user_email); 95 $statement->bindParam(":password", $password); 96 $statement->execute(); 97 } 98} catch (Throwable $e) { 99 echo $e->getMessage(); 100 exit(); 101} 102 103// メモ投稿画面にリダイレクト 104header("Location: ../../user/"); 105exit(); 106

common/database.php

php

1<?php 2/** 3 * PDOを使ってデータベースに接続する 4 * @return PDO 5 */ 6function getDatabaseConnection() 7{ 8 try { 9 $database_handler = new PDO( 10 "mysql:host=db;dbname=simple_memo;charset=utf8mb4", 11 "root", 12 "password" 13 ); 14 } catch (PDOException $e) { 15 echo "DB接続に失敗しました。<br/>"; 16 echo $e->getMessage(); 17 exit(); 18 } 19 return $database_handler; 20}

common/validation.php

php

1<?php 2/** 3 * 空チェック 4 * @param $errors 5 * @param $check_value 6 * @param $message 7 */ 8function emptyCheck(&$errors, $check_value, $message) 9{ 10 if (empty(trim($check_value))) { 11 array_push($errors, $message); 12 } 13} 14 15/** 16 * 最小文字数チェック 17 * @param $errors 18 * @param $check_value 19 * @param $message 20 * @param int $min_size 21 */ 22function stringMinSizeCheck(&$errors, $check_value, $message, $min_size = 8) 23{ 24 if (mb_strlen($check_value) < $min_size) { 25 array_push($errors, $message); 26 } 27} 28 29/** 30 * 最大文字数チェック 31 * @param $errors 32 * @param $check_value 33 * @param $message 34 * @param int $max_size 35 */ 36function stringMaxSizeCheck(&$errors, $check_value, $message, $max_size = 255) 37{ 38 if ($max_size < mb_strlen($check_value)) { 39 array_push($errors, $message); 40 } 41} 42 43/** 44 * メールアドレスチェック 45 * @param $errors 46 * @param $check_value 47 * @param $message 48 */ 49function mailAddressCheck(&$errors, $check_value, $message) 50{ 51 if (filter_var($check_value, FILTER_VALIDATE_EMAIL) == false) { 52 array_push($errors, $message); 53 } 54} 55 56/** 57 * 半角英数字チェック 58 * @param $errors 59 * @param $check_value 60 * @param $message 61 */ 62function halfAlphanumericCheck(&$errors, $check_value, $message) 63{ 64 if (preg_match("/^[a-zA-Z0-9]+$/", $check_value) == false) { 65 array_push($errors, $message); 66 } 67} 68 69/** 70 * メールアドレス重複チェック 71 * @param $errors 72 * @param $check_value 73 * @param $message 74 */ 75function mailAddressDuplicationCheck(&$errors, $check_value, $message) 76{ 77 $database_handler = getDatabaseConnection(); 78 if ( 79 $statement = $database_handler->prepare( 80 "SELECT id FROM users WHERE email = :user_email" 81 ) 82 ) { 83 $statement->bindParam(":user_email", $check_value); 84 $statement->execute(); 85 } 86 87 $result = $statement->fetch(PDO::FETCH_ASSOC); 88 if ($result) { 89 array_push($errors, $message); 90 } 91} 92

common/header.php

php

1<?php 2/** 3 * タイトルを指定してヘッダーを作成する 4 * @param $title 5 * @return string 6 */ 7function getHeader($title) 8{ 9 return <<<EOF 10 <head> 11 <meta charset="utf-8"/> 12 <title>SimpleMemo | {$title}</title> 13 <link rel="stylesheet" type="text/css" href="../public/css/bootstrap.min.css" /> 14 <link rel="stylesheet" type="text/css" href="../public/css/main.css" /> 15 <script defer src="../public/js/all.js"></script> 16 </head> 17EOF; 18} 19

試したこと

  • register.phpの記載方法が間違っているのでは?と思い、別ページを指定したがダメそうなので、formに問題があるのでは?と断定しました。

補足情報(FW/ツールのバージョンなど)

windows10 Homeを使用。

dockerを使用しています。

  • mysql:5.7
  • nginx:1.19.1
  • phpmyadmin:5.0.0
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84db2be12f25 mysql:5.7 "docker-entrypoint.s…" 2 days ago Up 22 minutes 33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp php_simple_memo_mysql 9ba9c7209771 nginx:1.19.1 "/docker-entrypoint.…" 2 days ago Up 22 minutes 80/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp php_simple_memo_nginx 84a64e8d46fd phpmyadmin/phpmyadmin:5.0.0 "/docker-entrypoint.…" 2 days ago Up 22 minutes 0.0.0.0:8081->80/tcp, :::8081->80/tcp php_simple_memo_phpmyadmin 9fcad756694f docker_memo_php "docker-php-entrypoi…" 2 days ago Up 22 minutes 9000/tcp

以前質問させていただいた通り、mysqlでエラーが出ていてlogを出力する為の

  • ./mysql/log/:/var/log/mysql

こちらの記述はコメントアウトしてあります。

それ以外は記述におかしい所は発見できませんでした。

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

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

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

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

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

m.ts10806

2021/09/12 09:40

register.phpのコードを提示してください。 あと、コピペで問題再現できるよう配慮願います。
kimura141899

2021/09/12 09:47

ありがとうございます。 各コード追記させていただきます。
kimura141899

2021/09/12 10:08

コード追記させていただいたのですが、どうやらChrome側の問題だったようで、firefoxで動作確認したところ、エラーが発生することなく動作しているようでした。 お手数おかけしました。
guest

回答1

0

ベストアンサー

下記確認しているかもしれませんが。。

■ブラウザ側ポートブロックの可能性
https://labor.ewigleere.net/2021/06/03/chrome-unsafe-port-10080/

■キャッシュ削除の有効性
https://teratail.com/questions/280555

投稿2021/09/12 09:40

kyo0821

総合スコア39

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

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

kimura141899

2021/09/12 10:06

回答ありがとうございます。 どうやらChromeのほうで何か問題があるようで、firefoxで確認したところ通常の動作をしたようです! Chromeの方でキャッシュのクリアなどは行っていたのですが、別ブラウザで試すという発想はありませんでした。引き続きChromeのほうの問題もおっていきたいと思います。
kimura141899

2021/09/12 10:20

拡張機能のキャッシュクリアではなく、ブラウザの方のキャッシュクリアを使用したらChromeでも大丈夫になりました! ありがとうございました。
kyo0821

2021/09/12 10:36

よかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問