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

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

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

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

Q&A

解決済

2回答

835閲覧

PHPフォームから取得した値を出力すると謎の半角?全角?のスペースが現れる

issiyrun

総合スコア17

PHP

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

0グッド

0クリップ

投稿2019/08/25 03:44

回答よろしくお願いします。

今現在フォームでユーザ登録情報の変更を行なっています。
DBから取得しているのですがそこには数値や文字以外入っておりません。
更新を行うたびに末尾に半角のスペースが現れます。

どう改善すればよろしいでしょうか??
以下のPHPファイル内に記述してある通り
preg_replaceで1度目は削除できるのですが再度変更を行うと再び半角のスペースが出力されます。

PHP

1<?php 2 3require('function.php'); 4 5debug('「「「「「「「「「「「「「「「「「「'); 6debug('プロフィール編集'); 7debug('「「「「「「「「「「「「「「「「「「'); 8debugLogStart(); 9 10require('auth.php'); 11 12 13//ログイン時に取得したuser_id 14$dbFormData = getUser($_SESSION['user_id']); 15 16debug('取得したユーザID:'.print_r($dbFormData,true)); 17 18 19if(!empty($_POST)){ 20 debug('POST送信があります。'); 21 debug('POST情報:'.print_r($_POST,true)); 22 23 $username = $_POST['username']; 24 $age = $_POST['age']; 25 $zip = (!empty($_POST['zip'])) ? $_POST['zip'] : 0 ; 26 $email = $_POST['email']; 27 $tel = $_POST['tel']; 28 29 30//DBの情報と入力値が異なる場合にヴァリデーション 31if($dbFormData['username'] !== $username){ 32 //名前の最大入力文字数 33 validMaxLen($username, 'username'); 34} 35 36if ($dbFormData['age'] !== $age){ 37 //年齢の最大文字数 38 validMaxLen($age, 'age'); 39 //年齢の入力文字 40 validNumber($age, 'age'); 41 42} 43 44if((int)$dbFormData['zip'] !== $zip){ 45 //住所の形式 46 validZip($zip, 'zip'); 47} 48 49if((int)$dbFormData['tel'] !== $tel){ 50 //電話番号の形式 51 validTel($tel,'tel'); 52} 53 54 55if($dbFormData['email'] !== $email){ 56 validMaxLen($email, 'email'); 57 if(empty($err_msg['email'])){ 58 59 validEmailDup($email); 60 } 61 //メールの形式チェック 62 validEmail($email, 'email'); 63} 64 validRequired($email, 'email'); 65 66 67if(empty($err_msg)){ 68 debug('バリデーションOKです'); 69 70 try { 71 72$dbh = dbConnect(); 73 74 $sql = "UPDATE users SET username = :u_name,age =:age zip = :zip, email = :email , tel = :tel 75 WHERE id = :u_id"; 76 77 $data = array(':u_name' => $username, 'age' => $age,':zip' => $zip , ':email' => $email , ':tel' => $tel, ':u_id' =>$dbFormData['id'] ); 78 79 80 $stmt = queryPost($dbh, $sql , $data); 81 82 83 84 85 86 if($stmt){ 87 debug('クエリ成功'); 88 debug('マイページへ遷移します'); 89 header('Location:mypage.php'); 90 }else{ 91 debug('クエリに失敗しました'); 92 $err_msg['common'] = MSG08; 93 } 94 95}catch (Eception $e) { 96 error_log('エラー発生:'.$e->getMessage()); 97 $err_msg['common'] = MSG07; 98 99 } 100} 101} 102 103 104 $dbname = getFormData('username'); 105 $dbname = preg_replace("/( | )/", "", $dbname ); 106 $dbage = getFormData('age'); 107 $dbage = preg_replace("/( | )/", "", $dbage ); 108 $dbzip = getFormData('zip'); 109 $dbzip = preg_replace("/( | )/", "", $dbzip ); 110 $dbemail = getFormData('email'); 111 $dbtel = getFormData('tel'); 112 debug('画面表示終了'); 113 ?> 114 115<?php 116 117$siteTitle = "プロフィール編集"; 118require('head.php'); 119?> 120 121<?php 122require('header.php'); 123?> 124 125 126<div id="contents"> 127 <div class="site-width"> 128 <h1>プロフィール編集</h1> 129 </div> 130</div> 131 132 133 134<section id="main"> 135 <div class="form-container"> 136 <form action="" method="post" class="form"> 137 <div class="area-message"> 138 <?php if(!empty($err_msg['common'])) echo $err_msg['common'];?> 139 </div> 140 <label class="<?php if(!empty($err_msg['name'])) echo 'err' ?>">名前 141 <input type="text" name="username" value="<?php echo $dbname ?>"> 142 </label> 143 <div class="area-msg"> 144 <?php if(!empty($err_msg['username'])) echo $err_msg['username'] ?> 145 </div> 146 147 <label class="<?php if(!empty($err_msg['age'])) echo 'err' ?>">年齢 148 <input type="text" name="age" value="<?php echo $dbage ?> "> 149 </label> 150 <div class="area-msg"> 151 <?php if(!empty($err_msg['age'])) echo $err_msg['age'] ?> 152 </div> 153 <?php var_dump($_POST['age']); 154 var_dump($dbname); 155 var_dump($age); 156 var_dump($zip); 157 var_dump($email); 158 var_dump($tel); 159 160 161 162?> 163 164 165 <label class="<?php if(!empty($err_msg['zip'])) echo 'err' ?>">郵便番号 166 <span style="font-size:12px; margin-left:15px;">*ハイフンなしで記入ください</span> 167 <input type="text" name="zip" value=" 168 <?php echo $dbzip ?> "> 169 </label> 170 <div class="area-msg"> 171 <?php if(!empty($err_msg['zip'])) echo $err_msg['zip'] ;?> 172 </div> 173 174 <label class="<?php if(!empty($err_msg['email'])) echo 'err' ?>">email<span style="font-size:12px; margin-left:15px;">*emailの形式で記入ください</span> 175 <input type="text" name="email" value="<?php echo $dbemail ?> "> 176 </label> 177 <div class="area-msg"> 178 <?php if(!empty($err_msg['email'])) echo $err_msg['email'] ?> 179 </div> 180 181 182 <label class="<?php if(!empty($err_msg['tel'])) echo 'err' ?>">TEL<span style="font-size:12px; margin-left:15px;">*ハイフンなしで記入ください</span> 183 <input type="text" name="tel" value="<?php echo $dbtel ?>"> 184 </label> 185 <div class="area-msg"> 186 <?php if(!empty($err_msg['tel'])) echo $err_msg['tel'] ?> 187 </div> 188 189 <input type="submit" name="submit" value="変更する"> 190 </form> 191 </div> 192</section> 193 194<? 195 require('footer.php'); 196 197 ?> 198 199

ご回答いただけると幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

全部みた訳じゃないですけど

value="<?php echo $dbage ?> "

半角スペース後ろにありますよ。

Webで画面出力を伴うプログラムの場合は、必ずブラウザ「ソースを表示」で出力結果を確認してください。

投稿2019/08/25 03:46

編集2019/08/25 03:49
m.ts10806

総合スコア80765

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

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

issiyrun

2019/08/25 04:29

valueの値は" "の中でしたね。 非常に勉強になりました。 そういった細かいところも精査できるように努めてまいります。 助かりました。ありがとうございます。
m.ts10806

2019/08/25 04:30

ブラウザ出力結果を確認する癖をつければそれだけで自己解決できることは多いですよ。
issiyrun

2019/08/25 04:35

承知しました。常に確認するようしますね。ありがとうございます
guest

0

php

1関数をまとめたページはこちらです。 2 3```php 4 5function.php 6 7<?php 8//ログを取るか 9ini_set('log_errors','On'); 10//どのファイルに出力するか 11ini_set('error_log','php.log'); 12 13//デバッグ 14 15$debug_flg = true; 16 17function debug($str){ 18global $debug_flg; 19if(!empty($debug_flg)){ 20 error_log('デバッグ:'.$str); 21} 22} 23 24 25session_save_path("/var/tmp/"); 26 27ini_set('session.gc_maxlifetime', 60*60*24*30); 28ini_set('session.cookie_lifetime ', 60*60*24*30); 29session_start(); 30session_regenerate_id(); 31 32function debugLogStart(){ 33 debug('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>画面表示処理開始'); 34 debug('セッション変数の中身:'.print_r($_SESSION,true)); 35 debug('現在日時タイムスタンプ'.time()); 36 if(!empty($_SESSION['login_date']) && 37 !empty($_SESSION['login_limit'])){ 38 debug('ログイン期限日時タイムスタンプ:'.($_SESSION['login_date'] + $_SESSION['login_limit'])); 39 } 40} 41 42?> 43<?php 44 45ini_set('log_errors','on'); 46ini_set('error_log','php.log'); 47 48define('MSG01','入力必須です'); 49define('MSG02','メールアドレスの形式で入力してください'); 50define('MSG03','パスワード(再入力)があっていません'); 51define('MSG04','半角英数字のみで記入してください'); 52define('MSG05','6文字以上で記入してください'); 53define('MSG06','255文字以内で入力してください'); 54define('MSG07','エラーが発生しました'); 55define('MSG08','そのEmailは既に存在しています'); 56define('MSG09','メールアドレスまたはパスワードが違います'); 57define('MSG10','電話番号の形式が違います'); 58define('MSG11','番号の形式が違います'); 59 60 61 62$err_msg =array(); 63 64function validRequired($str, $key){ 65 if(empty($str)){ 66 global $err_msg; 67 $err_msg[$key] = MSG01; 68 } 69} 70 71function validEmail($str, $key){ 72 if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/",$str)){ 73 global $err_msg; 74 $err_msg[$key] = MSG02; 75 } 76} 77 78function validEmailDup($email){ 79 global $err_msg; 80 81 try{ 82 //DBに接続 83 $dbh = dbConnect(); 84 85 //SQL文作成 86 $sql = 'SELECT count(*) FROM users WHERE email = :email AND delete_flg = 0'; 87 $data = array(':email' => $email); 88 //クエリ実行 89 $stmt = queryPost($dbh, $sql , $data); 90 //クエリ結果の値を取得 91 $result = $stmt->fetch(PDO::FETCH_ASSOC); 92 93 if(!empty(array_shift($result))){ 94 $err_msg['email'] = MSG08; 95 } 96 97 }catch (Exception $e){ 98 error_log('エラー発生:'.$e->getMessage()); 99 $err_msg['common'] = MSG07; 100 } 101 } 102 103 function validMatch($str1, $str2, $key){ 104 if($str1 !== $str2){ 105 global $err_msg; 106 $err_msg[$key] = MSG03; 107 108 } 109 } 110 111 function validMinLen($str,$key,$min = 6){ 112 if(mb_strlen($str) < $min){ 113 global $err_msg; 114 $err_msg[$key] = MSG05; 115 } 116 } 117 118 function validMaxLen($str,$key,$max = 255){ 119 if(mb_strlen($str) > $max){ 120 global $err_msg; 121 $err_msg[$key] = MSG06; 122 } 123 } 124 125 function validHalf($str,$key){ 126 if(!preg_match("/^[a-zA-Z0-9]+$/",$str)){ 127 global $err_msg; 128 $err_msg[$key] = MSG04; 129 } 130 } 131 132function validTel($str, $key){ 133 if(!preg_match("/0\d{1,4}\d{1,4}\d{4}/", $str)){ 134 global $err_msg; 135 $err_msg[$key] = MSG10; 136 } 137} 138 function validZip($str, $key){ 139 if(!preg_match("/^\d{7}$/",$str)){ 140 global $err_msg; 141 $err_msg[$key] = MSG11; 142 } 143 } 144 145 function validNumber($str,$key){ 146 if(!preg_match("/^[0-9]+$/", $str)){ 147 global $err_msg; 148 $err_msg[$key] = MSG11; 149 } 150 } 151 152 //DBに接続するための関数 153 function dbConnect(){ 154 155 $dsn ="mysql:dbname=book;host=localhost;charset=utf8"; 156 $user = "root"; 157 $pass = "root"; 158 $options =array( 159 // SQL実行失敗時にはエラーコードのみ設定 160 PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, 161 // デフォルトフェッチモードを連想配列形式に設定 162 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 163 // バッファードクエリを使う(一度に結果セットをすべて取得し、サーバー負荷を軽減) 164 // SELECTで得た結果に対してもrowCountメソッドを使えるようにする 165 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, 166 ); 167 168 $dbh = new PDO($dsn,$user,$pass,$options); 169 return $dbh; 170 } 171 172 function queryPost($dbh,$sql,$data){ 173 $stmt = $dbh->prepare($sql); 174 175 $stmt->execute($data); 176 return $stmt; 177 } 178 179 180function getUser($u_id){ 181 debug('ユーザー情報を取得します'); 182 183 try{ 184 185 $dbh = dbConnect(); 186 187 $sql = 'SELECT * FROM users WHERE id = :u_id'; 188 189 $data =array(':u_id' => $u_id); 190 191 $stmt = queryPost($dbh,$sql,$data); 192 193 if($stmt){ 194 debug('クエリ成功'); 195 196 }else{ 197 debug('クエリに失敗'); 198 } 199 200 }catch(Exception $e){ 201 error_log('エラー発生:' .$e->getMessage); 202 } 203 return $stmt->fetch(PDO::FETCH_ASSOC); 204} 205 206 207//フォーム入力保持 208function getFormData($str){ 209 global $dbFormData; 210 if(!empty($dbFormData)){ 211 global $err_msg; 212 if(!empty($err_msg[$str])){ 213 if(isset($_POST[$str])){ 214 215 return $_POST[$str]; 216 217 }else{ 218 return $dbFormData[$str]; 219 } 220 }else{ 221 if(isset($_POST[$str]) && $_POST[$str] !== $dbFormData[$str]){ 222 return $_POST[$str]; 223 }else{ 224 return $dbFormData[$str]; 225 } 226 } 227}else{ 228 if(isset($_POST[$str])){ 229 return $_POST[$str]; 230 } 231 } 232 } 233

投稿2019/08/25 03:45

issiyrun

総合スコア17

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

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

m.ts10806

2019/08/25 03:50 編集

実際に解決策ではないのでしたら回答には投稿しないでください。 質問本文に入りきらないのでしたらGithubなどの外部サービスを利用してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問