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

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

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

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

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

2回答

918閲覧

本のコードを打って作っていたTwitter風一言掲示板にログインできなくなりました。

potet

総合スコア17

Windows 10

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

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2020/05/26 12:29

編集2020/05/27 13:55

よく分かるphpの教科書という本で勉強中です。
正しいパスワードとメールアドレスを入れてもログインできません。なぜでしょうか。仕組みを理解してコードを書いてない為訳が分からず困っています。
login.php

<!doctype html> <html lang="ja"> <head> <meta charset=utf8> </head> <body> <?php require('dbconnect.php'); session_start(); if(!empty($_COOKIE['email'])&&$_COOKIE['email'] != ''){ $_POST['email']=$_COOKIE['email']; $_POST['email']=$_COOKIE['password']; $_POST['save']='on'; } if(!empty($_POST)){ //ログイン処理 if($_POST['email']!=''&&isset($_POST['password'])&&$_POST['password']!=''){ $login=$db->prepare('SELECT * FROM members WHERE email=? AND password=?'); $login->execute(array( $_POST['email'], sha1($_POST['password']) )); $member=$login->fetch(); if($member){ //ログイン成功 $_SESSION['id']=$member['id']; $_SESSION['time']=time(); //ログイン情報を記録する if($_POST['save']=='on'){ setcookie('email',$_POST['email'],time()+60*60*24*14); setcookie('password',$_POST['password'],time()+60*60*24*14); } header('Location:index.php'); exit(); }else{ $error['login']='failed'; } }else{ $error['login']='blank'; } } ?> <div id="lead"> <p>メールアドレスとパスワードを記入してログインしてください。</p> <p>入会手続きがまだの方はこちらからどうぞ。</p> <p>&raquo;<a href="join/">入会手続きをする</a></p> </div> <form action="" method="post"> <dl> <dt>メールアドレス</dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php if(!empty($_POST['email'])){ echo htmlspecialchars($_POST['email'],ENT_QUOTES);}?>"/> <?php if(isset($error['login'])&&$error['login']=='blank'):?> <p class="error">メールアドレスとパスワードをご記入ください。</p> <?php endif;?> <?php if(isset($error['login'])&&$error['login']=='failed'):?> <p class="error">ログインに失敗しました。正しくご記入ください。</p> <?php endif;?> </dd> <dt>パスワード</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php if(!empty($_POST['password'])){echo htmlspecialchars($_POST[password],ENT_QUOTES);}?>"/> </dd> <dt>ログイン情報の記録</dt> <dd> <input id="save" type="checkbox" name="save" value="on"><label for="save">次回からは自動的にログインする。</label> </dd> </dl> <div><input type="submit" value="ログインする"/></div> </body>

index.php

<?php session_start(); require('dbconnect.php'); if(isset($_SESSION['id'])&&$_SESSION['time']+3600>time()){ //ログインしている $_SESSION['time']=time(); $members=$db->prepare('SELECT * FROM members WHERE id=?'); $members->execute(array($_SESSION['id'])); $member=$members->fetch(); }else{ //ログインしてない header('Location:login.php'); exit(); } //投稿を記録する if(!empty($_POST)){ if($_POST['message']!=''){ $message=$db->prepare('INSERT INTO posts SET member_id=?,message=?,reply_post_id=?,created=NOW()'); $message->execute(array( $member['id'], $_POST['message'], $_POST['reply_post_id'] )); header('Location:index.php'); exit(); } } //投稿を取得する $posts=$db->query('SELECT m.name ,m.picture, p.* FROM members m,posts p WHERE m.id=p.member_id ORDER BY p.created DESC'); //返信の場合 if(isset($_REQUEST['res'])){ $response=$db->prepare('SELECT m.name,m.picture,p.* FROM members m,posts p WHERE m.id=p.member_id AND p.id=? ORDER BY p.created DESC'); $response->execute(array($_REQUEST['res'])); $table=$response->fetch(); $message='@'.$table['name'].' '.$table['message']; } ?> <!doctypehtml> <html lang="ja"> <head> <meta charset=utf8> </head> <body> <form action="" method="post"> <dl> <dt><?php echo htmlspecialchars($member['name'],ENT_QUOTES);?>さんメッセージをどうぞ</dt> <dd> <textarea name="message" cols="50" rows="5"><?php echo htmlspecialchars($message,ENT_QUOTES);?></textarea> <input type="hidden" name="reply_post_id" value="<?php echo htmlspecialchars($_REQUEST['res'],ENT_QUOTES);?>"/> </dd> </dl> <div> <input type="submit" value="投稿する"/> </div> </form> <?php foreach($posts as $post):?> <hr> <div class="msg"> <img src="member_picture/<?php echo htmlspecialchars($post['picture'],ENT_QUOTES);?>" width="48" height="48" alt=<?php echo htmlspecialchars($post['name'],ENT_QUOTES);?>> <p><?php echo htmlspecialchars($post['message'],ENT_QUOTES);?><span class="name">(<?php echo htmlspecialchars($post['name'],ENT_QUOTES);?>)</span> [<a href="index.php?res=<?php echo htmlspecialchars($post['id'],ENT_QUOTES);?>">RE</a>] </p> <p class="day"><?php echo htmlspecialchars($post['created'],ENT_QUOTES);?></p> </div> <?php endforeach;?> </body>

dbconnect.php

<!doctype html> <html lang ="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel ="stylesheet" href="css/style.css"> </head> <body> <?php try{ $db=new PDO ('mysql:dbname=mini_bbs;host=127.0.0.1;charset=utf8','root','s@kana51'); }catch(PDOException $e){ echo 'DB接続エラー:'.$e->getMessage(); } ?>

index.php-post¥join

<!doctype html> <html lang="ja"> <head> <meta charset=utf8> </head> <body> <?php require('dbconnect.php'); session_start(); if(!empty($_COOKIE['email'])&&$_COOKIE['email'] != ''){ $_POST['email']=$_COOKIE['email']; $_POST['email']=$_COOKIE['password']; $_POST['save']='on'; } var_dump($_POST); if(!empty($_POST)){ //ログイン処理 if($_POST['email']!=''&&isset($_POST['password'])&&$_POST['password']!=''){ $login=$db->prepare('SELECT * FROM members WHERE email=? AND password=?'); $login->execute(array( $_POST['email'], sha1($_POST['password']) )); $member=$login->fetch(); if($member){ //ログイン成功 $_SESSION['id']=$member['id']; $_SESSION['time']=time(); //ログイン情報を記録する if($_POST['save']=='on'){ setcookie('email',$_POST['email'],time()+60*60*24*14); setcookie('password',$_POST['password'],time()+60*60*24*14); } header('Location:index.php'); exit(); }else{ $error['login']='failed'; } }else{ $error['login']='blank'; } } ?> <div id="lead"> <p>メールアドレスとパスワードを記入してログインしてください。</p> <p>入会手続きがまだの方はこちらからどうぞ。</p> <p>&raquo;<a href="join/">入会手続きをする</a></p> </div> <form action="" method="post"> <dl> <dt>メールアドレス</dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php if(!empty($_POST['email'])){ echo htmlspecialchars($_POST['email'],ENT_QUOTES);}?>"/> <?php if(isset($error['login'])&&$error['login']=='blank'):?> <p class="error">メールアドレスとパスワードをご記入ください。</p> <?php endif;?> <?php if(isset($error['login'])&&$error['login']=='failed'):?> <p class="error">ログインに失敗しました。正しくご記入ください。</p> <?php endif;?> </dd> <dt>パスワード</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php if(!empty($_POST['password'])){echo htmlspecialchars($_POST['password'],ENT_QUOTES);}?>"/> </dd> <dt>ログイン情報の記録</dt> <dd> <input id="save" type="checkbox" name="save" value="on"><label for="save">次回からは自動的にログインする。</label> </dd> </dl> <div><input type="submit" value="ログインする"/></div> </body>

試したこと

var_dumpを使って変数の内容を見てみること
login.phpの16行目にvar_dump($_POST)を打ってみたらこんなのが出てきました。
array(3) { ["email"]=> string(8) "sakana51" ["password"]=> string(12) "ab@gmail.com" ["save"]=> string(2) "on" }
sakana51というのはパスワードのつもりでいれましたがemailに入っています。メールアドレスとパスワードが逆に入っているのではないかと思い、フォームの所を間違ってないか見てみたり、逆にメールアドレスとパスワードを入れてログインできるか試みたのですがログインできませんでした。でもlogin.phpの$_POSTの前で何かが起こっているはずなのでもう少し探してみます。
開発環境はWindows10でxamppを使ってます。よろしくお願いします。

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

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

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

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

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

Takumiboo

2020/05/26 13:48

根本的な理由は「仕組みを理解してコードを書いてない」からでしょうけど…それはおいておいて。 「ログインできない」とは何を指しているのでしょうか。コード内で用意しているエラーが出るのか、PHPのエラーが出るのか、画面が真っ白になるのか、などなど。 一言で「ログインできない」とだけ書かれても、現象がわかりません。
kai0310

2020/05/26 19:32

> ログインできなくなりました。 少なからず一度はできていたという認識でよろしいですか?
potet

2020/05/27 12:40

ご回答ありがとうございます。 login.phpにまた戻ってきてしまいます。その際パスワードは何十文字か数えられませんが勝手に入力されています。勝手に入力されたパスワードを消してからもう一度正しいパスワードを入力してもlogin.phpに戻されます。一度はログイン出来てました。
potet

2020/05/27 13:58

一つミスが見つかって何十文字もパスワードが入力されることは無くなりました。パスワードとメールアドレスが逆になっているのでメールアドレスの文字数だけパスワードが再現(勝手に入力)されています。
guest

回答2

0

自己解決

login.phpの13行目が$_POST['password']となる所が$_POST['email']となっていました。それが原因でした。きちんと表示されました。ありがとうございました。

投稿2020/05/27 14:14

potet

総合スコア17

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

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

0

まずは、どこまで期待通りの処理が行われているかを調べてみましょう。

PHP

1var_dump('確認したい変数等');

原因はdbconnect.phpというファイルが載ってないのでコード自体を詳しくは見ていないためわかりません。

投稿2020/05/26 19:29

kyoya0819

総合スコア10429

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

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

potet

2020/05/27 12:43

ご回答ありがとうございます。 dbconnect.phpを追加させて頂きました。プログラムの順番が分かりませんがvar_dumpもやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問