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

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

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

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

HTML

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

Q&A

解決済

3回答

15365閲覧

フォームの値が取得できない($POST_が空になってしまう)

uchida_yuma

総合スコア44

PHP

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

HTML

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

0グッド

0クリップ

投稿2016/08/18 00:47

お世話になります。phpでhtmlフォームから値を取得し、MySQLにUPDATEするプログラムを作成しています。
具体的には会員登録者のパスワード変更です。

今回お聞きしたいのはフォームから新しいパスワードを取得した際に、なぜか空になってしまう原因が知りたいです。
var_dumpでみるとstring(0)""になっています。

メールアドレスをユニークキーとし、現在のパスワードと新しいパスワードを入力します。その後、フォームのエラーチェックを行い、現在のパスワードが正しければ新しいパスワードに更新するという動きを期待して下のプログラムを組みました。
しかし、新しいパスワードが空になってしまうのでエラーチェックに引っかかります。

<?php //データベース接続 require($_SERVER["DOCUMENT_ROOT"]. '/library/dbc.php'); require($_SERVER["DOCUMENT_ROOT"]. '/function/functions.php'); //クッキーに値があればマイページへ if(!isset($_COOKIE['email'])){ header("Location: login.php"); } //ログインボタンが押された場合 if (!empty($_POST['submit'])) {//ログインボタンを押した時 //ユーザID、パスワードがの入力されているかチェック if ($_POST['email'] == '') { $error['email'] = "blank"; }else{ $error['email'] = ''; } if ($_POST['pass'] == '') { $error['pass'] = "blank"; }else{ $error['pass'] = ''; } $length = strlen($_POST['new_pass']); switch (TRUE) { case $_POST['new_pass'] = '': $error['new_pass'] = 'blank'; break; case ($length < 6): $error['new_pass'] = 'strlen'; break; case ($_POST['new_pass'] !== $_POST['confirm']): $error['new_pass'] = 'dif'; break; default: $error['new_pass'] = ''; break; } /*if ($_POST['new_pass'] == '') { $error['new_pass'] = "blank"; }elseif(strlen($_POST['new_pass']) < 6){ $error['new_pass'] = 'strlen'; }else{ $error['new_pass'] = ''; } if ($_POST['new_pass'] !=== $_POST['confirm']) { $error['new_pass'] = "anmatch"; }else{ $error['new_pass'] = ''; }*/ if ($_POST['confirm'] == '') { $error['confirm'] = "blank"; }else{ $error['confirm'] = ''; } if(empty($error)){ $email = $_POST['email']; $pass = $_POST['pass']; $stmt = $pdo -> prepare("SELECT * FROM human WHERE email=:email"); $stmt -> bindValue(':email', $email, PDO::PARAM_STR); $stmt -> execute(); $data = $stmt -> fetch(); //現在のパスワードを照合 if(password_verify($_POST['pass'], $data['password_hash'])) { //新しいパスワードにアップデート $password_hash = password_hash($new_pass, PASSWORD_DEFAULT); $stmt = $pdo -> prepare("UPDATE human SET password_hash =:password_hash WHERE email = :email"); $stmt-> bindParam(':password_hash', $password_hash, PDO::PARAM_STR); $stmt-> bindParam(':email', $email, PDO::PARAM_STR); $stmt-> execute(); $pdo = NULL; }$error['pass'] = "anmatch";//不一致時のエラー }var_dump($_POST['new_pass']); //if($error == '')最初のエラーチェック }else{ $_POST['email'] = ''; $_POST['pass'] = ''; $_POST['new_pass'] = ''; $_POST['confirm'] = ''; $error['email'] = ''; $error['pass'] = ''; $error['new_pass'] = ''; $error['confirm'] = ''; } ?> <!DOCTYPE html> <?php include($_SERVER['DOCUMENT_ROOT'] . '/parts/header.php'); ?> <body class="login"> <div class="container"> <div class="row"> <!--カラム--> <div class="col-xs-12 col-sm-offset-2 col-md-offset-3 "> <h1>パスワード変更</h1> <p>メールアドレスとパスワードを入力してください。</p> <form action="" method="post"> <dl> <dt>メールアドレス</dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php echo h($_POST['email']); ?>"> <?php if($error['email'] == 'blank'): ?> <p><font class="red">* メールアドレスを入力してください</font></p> <?php endif; ?> </dd> <dt>現在のパスワード</dt> <dd> <input type="password" name="pass" size="20" maxlength="255" value="<?php echo h($_POST['pass']); ?>"> <?php if($error['pass'] == 'blank'): ?> <p><font class="red">* パスワードを入力してください</font></p> <?php endif; ?> <?php if($error['pass'] == 'anmatch'): ?> <p><font class="red">* パスワードとメールアドレスが一致しません</font></p> <?php endif; ?> <dt>新しいパスワード</dt> <dd> <input type="password" name="new_pass" size="20" maxlength="255" value="<?php echo h($_POST['new_pass']); ?>"> <?php if($error['new_pass'] == 'blank'): ?> <p><font class="red">* パスワードを入力してください</font></p> <?php endif; ?> <?php if($error['new_pass'] == 'strlen'): ?> <p><font class="red">* パスワードは6文字以上に設定してください</font></p> <?php endif; ?> <?php if($error['new_pass'] == 'dif'): ?> <p><font class="red">* パスワードが一致しません</font></p> <?php endif; ?> </dd> <dt>新しいパスワード(確認用)</dt> <dd> <input type="password" name="confirm" size="20" maxlength="255" value="<?php echo h($_POST['confirm']); ?>"> <?php if($error['confirm'] == 'blank'): ?> <p><font class="red">* パスワードを入力してください</font></p> <?php endif; ?> </dl> <input type="submit" id="submit" name="submit" value="パスワードを変更"> </form> </div><!--メイン--> </div><!--class row --> </div><!--container-->

また、POSTした際に問題のフォームだけ値が保持されませんが、これも関係あるのでしょうか?
POST前
POST後
以上になります。よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

case $_POST['new_pass'] = '':

代入になってますが大丈夫?

投稿2016/08/18 01:13

yambejp

総合スコア114742

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

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

0

ここ、=ではなく==では。

PHP

1 switch (TRUE) { 2 case $_POST['new_pass'] = '':

PHP

1 switch (TRUE) { 2 case $_POST['new_pass'] == '':

投稿2016/08/18 01:06

編集2016/08/18 01:07
ttyp03

総合スコア16998

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

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

uchida_yuma

2016/08/18 01:14

仰るとおり==で動きました! せっかくご回答いただいたのにベストアンサーにできず申し訳有りません。
guest

0

ベストアンサー

このcase文、比較ではなく代入になっていませんか?

switch (TRUE) { case $_POST['new_pass'] = '':

投稿2016/08/18 01:06

flied_onion

総合スコア2604

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

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

uchida_yuma

2016/08/18 01:13

仰るとおりでした。 ==に直すと無事取得できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問