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

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

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

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

1回答

2666閲覧

MAMP:ローカル環境でphpMyAdminを使ったMySQLへのDB接続が必要な場合に限り、画面遷移しない問題を解決したい。

Kuromame52

総合スコア4

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2019/08/14 06:02

編集2019/08/14 09:00

前提・実現したいこと

MAMPを利用しています。ローカル環境で動かしている自作サービスで画面上のユーザー登録やログインを行うと永遠にリロードしていて画面遷移しないので、画面遷移するようにしたいです。

phpMyAdminを使ったMySQLへの接続が必要な場合に限り画面遷移しない状況です。

これはMAMPの設定が正確にできていないことが原因なのでしょうか?
自力での原因解決が3日経ってもできず悩んでいます。
独学でプログラミングを学んでいて、周りに質問できるような知り合いがいません。
どうかお力添え頂けませんでしょうか。

以下のコードで以前はユーザー登録ができ画面遷移もしていたので
個人的にはphp.iniの設定がおかしい または MAMPのUPDATE時のインストールが原因だと考えています。

該当のソースコード

以下はユーザー登録ページのコードです。

HTML

1<?php 2 3//共通変数・関数ファイルを読み込み 4require('function.php'); 5 6debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「'); 7debug('「 ユーザー登録ページ '); 8debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「'); 9debugLogStart(); 10 11//post送信されていた場合 12if (!empty($_POST)) { 13 14 //変数にユーザー情報を代入 15 $email = $_POST['email']; 16 $pass = $_POST['pass']; 17 $pass_re = $_POST['pass_re']; 18 19 //未入力チェック 20 validRequired($email, 'email'); 21 22 validRequired($pass, 'pass'); 23 24 validRequired($pass_re, 'pass_re'); 25 26 27 if (empty($err_msg)) { 28 29 //emailの形式チェック 30 validEmail($email, 'email'); 31 //emailの最大文字数チェック 32 validMaxLen($email, 'email'); 33 //email重複チェック 34 validEmailDup($email); 35 36 //パスワードの半角英数字チェック 37 validHalf($pass, 'pass'); 38 //パスワードの最大文字数チェック 39 validMaxLen($pass, 'pass'); 40 //パスワードの最小文字数チェック 41 validMinLen($pass, 'pass'); 42 43 //パスワード(再入力)の最大文字数チェック 44 validMaxLen($pass_re, 'pass_re'); 45 //パスワード(再入力)の最小文字数チェック 46 validMinLen($pass_re, 'pass_re'); 47 48 if (empty($err_msg)) { 49 50 //パスワードとパスワード再入力が合っているかチェック 51 validMatch($pass, $pass_re, 'pass_re'); 52 53 if (empty($err_msg)) { 54 55 //例外処理 56 try { 57 //DBへ接続 58 $dbh = dbConnect(); 59 //SQL文作成 60 $sql = 'INSERT INTO users (email,password,login_time,create_date) VALUES(:email,:pass,:login_time,:create_date)'; 61 var_dump($sql); 62 $data = array( 63 ':email' => $email, ':pass' => password_hash($pass, PASSWORD_DEFAULT), 64 ':login_time' => date('Y-m-d H:i:s'), 65 ':create_date' => date('Y-m-d H:i:s') 66 ); 67 var_dump($data); 68 //クエリ実行 69 $stmt = queryPost($dbh, $sql, $data); 70 var_dump($stmt); 71 72 //クエリ成功の場合 73 if ($stmt) { 74 //ログイン有効期限(デフォルトを1時間とする) 75 $sesLimit = 60 * 60; 76 //最終ログイン日時を現在日時に 77 $_SESSION['login_date'] = time(); 78 $_SESSION['login_limit'] = $sesLimit; 79 //ユーザーIDを格納 80 $_SESSION['user_id'] = $dbh->lastInsertId(); 81 82 debug('セッション変数の中身:' . print_r($_SESSION, true)); 83 84 header("Location:mypage.php"); //マイページへ 85 } 86 } catch (Exception $e) { 87 error_log('エラー発生:' . $e->getMessage()); 88 $err_msg['common'] = MSG07; 89 } 90 } 91 } 92 } 93} 94?> 95 96<?php 97$siteTitle = 'ユーザー登録'; 98require('head.php'); 99?> 100 101<body class="page-signup page-1colum"> 102 103 <!-- ヘッダー --> 104 <?php 105 require('header.php'); 106 ?> 107 108 <!-- メインコンテンツ --> 109 <div id="contents" class="site-width"> 110 111 <!-- Main --> 112 <section class="main"> 113 <div class="form-container"> 114 <form action="" method="post" class="form"> 115 116 <h2 class="title">ユーザー登録</h2> 117 118 <div class="area-msg"> 119 <?php 120 if (!empty($err_msg['common'])) echo $err_msg['common']; 121 ?> 122 </div> 123 124 125 <label class="<?php if (!empty($err_msg['email'])) echo $err_msg['email']; ?>"> 126 Email 127 <input type="text" name="email" value="<?php if (!empty($_POST['email'])) echo $_POST['email']; ?>"> 128 </label> 129 <div class="area-msg"> 130 <?php 131 if (!empty($err_msg['email'])) echo $err_msg['email']; 132 ?> 133 </div> 134 135 136 <label class="<?php if (!empty($err_msg['pass'])) echo $err_msg['pass']; ?>"> 137 パスワード<input type="password" name="pass" value="<?php if (!empty($_POST['pass'])) echo $_POST['pass']; ?>"> 138 </label> 139 <div class="area-msg"> 140 <?php 141 if (!empty($err_msg['pass'])) echo $err_msg['pass']; 142 ?> 143 </div> 144 <label class="<?php if (!empty($err_msg['pass_re'])) echo $err_msg['pass_re']; ?>"> 145 パスワード(再入力) 146 <input type="password" name="pass_re" value="<?php if (!empty($_POST['pass_re'])) echo $_POST['pass_re']; ?>"> 147 </label> 148 <div class="area-msg"> 149 <?php 150 if (!empty($err_msg['pass_re'])) echo $err_msg['pass_re']; 151 ?> 152 </div> 153 154 <div class="btn-container"> 155 <input type="submit" class="btn btn-mid" value="登録する"> 156 <div> 157 </form> 158 </div> 159 160 </section> 161 </div> 162 163 <!-- footer --> 164 <?php 165 require('footer.php'); 166 ?> 167

試したこと

MAMPの再インストール後、初期設定をしました。

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

macOS Mojave バージョン 10.14.6
MAMP バージョン 5.4

Database server
Server: Localhost via UNIX socket
Server type: MySQL
Server connection: SSL is not being used Documentation
Server version: 5.7.26 - MySQL Community Server (GPL)
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)

Web server
Apache/2.2.34 (Unix) mod_wsgi/3.5 Python/2.7.13 PHP/7.3.7 mod_ssl/2.2.34 OpenSSL/1.0.2o DAV/2 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.10 Perl/v5.24.0
Database client version: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
PHP version: 7.3.7

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2019/08/14 06:21

phpMyAdminはあくまでMySQL(またはMariaDB)を操作するためのツールの1つに過ぎないので接続先はあくまでMySQL(またはMariaDB)です。 ※問題の解決策ではなく正しい表現を心掛けてほしいというお願いです。 ただ、この設定だけではなんとも言えません。 実際の「ローカル環境で動かしている自作サービス」のコードをご提示ください。
Kuromame52

2019/08/14 06:24

ご返答ありがとうございます。 失礼致しました。 正しい表現ができるように学びたいと思います。 少々お待ちいただけますでしょうか。
m.ts10806

2019/08/14 06:27

特に急いでいませんので、ご自分のペースで調整いただければと
Kuromame52

2019/08/14 06:47

正しい表現に修正することができました。 ありがとうございます。
Kuromame52

2019/08/14 09:01

ありがとうございます! 修正しました 便利な機能ですね
guest

回答1

0

念のためrequireしているファイルもそれぞれご提示いただいたほうが良さそうですが下記は関係ありそうに思います。

PHPマニュアル:header()

header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

header()の前にvar_dump()で画面出力が行われています。
これだけが原因ではないかもしれませんが、まずここは「画面出力しないように」デバッグは内容確認できたら外しておきましょう。

もう1点気になるのは各所で入れられているif (empty($err_msg)) {です
同じ条件の処理であれば何度も入れる必要はありませんが、
そもそも$err_msgという変数どこで定義されていますか?
未定義の場合もempty()はtrueになりますが、全体的にあまり意味がよく分からない処理が多いですね(やはりそこはコードは全て提示されたほうが良さそうです)

try-catchでerror_log()でログ出力されていますが、何か出力されていませんでしたか?
念のためそこでexit($e->getMessage());で処理を止めてみてください。

投稿2019/08/14 23:44

m.ts10806

総合スコア80850

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

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

Kuromame52

2019/08/15 01:59

回答ありがとうございます。 require関数などに空白や空行があって出力されてしまうことがあるんですね! var_dumpを外して、exit($e->getMessage());で処理を止めてみました。 require()しているfunction.phpのコードを載せたいのですが、1万字を超えているため質問の編集ができないようです。この場合、外部のサイトで閲覧するようにすればいいのでしょうか。 もし、コードを載せるのにオススメのものがあればお教えていただきたいです。
m.ts10806

2019/08/15 02:55 編集

Githubとかでしょうか。 > require関数などに空白や空行があって出力されてしまうことがあるんですね! たいていはHTMLがあったり、echo書いていたり、作った側の意図的なものが多いです。(あとNoticeなどの軽微なエラーが出ているとか) > var_dumpを外して、exit($e->getMessage());で処理を止めてみました。 結果はどうなりましたか?何かしら挙動が変わったのであればどうなったか、変わらないならそれはそれで教えてください。 (要は細かいデバッグによって原因と対策を突き詰めていく地道な作業です)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問