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

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

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

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

PHP

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

Q&A

解決済

1回答

603閲覧

自主制作物のアプリにログインができません

higa_yomityu

総合スコア41

MySQL

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

PHP

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

0グッド

0クリップ

投稿2020/11/03 19:16

編集2020/11/07 15:41

現在、アプリの作成に取り組んでいます。
sqlに保存したデータを使ってログインしたいのですが目的のページにログインすることができません。

アプリの流れとしましては、
①new_log.php→新規登録者の情報を入力
➁find.php→新規登録者の情報を確認し、mysqlに保存
③ok.phpに遷移し、ok.php内のリンクタグからlogin.phpに入る。
④login.php→新規登録者の情報を呼び出しログインを行い、check.phpへ遷移
となります。

mysqlに登録者の情報は保存されているのは確認できています。

私なりにログインができない原因として考えているのは
・登録車情報の呼び出し方に問題がある
・格納した変数をまちがった処理で記述していいる
の2点です。

ログインができない原因と解決策を教えてください。よろしくお願いします。

===new_log.php=== <?php //sessionで情報を持ってくる session_start(); require('../conect.php'); // nameとpasswordが空か調べる if($_POST){ if($_POST['name']===''){ $error['name']='blank'; } if(strlen($_POST['password'])<4){ $error['password']='length'; } if($_POST['password']===''){ $error['password']='blank'; } // パスワードに被りが無いかチェックする if(empty($error)){ $member=$db->prepare('SELECT COUNT(*)AS cnt FROM member WHERE password=?'); $member->execute(array($_POST['password'])); $record=$member->fetch(); if($record['cnt']>0){ $error['password']='duplicate'; } } //エラーが空ならfind.phpに遷移する if(empty($error)){ //$_POSTを$_SESSIONに代入 $_SESSION['join']=$_POST; header('Location:find.php'); exit(); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="../styl.css"/> <title>絶対!禁煙‼</title> </head> <body> <div class="all"> <!--====header===---> <header> <div class="header"> <div class="title"> <h1> <img src="../image_folder/No_Smoking.png" alt="絶対!禁煙!!"> </h1> </div> <p class="use-to"> <a href="useto.php">使い方はこちら</a> </p> </div> </header> <h2>新規登録</h2> <div class="sign_up"> <form action="" method="POST"> <!-- $_POSTで名前とパスワードを読み込む --> <p>お名前:</p> <input type="text" name="name" value="<?php print(htmlspecialchars($_POST['name'],ENT_QUOTES));?>"> <?php if($error['name']==='blank'):?> <p class="error">名前を入力してください</p> <?php endif;?> <p>パスワード:</p> <input type="text" name="password" value="<?php print(htmlspecialchars($_POST['password'],ENT_QUOTES));?>"> <?php if($error['password']==='length'):?> <p class="error">パスワードは4文字以上で入力してください</p> <?php endif ;?> <?php if($error['password']==='blank'):?> <P class="error">パスワードを入力してください</P> <?php endif;?> <?php if($error['password']==='duplicate'):?> <p class="error">指定されたpasswordは既に使用されいます</p> <?php endif?> <br> <input type="submit" value="入力内容を確認する"> </form> </div> </div> </body> </html>
===find.php=== <?php //sessionで情報を持ってくる session_start(); require('../conect.php'); //session['join']がセットされていなければnew_log.phpに戻る if(!isset($_SESSION['join'])){ header('Location:new_log.php'); exit(); } //formのpostが送信された時にnameとpasswordを保存する if(!empty($_POST)){ $statement=$db->prepare('INSERT INTO member SET name=?,password=?'); $statement->execute(array( $_SESSION['join']['name'],$_SESSION['join']['password'] )); //session['join']をクリアしてok.phpに遷移する unset($_SESSION['join']); header('Location:ok.php'); exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="../styl.css"/> <title>絶対!禁煙‼</title> </head> <body> <div class="all"> <!--====header===---> <header> <div class="header"> <div class="title"> <h1> <img src="../image_folder/No_Smoking.png" alt="絶対!禁煙!!"> </h1> </div> <p class="use-to"> <a href="useto.php">使い方はこちら</a> </p> </div> </header> <h2>登録情報はこちらで間違いないですか?</h2> <form action="" method="POST"> <input type="hidden" name="action" value="submit"/> <!--$_SESSIONでnameとpassswordを出力する--> <div class="confirm"> <P>名前:</P> <?php print(htmlspecialchars($_SESSION['join']['name'],ENT_QUOTES));?> <br> <P>パスワード:</P> <?php print(htmlspecialchars($_SESSION['join']['password'],ENT_QUOTES));?> </div> <P>入力した内容に間違いがなければ登録するをクリックしてください</P> <div class="decision"> <a href="new_log.php?action=rewrite">書き直す</a> <input type="submit" value="登録する"> </div> </form> </div> </body> </html>
===login.php=== <?php //sessionで情報を持ってくる session_start(); require('conect.php'); if(!empty($_POST)){ //$_POSTが空じゃなかった時の処理 if($_POST['name'] !==''&&$_POST['password'] !==''){ $login=$db->prepare('SELECT * FROM member WHERE name=? AND password=?'); $login->execute(array( $_POST['name'], $_POST['password'] )); $member=$login->fetch(); if($member){ $_SESSION['id']=$member['id']; $_SESSION['time']=time(); //cookieにログイン情報を3日間保存する if($_POST['save']==='on'){ setcookie('password',$_POST['password'],time()+60*60*24*3); } header('Location:check.php'); exit(); }else{ $error['login']='failed'; } //$_POSTが空だった時の処理 }else{ $error['login']='blank'; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="styl.css"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>絶対!禁煙!!</title> </head> <body> <div class="all"> <header> <!--===header===--> <div class="header"> <div class="title"> <h1><img src="image_folder/No_Smoking.png" alt="絶対!禁煙!!"></h1> </div> <div class="new"> <p> <a href="join/new_log.php">新規登録はこちら</a> </p> </div> </div> </header> <!-- center --> <h2> 『禁煙』で人生を大きく変えましょう </h2> <P class="challenge"> 30日禁煙チャレンジ </P> <div> <!--actionは空にしてphpで入力情報を真偽する --> <form action="" method="POST"> <div class="form"> <p class="name">お名前:</p> <input type="text" name="name" value="<?php echo(htmlspecialchars($_POST['name'])) ;?>"><br> <?php if($_POST['name']==='blank'):?> <p class="error">正しい名前とパスワードを入れてください</p> <?php endif;?> <p class="password">パスワード:</p> <input type="password" name="passwoed" value="<?php echo(htmlspecialchars($_POST['password']));?>"><br><br> <?php if($error['login']==='failed'):?> <p class="error">ログインに失敗しました</p> <?php endif;?> </div> <br> <br> <input type="submit" value="ログイン" name=""> </form> </div> </div> </body> </html>

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

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

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

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

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

m.ts10806

2020/11/03 20:29

findとかokとか「アプリの流れ」に出てこないプログラムがあります。 あと、単なる「自身の命名」なので本来は影響ないのですけど、「connect」ですし、細かいところで雑にやってないか気にはなります。
退会済みユーザー

退会済みユーザー

2020/11/03 23:00

何が問題なのでしょうか?(どこまで切り分けが進んでいます?) (余談)参考書が古いようです。今どきではない実装がいくつも見えるので、本件はちゃんと追いかけた方が良いですが、最終的には作り直した方がよさそうです。
higa_yomityu

2020/11/07 15:38

findやokに関する問題修正しました。 切り分けの仕方も分かりません。 ちなみに今どきではない実装はどのようなものですか?今回提示したソースコードのどの部分に当たりますか?
退会済みユーザー

退会済みユーザー

2020/11/07 23:35

まずは質問を整理してください。 どのスクリプトがどういった条件のもとどこまで実行されて、止まってしまう場合はどういったエラーメッセージが発生しているか?等を記述しないと回答しにくいです。 > ちなみに今どきではない実装はどのようなものですか? 一番わかりやすいのは、パスワードを生で保存してるとかですね。最近はハッシュとして保存する(php にはそれ用の関数が用意されている)ので。
guest

回答1

0

自己解決

目的の動作をするために必要な構文を一つ一つコメントアウトしながらチェックすると、
記述は何も変えていないのに目的の動作をするようになった。
エラーを解決したというよりも勝手にエラーが無くなった。

投稿2020/11/16 23:42

higa_yomityu

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問