前提・実現したいこと
アカウント設定画面にて使用者IDの更新処理を行いたい。
会員管理TBに会員IDを更新後、関連あるお問い合わせ履歴TBは会員管理TBを参照して、会員IDを更新処理を行います。
使用者IDの更新な機能を実装中に以下のエラーメッセージが発生しました。
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\PHP\pleiades\xampp\htdocs\test_mailform\PHPsouce\accountSetting.php on line 63 Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\PHP\pleiades\xampp\htdocs\test_mailform\PHPsouce\accountSetting.php on line 73
該当のソースコード
アカウント設定画面
PHP
1<?php 2session_start(); 3require ('../dbconnect.php'); 4require ('../PHPsouce/accountSetting.php'); 5 6?> 7<!DOCTYPE html> 8<html lang="ja"> 9<head> 10 <meta charset = "utf-8"> 11 <title>メールフォーム</title> 12</head> 13<body> 14 <div class = "all"> 15 <div class = "header"></div> 16 <div class = "header_title"> 17 <h1>メールフォーム</h1> 18 </div> 19 <div style="text-align: right"><a href="../logout.php">ログアウト</a></div> 20 <div class = "content"> 21 <ul> 22 <li><a href="http://s-yamauchi.heteml.net/mbms_version1/top.php">TOP</a></li> 23 <li><a href="javascript:window.open('http://s-yamauchi.heteml.net/mbms_version1/form/index.php','お問い合わせ','width=700, height=1080, menubar=no, toolbar=no, scrollbars=yes');">入力フォーム</a></li> 24 <li><a href="http://s-yamauchi.heteml.net/mbms_version1/accountSetting/index.php">アカウント設定</a></li> 25 </ul> 26 </div> 27 <div class = "main"> 28 <div class = "main_title"> 29 <p>使用者ID、またはパスワード変更する際、以下のフォーム欄を入力し、最後「変更」ボタンを押下して下さい。</p> 30 <p>変更したい部分だけを入力してください。</p> 31 </div> 32 <div class = "main_part"> 33 <form action="" method="post"> 34 <dl> 35 <dt>使用者ID</dt> 36 <?php if (array_key_exists('change',$_POST)):?> 37 <?php if (array_key_exists('before_id', $error)):?> 38 <?php if ($error['before_id'] == 'false'):?> 39 <p class="error">* ログイン中使用者IDとは一致していません。</p> 40 <?php endif; ?> 41 <?php endif; ?> 42 <?php if (array_key_exists('after_id', $error)):?> 43 <?php if ($error['after_id'] == 'double'):?> 44 <p class="error">* 入力した使用者IDは既に利用されています。</p> 45 <?php endif;?> 46 <?php endif;?> 47 <?php if (array_key_exists('check_id',$error)):?> 48 <?php if ($error['check_id'] == 'false'):?> 49 <p class="error">* 入力した使用者IDが一致していません。</p> 50 <?php endif; ?> 51 <?php endif; ?> 52 <?php endif; ?> 53 <dd> 54 <p>現在の使用者ID</p> 55 <input type = "text" name = "before_id" size="35" maxlength="255" value = ""> 56 <p>新しい使用者ID</p> 57 <input type = "text" name = "after_id" size="35" maxlength="255" value = "" > 58 <p>新しい使用者ID(確認用)</p> 59 <input type = "text" name = "check_id" size="35" maxlength="255" value = "" > 60 <p></p> 61 </dd> 62 <dt>パスワード</dt> 63 <?php if (array_key_exists('change',$_POST)):?> 64 <?php if (array_key_exists('before_password',$_POST)):?> 65 <?php if (array_key_exists('before_password',$error)):?> 66 <?php if ($error['before_password'] == 'false'):?> 67 <p class="error">* 入力した現在のパスワードが間違っています。</p> 68 <?php endif; ?> 69 <?php endif; ?> 70 <?php endif; ?> 71 <?php if (array_key_exists('check_password',$_POST)):?> 72 <?php if (array_key_exists('check_password',$error)):?> 73 <?php if ($error['check_password'] == 'false'):?> 74 <p class="error">* 入力した新しいパスワードが一致していません。</p> 75 <?php endif; ?> 76 <?php endif; ?> 77 <?php endif; ?> 78 <?php endif; ?> 79 <dd> 80 <p>現在のパスワード</p> 81 <input type = "password" name = "before_password" size = "35" maxlength = "255" value = "" > 82 <p>新しいパスワード</p> 83 <input type = "password" name = "after_password" size = "35" maxlength = "255" value = "" > 84 <p>新しいパスワード(確認用)</p> 85 <input type = "password" name = "check_password" size = "35" maxlength = "255" value = "" > 86 <p></p> 87 </dd> 88 </dl> 89 <input type="submit" name = "change" id = "change" value="変更"> 90 </form> 91 </div> 92 </div> 93 </div> 94</body> 95</html>
/PHPSouce/accountSetting.php
PHP
1<?php 2if (!empty($_POST)){ 3 4 //ログイン中会員情報取得sql文 5 $sql1 = sprintf('SELECT member_id as input_id, member_pass as password FROM m_member where member_id = "%s"', 6 mysqli_real_escape_string($db,$_SESSION['member_id']) 7 ); 8 9 //SQL文を実行処理に代入 10 $query1 = mysqli_query($db, $sql1); 11 12 //実行した結果をセット 13 $row1 = mysqli_fetch_assoc($query1); 14 15 //現在使用者ID、または現在のパスワード 16 //現在使用者IDが入力された場合 17 if (!empty($_POST['before_id'])){ 18 19 //入力した値を変数に格納 20 //使用者ID 21 $input_BeforeID = mysqli_real_escape_string($db, $_POST['before_id']); 22 $input_AfterID = mysqli_real_escape_string($db, $_POST['after_id']); 23 $input_CheckID = mysqli_real_escape_string($db, $_POST['check_id']); 24 25 26 //入力チェック 27 //現在の使用者IDとログイン中使用者IDの一致チェック 28 if ($row1['input_id'] != $_POST['before_id']){ 29 $error['before_id'] = 'false'; 30 } 31 32 //新しい使用者IDが入力された場合 33 if ($_POST['after_id'] != '') { 34 35 //重複登録チェック 36 $sql01 = sprintf('SELECT count(*) as cnt FROM m_member WHERE member_id = "%s"',$input_AfterID); 37 $query01 = mysqli_query($db, $sql01); 38 $row01 = mysqli_fetch_assoc($query01); 39 40 if ( $row01 == 1) { 41 $error ['after_id'] = 'double'; 42 } 43 if ( $_POST['after_id'] != $_POST['check_id']) { 44 $error['check_id'] = 'false'; 45 } 46 } 47 48 //エラーがなかった場合、使用者IDの更新を行う 49 if (empty($error['before_id']) && empty($error['check_id']) && empty($error['after_id'])) { 50 51 //更新用変数 52 $UPdate_BeforeID =$input_BeforeID; 53 $UPdate_AfterID =$input_AfterID; 54 55 //会員情報Tbを更新 56 //使用者IDの更新SQL文を用意 57 $sql2 = sprintf('UPDATE m_member SET member_id = "%s" WHERE member_id = "%s"', $UPdate_BeforeID,$UPdate_AfterID); 58 59 //SQL文を実行処理に代入 60 $query2 = mysqli_query($db, $sql2); 61 62 //実行した結果をセット 63 $row2 = mysqli_fetch_assoc($query2); 64 65 //申込履歴TB更新 66 //申込履歴一覧更新SQL文を用意 67 $sql4 = sprintf('UPDATE h_form h SET h.member_id = ( SELECT member_id FROM m_member m where m.member_id = "%s") WHERE EXISTS ( SELECT 1 FROM m_member mm WHERE mm.member_name = h.member_nm )',$input_AfterID); 68 69 //SQL文を実行処理に代入 70 $query4 = mysqli_query($db, $sql4); 71 72 //実行した結果をセット 73 $row4 = mysqli_fetch_assoc($query4); 74 75 } 76 } 77 78 //現在のパスワードが入力された場合 79 if (!empty($_POST['before_password'])) { 80 81 //会員IDを変数に格納 82 $updatePass_memberID = mysqli_real_escape_string($db,$_SESSION['member_id']); 83 84 //入力したパスワードを変数に格納 85 $input_BeforePass = mysqli_real_escape_string($db, sha1($_POST['before_password'])); 86 87 88 //パスワード桁数用 89 $input_AfterPassLen = strlen($_POST['after_password']); 90 $input_CheckPassLen = strlen($_POST['check_password']); 91 92 //登録された現在パスワードと一致するかを確認 93 if ($input_BeforePass != $row1['password']) { 94 $error['before_password'] = 'false'; 95 } 96 97 //新しいパスワードと新しいパスワード(確認用)の桁数チェック 98 if ($input_AfterPassLen <4){ 99 $error['after_password'] = 'length'; 100 } 101 if ($input_CheckPassLen<4){ 102 $error['check_password'] = 'length'; 103 } 104 105 //新しいパスワードと新しいパスワード(確認用)一致チェック 106 if ($_POST['after_password'] != $_POST['check_password']) { 107 $error['check_password'] = 'false'; 108 } 109 110 //エラーがなかった場合、パスワードの更新処理を行う 111 if ((empty($error['before_password'])) && (empty($error['after_password'])) && (empty($error['check_password']))) { 112 113 //更新用暗号化パスワード 114 $input_AfterPassMask = mysqli_real_escape_string($db, sha1($_POST['after_password'])); 115 116 //パスワードの更新SQL文を用意する 117 $sql3 = sprintf('UPDATE m_member SET member_pass = "%s" WHERE member_id = "%s"',$input_AfterPassMask,$updatePass_memberID); 118 119 //SQL文を実行処理に代入 120 $query3 = mysqli_query($db, $sql3) or die (mysqli_error($db)); 121 122 //実行した結果をセット 123 $row3 = mysqli_fetch_assoc($query3); 124 125 126 //アカウント設定変更完了画面へ遷移 127 header('Location: complete.php'); 128 exit; 129 } 130 } 131} 132?>
試したこと
代入する引数を事前に変数宣言を行う。
$input_BeforeID = mysqli_real_escape_string($db, $_POST['before_id']);
$input_AfterID = mysqli_real_escape_string($db, $_POST['after_id']);
$input_CheckID = mysqli_real_escape_string($db, $_POST['check_id']);
補足情報(FW/ツールのバージョンなど)
Eclipse(4.4.2)
XAMPP(3.2.1)
Windows 10
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。