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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1679閲覧

PHPでDBから抽出した値を別のページに持っていきたいが値が表示されない。

red-ehephant

総合スコア12

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/07/26 02:09

編集2019/07/26 06:08

実現したいこと

いつもお世話になっております。

ただいまログイン画面を作っていまして、
ログイン画面でDBから持った来たnameをPOSTで、
ログイン後画面に送り(ようこそnameさん)と表示したいです。

現状

ログイン後画面では(ようこそさん)しか表示されずにいます。

画面

ログイン画面

PHP

1<?php 2 // データベース接続の処理 3 4//loginを押されたら 5if(isset($_POST['login'])){ 6 7 $mail = $_POST['mail']; 8 $pass = $_POST['pass']; 9 10try{ 11 12 //SQL文を準備 13 $sql = "SELECT name FROM web1 WHERE mail = ? AND password = ?"; 14 //インジェクション対策 15 $stmt = $pdo->prepare($sql); 16 //バインドする 17 $stmt->bindValue(1,$mail); 18 $stmt->bindValue(2,$pass); 19 //SQLを実行 20 $stmt->execute(); 21 //1行だけ取り出す 22 $user = $stmt->fetch(); 23 24 echo "$user"; 25 26}catch (PDOException $e){ 27 exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win')); 28} 29 if($mail == null){ 30 $errormessage='※メールアドレスが空白です'; 31 } 32 elseif($pass == null){ 33 $errormessage='※パスワードが空白です'; 34 } 35 elseif($user){ 36 37 $_POST['username'] = $user; 38 39 $pdo = nul; 40 // リダイレクト 41 header("Location: index3.php"); 42 exit(); 43 } 44 else{ 45 $errormessage='※メールアドレスかパスワードが間違えています'; 46 } 47 48 49} 50 51?> 52 53<!DOCTYPE html> 54<html lang="ja"> 55<head> 56<meta charset="utf-8"> 57<title>ログイン画面</title> 58</head> 59<body> 60 61<h1>ログイン</h1> 62 <form method="POST" action=""> 63 <table> 64 <tr> 65 <th>メールアドレス</th> 66 <td><input type="text" name="mail" value="<?=htmlspecialchars($mail);?>"></td> 67 </tr> 68 <tr> 69 <th>パスワード</th> 70 <td><input type="password" name="pass" value=""></td> 71 </tr> 72 <tr> 73 <th><input type="submit" name="login" value="ログイン" ></th> 74 </tr> 75 </table> 76 <span style="color:red;"><?php print htmlspecialchars($errormessage,ENT_QUOTES, "UTF-8"); ?></FONT> 77 </form> 78 79 80</body> 81</html>

ログイン後画面

PHP

1<?php 2 3 $username = $_POST['username']; 4 5?> 6 7<!DOCTYPE html> 8<html lang="ja"> 9<head> 10<meta charset="utf-8"> 11<title>トップページ</title> 12</head> 13<body> 14 15<p>ようこそ<?php print htmlspecialchars($username); ?>さん</p> 16 17</body> 18</html>

自分の思う問題点

echoでSQLを実行した後の$userを表示したが何も表示せれずここが問題だと思ったが調べても分からなかった。
ログインの機能はしっかりと動いています。

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

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

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

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

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

kei344

2019/07/26 02:45

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。後から見た人から見て、現在回答されておられる方の回答が「無いコードに対しての指摘」になり、意味がわからなくなります。
red-ehephant

2019/07/26 03:49

確かにそうですよね。 ご指摘ありがとうございます。 次回以降、慎重に編集します。 $_POSTだったものを$_SESSIONに直しました。
m.ts10806

2019/07/26 05:05

>$_POSTだったものを$_SESSIONに直しました。 そこは「質問のコード」が$_POSTになっていてそのことでついた回答なので、 元のコードはそのまま残しておき、 「その後回答をもとに修正、試してみたコード」として、別途追記されたほうが良いかと思います。 (次回以降ではなく、今からなおしてください)
red-ehephant

2019/07/26 06:10

今直しました。 ありがとうございました。
guest

回答2

0

$user = $stmt->fetch();

assocで取り出していないですが大丈夫ですか?

取り出した$userは$_POSTに格納するのではなく一般に
セッション($_SESSION)に入れて保持します

投稿2019/07/26 02:19

yambejp

総合スコア114779

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

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

red-ehephant

2019/07/26 04:00

ご回答ありがとうございます。 assocについて調べました。 $user = $stmt->fetch(); これだけだとSQLの実行結果を取得出来ないのでしょうか?
yambejp

2019/07/26 04:28

とくに指示しないとカラム名と列番号の両方でデータを取りにいこうとします
red-ehephant

2019/07/26 05:02

確認してみます。ありがとうございます。
guest

0

ベストアンサー

そもそもですがPOST/GETなどの値を上書き、加工するべきではありません

php

1$_POST['username'] = $user;

あくまでフォーム送信時に自動で設定される値です。

逆に言えばフォーム送信によって$_POSTが生成されるため、リダイレクトしても送信することにはなりません。

php

1header("Location: index3.php");

ちなみにリダイレクトしたときのREQUEST_METHODはGETです。
エラー表示をONにすればエラーが表示されるはずです。

「ログインしたときのユーザー情報を保管しておきたい」のが目的であれば
セッションを利用してください。


蛇足:
fontタグはHTML5では廃止された機能です。
spanタグなどに置き換え、装飾はCSSでしましょう。

投稿2019/07/26 02:19

m.ts10806

総合スコア80850

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

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

red-ehephant

2019/07/26 02:39

mts10806さんいつもお世話になっております。 ログを見たときにGETがたくさんあったのは(リダイレクトした時のリクエストメソッドがGET)だったためなのですね。 リクエストメソッドについて調べてみます。 そういうことだったんですね。 POSTが生成される前にリダイレクトしているため送れないのですね。 $_SESSIONで書いてみます。 fontタグについては、今はまだcss書かなくて良いと言われていますのでこのままにさせていただきます。 ご指摘ありがとうございます。
m.ts10806

2019/07/26 02:42

>fontタグについては、今はまだcss書かなくて良いと言われていますのでこのままにさせていただきます。 せめて下記くらいには直しておいたほうが良いです(たぶん忘れます) <span style="color:red;">
red-ehephant

2019/07/26 04:02

直しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問