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

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

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

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

Q&A

解決済

2回答

323閲覧

よくわかるPHPの教科書での掲示板作成で会員登録をした際、入力した値の確認画面に移行しない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/02/28 08:03

###実現したいこと
よくわかるPHPの教科書で掲示板を作成しています。index.phpで会員登録をした際に登録した内容を確認するため、check.phpにページを移行したいです。
###困っていること
本通りにコードを書いたら、index.phpで入力内容を確認するボタンを押した際に、いきなり登録完了画面(thanks.php)へと遷移してしまいます。おそらく、check.phpの11行目からのif文によってthanks.phpに移動しているのだと思うのですが、こういう仕様なのでしょうか?
またどうすれば登録完了画面に移動することができるのでしょうか?
index.php

php

1<?php 2require_once('../dbconnect.php'); 3ini_set('display_errors', 1); 4ini_set('error_reporting', E_ALL); 5 6session_start(); 7 8 9if(!empty($_POST)){ 10 if(isset($_POST['name'])&&$_POST['name']===""){ 11 $error['name']='blank'; 12 } 13 if(isset($_POST['email'])&&$_POST['email']===""){ 14 $error['email']='blank'; 15 } 16 if(isset($_POST['password'])&&$_POST['password']===""){ 17 $error['password']='blank'; 18 } 19 if(isset($_POST['password'])&&strlen($_POST['password'])<4){ 20 $error['length']='length'; 21 } 22 $fileName=$_FILES['image']['name']; 23 if(!empty($fileName)){ 24 $ext=substr($fileName,-3); 25 if($ext!='jpg'&&$ext!='gif'){ 26 $error['image']='type'; 27 } 28 } 29 30 31if(isset($_REQUEST['action'])&&$_REQUEST['action']==='rewrite'){ 32 $_POST=$_SESSION['join']; 33 $error["rewrite"]="true"; 34 35} 36if(isset($_POST['email'])&&empty($error)){ 37 $member=$db->prepare('SELECT COUNT(*) as cnt FROM members WHERE email=?'); 38 $member->execute(array($_POST['email'])); 39 $record=$member->fetch(); 40 if($record['cnt']>0){ 41 $error['email']='duplication'; 42 } 43} 44 45if(empty($error)){ 46 $image=date('YmdHis').$_FILES['image']['name']; 47 move_uploaded_file($_FILES['image']['tmp_name'],'../member_picture/'.$image); 48 49 $_SESSION['join']=$_POST; 50 $_SESSION['join']['image']=$image; 51 header('Location:check.php'); 52 exit(); 53 } 54} 55?> 56<!DOCTYPE html> 57<html> 58<head> 59<link rel="stylesheet" href="../css/style.css"> 60<meta charest="UTF-8"> 61<title>簡易版ツイッター会員登録ページ<?php if(isset($ext)){echo $ext;} ?></title> 62</head> 63<body class="index"> 64<header> 65<h1>会員登録</h1> 66</header> 67<main> 68<p>次のフォームに必要事項をご記入ください</p> 69<form action="" method="POST" enctype="multipart/form-data"> 70 71 <dl> 72 <dt>ニックネーム<span class="required">必須</span></dt> 73 <dd><input type="text" name="name" size="35" value="<?php echo isset($_POST['name'])? htmlspecialchars($_POST['name']): "" ?>"> 74 <?php if(isset($error['name'])&&$error['name']==='blank'):?> 75 <p class="error">*ニックネームを入力してください</p> 76 <?php endif ?> 77 </dd> 78 <dt>メールアドレス<span class="required">必須</span></dt> 79 <dd><input type="text" name="email" size="35" value="<?php echo isset($_POST['email'])? htmlspecialchars($_POST['email']):""?>"> 80 <?php if(isset($error['email'])&&$error['email']==='blank'):?> 81 <p class="error">*メールアドレスを入力してください</p> 82 <?php endif ?> 83 <?php if(isset($error['email'])&&$error['email']==='duplication'):?> 84 <p class="error">*このメールアドレスはもう使われています</p> 85 <?php endif ?> 86 87 </dd> 88 <dt>パスワード<span class="required">必須</span></dt> 89 <dd><input type="password" name="password" size="20" maxlength="20" value=""> 90 <?php if(isset($error['password'])&&$error['password']==='blank'):?> 91 <p class="error">*パスワードを入力してください</p> 92 <?php endif ?> 93 <?php if(isset($error['password'])&&$error['password']==='length'):?> 94 <p class="error">*パスワードは4文字以上で入力してください</p> 95 <?php endif ?> 96 </dd> 97 98 <dt>写真など</dt> 99 <dd> <input type="file" name="image" /> 100 <?php if(isset($error['image'])&&$error['image']=='type'):?> 101 <p class="error">*画像は「.jpg」か「.gif」のものにしてください</p> 102 <?php endif ;?> 103 <?php if(!empty($error)):?> 104 <p class="error">*恐れ入りますがもう一度画像を指定してください</p> 105 <?php endif ?> 106 </dd> 107 108 </dl> 109 <input type="submit" value="入力内容を確認する"> 110 111</form> 112 113</main> 114</body> 115</html> 116

check.php

php

1<?php 2require_once('../dbconnect.php'); 3ini_set('display_errors', 1); 4ini_set('error_reporting', E_ALL); 5session_start() ; 6if(!isset($_SESSION['join'])){ 7 header('Location:index.php'); 8 exit(); 9 } 10 11 if(!empty($_SESSION['join'])){ 12 $statement=$db->prepare("INSERT INTO members SET name=?,email=?,passward=?,picture=?,created=NOW()"); 13 echo $ret=$statement->execute(array( 14 $_SESSION['join']['name'], 15 $_SESSION['join']['email'], 16 sha1($_SESSION['join']['password']), 17 $_SESSION['join']['image'] 18 )); 19 unset($_SESSION['join']); 20 21 header('Location:thanks.php'); 22 exit(); 23 } 24 25?> 26<!DOCTYPE html> 27<html> 28<head> 29<link rel="stylesheet" href="../css/style.css"> 30<meta charest="UTF-8"> 31<title>簡易版ツイッター会員登録ページ</title> 32</head> 33<body class="index"> 34<header> 35<h1>会員登録</h1> 36</header> 37<main> 38<p>入力事項の確認をしてください</p> 39<form action="" method="POST" enctype="multiple/form-data"> 40<input type="hidden" name="action" value="submit"> 41 <dl> 42 <dt>ニックネーム</dt> 43 <dd><?php echo htmlspecialchars($_SESSION['join']['name']) ?></dd> 44 <dt>メールアドレス</dt> 45 <dd><?php echo htmlspecialchars($_SESSION['join']['name'])?></dd> 46 <dt>パスワード</dt> 47 <dd>パスワードは表示されません</dd> 48 <dt>写真など</dt> 49 <dd><img src="../member_picture/<?php if(isset($_SESSION['image'])){echo htmlspecialchars($_SESSION['join']['image']);}?>" 50 width=100 height=100 alt=""> 51 52 </dd> 53 </dl> 54 <div><a href="index.php?action=rewrite">書き直す</a></div>| 55 <input type="submit" value="登録する"> 56 57 58</form> 59</main> 60</body> 61</html>

thanks.php

php

1 2 3<!DOCTYPE html> 4 5<html> 6<head> 7<link rel="stylesheet" href="../css/style.css"> 8<meta charest="UTF-8"> 9<title>簡易版ツイッター会員登録ページ</title> 10</head> 11<body class="index"> 12<header> 13<h1>会員登録</h1> 14</header> 15<main> 16<p>ユーザー登録が完了しました</p> 17<p><a href="">ログインする</a></p> 18</main> 19</body> 20</html> 21

dbconnect.php

php

1<?php 2try{$db=new PDO('mysql:dbname=twitter;host=localhost:3306',"root","root"); 3}catch(PDOException $e){ 4 echo "データベースに接続できませんでした:".$e->getMessage(); 5}

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

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

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

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

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

kei344

2020/02/28 08:48

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答2

0

check.php冒頭に$_POSTの確認がないからではと。

投稿2020/02/28 08:20

m.ts10806

総合スコア80850

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

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

m.ts10806

2020/02/28 08:21

INSERTのSETはほんとにやめてほしいなあ。
退会済みユーザー

退会済みユーザー

2020/02/28 08:27

いつもご回答ありがとうございます! ご指示の通りにしたらしっかりと動きました。 INSERTの SETはあまり使わない方がいいということですか? 代わりにVALUESを使った挿入方法もあると思うのですがそちらを使用した方がいいということですか?
m.ts10806

2020/02/28 08:30

MySQL以外では使えません(私の知る限り)
m.ts10806

2020/02/28 08:32

headerのLocationは画面表示なくリダイレクトしてしまうので入れてから動かすのではなく、想定のロジックが出来上がってから入れたほうが確実です。 想定の箇所を通っているか、デバッグ先にしましょう。
退会済みユーザー

退会済みユーザー

2020/02/28 08:33

わかりました! ありがとうございます。
guest

0

ベストアンサー

基本的にPHPはインタプリンタ方式という方法で、ファイルに書かれたコードを上からコンピュータが翻訳し、実行されます。現在のcheck.phpの書き方では、入力事項を表すコードよりもthanks.phpへ移動するコードの方が先へ書かれているため、このままのコードでは入力事項を表さずにthanks.phpへ移動する仕様になります。
もしcheck.phpの表示を利用者へ確認してもらったうえでthanks.phpへ移動するコードにしたいのであれば、check.phpheader('Location:thanks.php');のコードをなくし、formタグへaction="thanks.php"をつけ足し、あとは誤差を修正すれば行けるのではないかと思います。

投稿2020/02/28 08:51

SanQ

総合スコア92

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

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

SanQ

2020/02/28 09:45 編集

あとphp Mannualを見て知ったのですが、パスワードにsha1()メソッドを使用するのはあまり勧められないようです。 詳しくは以下のURLから調べてみてください。 https://www.php.net/manual/ja/function.sha1.php
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問