🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

4回答

1564閲覧

phpを使用してのログイン画面

you3

総合スコア6

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1グッド

3クリップ

投稿2020/01/06 09:22

php初心者のものです。
IT企業に転職を考えていて自分で勉強しているところです。
phpを使って予約サイトを作り、history.phpで自分の予約情報を確認できるページを作ろうと思っていて、ネットから情報を持ってきて自分なりに作ったのですがうまくページが作れません。
拙いコードではありますがどなたかお助けいただけないでしょうか?

予約登録のコードは以下の通りです。
データベース名はtextです。
カラム名はcontactです。
login.phpからデータベース(text)につないで、氏名とパスワードでログインしてhistory.phpで
情報を確認したいです。

contact.php → confirm.php → complete.php

login.php → history.php

contact.php

<?php $mysqli = new mysqli("localhost","root","root","text"); if($mysqli->connect_error){ echo "データベース接続に失敗しました"; exit(); } echo "データベースに接続できました"; $result = $mysqli->query("SELECT * FROM contacts"); $mysqli->close(); ?> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/contact.css"> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <div id="all_content"> <div id="menu"> <ul> <li><a href="home.php">ホーム</a></li> <li><a href="access.php">アクセス</a></li> <li><a href="contact.php">予約</a></li> <li><a href="login.php">予約履歴</a></li> </ul> </div> <div id="contact"> <form action="confirm.php" method="post"><!--ブックマークつける場合はget--> <p>氏名*       <input type="text" name="username" style="width:500px;"></p> <p>電話番号*     <input type="text" name="password" style="width:500px;"></p> <p>メールアドレス*  <input type="text" name="mail" style="width:500px;"> <div id="submit"> <input type="submit" value="送 信" style="margin-left: 800px;"> </div> </form> </div> </div> </body> </html> コード

confirm.php

<html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/confirm.css"> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <div id=main> <img src="img/login3.jpg" alt="ログイン画面の写真"> </div> <?php // フォームのボタンが押されたら if ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST["username"]; $password = $_POST["password"]; $mail = $_POST["mail"]; } ?> <div id="form_area"> <form action="conplete.php" method="post"> <input type="hidden" name="username" value="<?php echo $username; ?>"> <input type="hidden" name="password" value="<?php echo $password; ?>"> <input type="hidden" name="mail" value="<?php echo $mail; ?>"> <p>予約内容はこちらで宜しいでしょうか?<br>よろしければ「送信する」タンを押して下さい。</p> <?php if($_POST) { echo "氏名       ".$_POST["username"]."<br>"; echo "電話番号     ".$_POST["password"]."<br>"; echo "メールアドレス  ".$_POST["mail"]."<br>"; } ?> <input type="submit" value="送 信"> </div> </body> </html> コード

complete.php

if($_POST) { $username = $_POST["username"]; $password= $_POST["password"]; $mail = $_POST["mail"]; $mysqli = new mysqli("localhost","root","root","text"); if($mysqli->connect_error){ echo "データベース接続に失敗しました"; exit(); } $result = $mysqli->query("INSERT INTO contacts VALUES(NULL, '$username','$password', '$mail', now())"); if($result == 0) { echo "登録失敗しました。"; } else { echo "登録しました。"; } $mysqli->close(); } ?> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/conplete.css"> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <div id=main> <img src="img/login3.jpg" alt="ログイン画面の写真"> </div> <div id="conplete"> <p>ご予約完了しました。</p> </div> <div id="back"> <form action="contact.php" method="post"> <input type="submit" value="戻 る"> </div> </body> </html> コード

これからが予約確認のページです。

login.php

if($_POST) { $username = $_POST["username"]; $password = $_POST["password "]; } $mysqli = new mysqli("localhost","root","root","text"); //UPDATE文を変数に格納 if($mysqli->connect_error){ echo "データベース接続に失敗しました"; exit(); } echo "データベースに接続できました"; // エラーを格納する変数 $err = []; if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'POST') { $username = filter_input(INPUT_POST, 'username'); $tel = filter_input(INPUT_POST, 'tel'); if ($username === '') { $err['username'] = 'ユーザー名は入力必須です。'; } if ($password === '') { $err['password '] = 'パスワードは入力必須です。'; } // エラーがないとき if (count($err) === 0) { // DB接続 $pdo = connect(); // ステートメント $stmt = $pdo->prepare('SELECT * FROM contacts WHERE username = ?'); // パラメータ設定 $params = []; $params[] = $username; // SQL実行 $stmt->execute($params); // レコードセットを取得 $rows = $stmt->fetchAll(); // パスワード検証 foreach ($rows as $row) { $password _hash = $row['password ']; // パスワード一致 if (password_verify($tel, $tel_hash)) { session_regenerate_id(true); $_SESSION['login'] = $row; return; } } $err['login'] = 'ログインに失敗しました。'; } } ?> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/login.css"> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <div id="all_content"> <h1>氏名、パスワードを入力してください。</h1> <form action="history.php" method="post"> <table> <tr> <th>氏名</th> <td><input type="text" style="width:500px;"></td> </tr> <tr> <th>パスワード</th> <td><input type="text" name="password" style="width:500px;"></td> </tr> </table> <p><input type="submit" value="ログイン"></p> </form> </div> </body> </html> コード

history.php

<?php $mysqli = new mysqli("localhost","root","root","text"); if($mysqli->connect_error){ echo "データベース接続に失敗しました"; exit(); } echo "データベースに接続できました"; $result = $mysqli->query("SELECT * FROM contacts"); $mysqli->close(); ?> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/history.css"> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <div id="section"> <h2>送信データ一覧</h2> <table> <tr> <th>ID</th> <th>氏名</th> <th>パスワード</th> <th>メール</th> </tr> <?php while($row = $result->fetch_assoc()) : ?> <tr> <td><?php echo $row["id"]; ?></td> <td><?php echo $row["username"]; ?></td> <td><?php echo $row["password"]; ?></td> <td><?php echo $row["mail"]; ?></td> </tr> <?php endwhile; ?> </table> <form action="home.php" method="POST"> <input type="submit" value="ホーム画面に戻る"> </form> </div> </body> </html> コード

何度もしつこいですが拙いコードで申し訳ありません。
どうかお助けください。

DrqYuto👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/01/06 09:26

「うまくページが作れません」じゃ、なにもわからんので回答者に負担ばかりかけることになるよ。
mari.rinn

2020/01/06 09:29

どこまでは正常に動作確認出来ていて、どこから詰まっているのか?を明記されないと、さすがに回答される方も答えを見つけにくいと思いますよ。
you3

2020/01/06 09:31

なるほど 少し修正します。 ご指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/01/06 09:32

控えめに見ても、ただのデバッグ作業依頼。
退会済みユーザー

退会済みユーザー

2020/01/06 09:45

何ができなくて困っているのですか?
m.ts10806

2020/01/06 10:27

そうですね。「何を助ければ良いか」を明確にすることですね。 既にあるようにデバッグ依頼に等しい内容です。 せめて2,3点、具体的に絞って質問しましょう(もっと良いのは本当に解決したい1点だけに絞ること) よく「道を訪ねる」に例えるのですが、現在だと「どこかにいきたいけどどういう道を通ったらいいのか分からない」と言ってるのに近いです。 ヒアリングしなければならない内容が多ければ多いほど、赤の他人である回答者は避ける傾向にあります。 もちろん「質問するな」という意味ではなく、「アドバイスを得やすくなるように疑問点を絞り込もう」ということです。 スポットで解決したい問題を提示できれば進むと思います。 もちろん、自身できちんと調べたり試すことは大事です。 初心者質問の多くは「エラーを読むこと」「デバッグすること」「PHPマニュアルで仕様を確認すること」で解決するからですね。
you3

2020/01/06 12:14

ありがとうございます。 再度自分自身で確認してからまた質問させていただければと思います。
guest

回答4

0

コードを見ないで回答します。

teratailに限らず、ネット上でのQ&Aのやりとりは、
お互いに負担にならないよう最大限配慮する必要があります。

・漠然とした質問を避けて、ポイントを極力一つに絞る。
・一つの投稿にいろんな問題を混ぜ込まず単純化する。
・問題点を最小限再現するだけのコードを起こし直して、それについて質問する。
・投稿して終わり、にせず、第三者に意図が伝わるか何度も読み返す。

という姿勢であれば、小うるさい指摘もなくスムーズなやり取りができるはずです。

作りかけのシステムのコードすべてを掲載されたところで、
興味を惹かれない限り、誰も手を付けようとしませんし。
ましてや、回答するのは義務でもなんでも無いため
めんどくさいってだけでスルーされます。

今回の質問は、質問のポイントが整理されておらず、
片っ端からおかしな点を指摘しようにも
何が問題なのか再現するために回答者(候補)らが手を動かさないといけなくて、
とても面倒に感じます。
これじゃまともに回答がつくはずもありません。

3点目に挙げた、「問題点を最小限再現するだけのコードを起こし直し」てみることを
強くおすすめします。
ミニマルなコードを起こし直して再現しない場合は、
特定条件でのパラメータのミスなど、些細なものかもしれませんし。

上手にteratailを活用してください。

投稿2020/01/06 10:16

編集2020/01/06 10:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

コードを継ぎ接ぎで作っているので、ちゃんと評価するに値しません。
XSS, CSRF が可能なので、訴訟リスクを抱えています。現状のまま公開しないでください。

会員管理システムは、ごく初歩のプログラミングですが、初心者がコントロールするのは難しいものでもあります。

多くのシステムは、上流工程を経て開発されます。
会員管理システムの設計から学んでみると良いです。

PHPでログイン機能を実装するチュートリアル#1

初心者が手を出すべきでないシステムをまとめた記事を書いたので参考まで。
4.面白そう!で学習教材(サンプルシステム)を選ぶな!-「ググれ」って言われてググるな!【初学者べからず集 その1】

個人的には、設計の容易な掲示板システムで、最低限のセキュリティを学ぶことをオススメします。(掲示板でも、XSS 対策は最低限必須ですが。)

余談:
目視でざっと見たんですけど、login.phpだけ別のところからコードを引っ張ってきたのでは?多分ログインが機能しないはずです。

投稿2020/01/06 23:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

こちらを参考にしてみてはいかがでしょうか。
【PHP】パスワードのハッシュ化とパスワードの認証をする方法

投稿2020/01/06 12:00

H40831

総合スコア975

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

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

you3

2020/01/06 12:18

ありがとうございます。 もう一度自分でやってみます。
guest

0

この本にセッションとクッキーを用いたログイン機能の実装の作り方が載ってました

参考
スラスラわかるPHP | 志田 仁美, アシアル株式会社 | 工学 | Kindleストア | Amazon
https://www.amazon.co.jp/dp/B00LAOBPXQ/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

投稿2020/01/06 12:13

DrqYuto

総合スコア432

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

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

you3

2020/01/06 12:18

ありがとうございます。 参考に買ってみます!
退会済みユーザー

退会済みユーザー

2020/01/06 13:01

2014年の本で、だいじょうぶ?
m.ts10806

2020/01/06 13:04

こうして最も参照すべきPHPマニュアルがないがしろにされていくわけで。
DrqYuto

2020/01/06 15:18

古かったですが,一応ログイン機能は実装できました… マニュアル参照はもちろん大事ですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問