

現在PHPを勉強しているのですがどうしてもわからなくなってしまったので
質問をさせて頂きます。
現在自分が作ろうとしているのは
登録フォーム→確認ページ→登録完了ページ(MYSQLに接続)の流れになっております。
その中でチェックボックスでつまずいております。
こちらにそのコードを一部を記載させて頂きます。
どこで困っているかと申しますと、登録フォームから確認ページまでは
複数選択されたチェックボックスを表示されることができたのですが、
確認ページから登録ページに変わる際に文字化けなどをし、
mysqlに接続して登録した際も文字化けになってしまいます。
他にも変数の受け渡しもうまく出来ていないと思います。
自分の中の結論としては確認ページのhiddenあたりが間違ってるのでは
ないかと思ってるのですが何度試してみてもうまくいきません。
大変困っており、誰かご存知の方、もしくはこういう風に変更した方がいいとかありましたらご教授をお願い出来ませんでしょうか?
1,登録フォーム
<tr>
<td>施術(チェックボックス)<br />順番不問</td>
<td>
<span class="checkbox"><input name="sejyutu[]" type="checkbox" value="aaa" />aaa</span>
<span class="checkbox"><input name="sejyutu[]" type="checkbox" value="bbb" />bbb</span>
</td>
</tr>
2,登録確認ページ
$sejyutu = $_POST["sejyutu"];
<?php
if (trim($sejyutu) == "" || !isset($sejyutu)){
echo "施術が選択されておりません。";
$flag_sejyutu=0;
} elseif (empty($sejyutu)){
echo "施術が選択されておりません";
$flag_sejyutu=0;
} else {
if(isset($sejyutu) and count($sejyutu)>0){
$sejyutu_value = "";
for($i=0;$i<count($sejyutu);$i++){
if($i == 0){
$sejyutu_value .= $sejyutu[$i];
} else {
$sejyutu_value .= " " . $sejyutu[$i];
}
}
}
print mb_convert_encoding(trim($sejyutu_value),"sjis","euc-jp") ;
$flag_sejyutu=1;
}
?>
<?php if($flag_sejyutu==1) { ?>
<form action="reg_complete.php" method ="post">
<input type="hidden" name="sejyutu_value[]" value="<?php echo $sejyutu_value; ?>">
}
3,登録完了ページ
$sejyutu = $_POST['sejyutu_value'];
それからmysqlに接続。
No.4ベストアンサー
- 回答日時:
一旦文字コードの確認をした方がよさそうですね。
。空のファイルを作成し、
<?php phpinfo() ?>
と書いて適当な名前で保存してそのファイルへアクセスし
mbstring項の
mbstring.http_input
mbstring.http_output
mbstring.internal_encoding
mbstring.language
このあたりを確認してみてください。
まずはこの部分とphpファイルの保存時の文字コード、phpファイル内のmetaタグでの文字コード指定がうまくいってないと表示がおかしなことになるかと思います。
http://tsuttayo.sytes.net/php/char_trn/index.html
の
php.ini 設定表→php.iniの設定
辺りが参考になるかと思います。
登録確認ページの
if($i == 0){
$sejyutu_value .= urlencode($sejyutu[$i]);
} else {
$sejyutu_value .= "," . urlencode($sejyutu[$i]);
}
を一旦
if($i == 0){
$sejyutu_value .= $sejyutu[$i];
} else {
$sejyutu_value .= "," . $sejyutu[$i];
}
echo $sejyutu_value;exit;
とでもして
受け取った文字列を素直に表示できるようにします。
で、
php.iniのmbstring.~の文字コードを変更
↓
apache再起動
↓
登録確認ページを表示
を行ってみてください。
そちらの環境がわからないので心当たりのあるコードに変えて見て何か変化があればその辺が怪しいということになります。
>print mb_convert_encoding(trim($sejyutu_value),"sjis","euc-jp") ;
こうしないと正常に表示されないということはphpファイル保存とmetaでの指定文字コードはSJISでされているっぽいですね。
もしかしたらphp.iniを触らずに登録フォーム、登録確認ページなどをeucで保存しなおしてmetaでの指定もEUC-JPにしたら正常に表示できるかもしれません・・・。
ご丁寧な回答どうもありがとうございます!
私の方でphp.iniなどを調べたり色々していたのですが、結局
途方に暮れていたのですが、gogo-tea様が最後に申しておりました
metaの変更をしたらうまくいきました!丸二日かけてそこが問題だとは
少々拍子抜けしましたが、ご指摘のおかげで無事に解決することが出来ました。本当にありがとうございます!
No.5
- 回答日時:
質問主さんの文章を読んでいると、
何が問題となっているのか非常にわかりにくいです。
もっと単純化したプログラムを自分で作ってみて
原因を特定されてから質問したほうがいいと思います。
たとえば
単純にフォームから受け取ったデータを表示する、それがうまく言ったらMYSQLにわたすだけの操作をするプログラムでうまくいくかを調べていくなどすることで、原因は特定できると思います。
どこがおかしいのかわからないなら、小分けにしてそれぞれうまくいくか調べるのが常套手段です、まずそれをやられることをお勧めします。
No.3
- 回答日時:
#2です。
urlencodeで日本語文字列をエンコードして渡したら
受け取る側ではurldecodeという関数でデコードしてやります。
3,登録完了ページ
$sejyutu = urldecode($_POST['sejyutu_value']);
var_dump($sejyutu);
でどうでしょうか。
参考URL:http://php.s3.to/man/function.urlencode.html
この回答への補足
ご返答ありがとうございます。
こちらでさっそく調べさせて頂きました。encode,decodeについて勉強になりました!
またこちらで頂きましたように変更をしてみたのですが、
うまくいきませんでした。
現在の状況ですが、
2,登録確認ページ
<?php
if (trim($sejyutu) == "" || !isset($sejyutu)){
echo "施術が選択されておりません。";
$flag_sejyutu=0;
} elseif (empty($sejyutu)){
echo "施術が選択されておりません";
$flag_sejyutu=0;
} else {
if(isset($sejyutu) and count($sejyutu)>0){
$sejyutu_value = "";
for($i=0;$i<count($sejyutu);$i++){
if($i == 0){
$sejyutu_value .= urlencode($sejyutu[$i]);
} else {
$sejyutu_value .= "," . urlencode($sejyutu[$i]);
}
}
}
print mb_convert_encoding(trim($sejyutu_value),"sjis","euc-jp") ;
$flag_sejyutu=1;
}
?>
<?php if($flag_sejyutu==1) { ?>
<form action="reg_complete.php" method ="post">
<input type="hidden" name="sejyutu_value" value="<?php echo $sejyutu_value; ?>">
}
3, 登録完了ページ
$sejyutu = urldecode($_POST['sejyutu_value']);
echo var_dump($sejyutu);
エラー、文字化けに関しては
登録確認ページで チェックボックスの所は依然文字ではなく、
%A5%E9%A5%B8%A5%AA%C7%C8,%A5%B2%A5%EB%A5%DE%A5%CB%A5%A6%A5%E0%B2%B9%C0%F4,%A5%DB%A5%C3%A5%C8%A5%B9%A5%C8%A1%BC%A5%F3
の形になっており、読めません。
変更前(urlencode)を入れる前はチェックボックスの文字は表示されておりました。
また登録完了ページでdecodeをした際、
var_dumpで調べて見たところ表示は
string(40) "・鬣ク・ェヌネ,・イ・・゛・ヒ・ヲ・犂ケタ・・ロ・テ・ネ・ケ・ネ。シ・・
のようになっておりました。
実際になにが原因なのか分からないのですが、いくつか不審点があります。まず一番初めの登録フォームから
<span class="checkbox"><input name="sejyutu[]" type="checkbox" value="aaa" />aaa</span>の形で登録確認ページに渡してるのですが
var_dumpで確認をした所、すでに文字化けしている状況でしたので
print mb_convert_encoding(trim($sejyutu_value),"sjis","euc-jp") ;
で確認ページに表示をさせていました。
この登録フォームからすでに文字化けしているのが問題なのかなと思っておりました。
その他に
登録完了ページで文字化けした表記がそのままmysqlに登録されるのですが、その際なぜか<input...とタグまで登録されております。
これは一体なにが問題でなっているのかが分かりません。
変数の受け渡しで問題があるとしか思えないのですが
どこかが分かりません。
質問や疑問ばかりでも申し訳ございません。。
No.2
- 回答日時:
if($i == 0){
$sejyutu_value .= $sejyutu[$i];
} else {
$sejyutu_value .= " " . $sejyutu[$i];
}
これをみると$sejyutu_valueって文字列ですよね
なのでhiddenのnameはsejyutu_value[]ではなくsejyutu_valueで良いのではないでしょうか。
で、
上述の部分は
if($i == 0){
$sejyutu_value .= urlencode($sejyutu[$i]);
} else {
$sejyutu_value .= "," . urlencode($sejyutu[$i]);
}
のようにして渡して見たらどうでしょうか。
この回答への補足
gogo-tea様
ご返答ありがとうございます。さっそくですが$sejyutu_valueはチェックボックスで選択された文字列になります。hiddenのnameは色々と試しており、
sejyutu_valueもやってみたのですがどうしてもうまくいかず色々と試しておりました。
また
if($i == 0){
$sejyutu_value .= $sejyutu[$i];
} else {
$sejyutu_value .= " " . $sejyutu[$i];
}
の部分を
if($i == 0){
$sejyutu_value .= urlencode($sejyutu[$i]);
} else {
$sejyutu_value .= "," . urlencode($sejyutu[$i]);
}
に変更したところ、
登録確認ページんpチェックボックスで選択された文字列
を表示する所で
%A5%E9%A5%B8%A5%AA%C7%C8,%B4%E4%C8%D7%CD%E1,%A5%B2%A5%EB%A5%DE%A5%CB%A5%A6
このように表示されてしまい、
登録確認ページで
var_dump($_POST["sejyutu_value"];
で確認してみると
string(92) "%A5%E9%A5%B8%A5%AA%C7%C8,%B4%E4%C8%D7%CD%E1,%A5%B2%A5%EB%A5%DE%A5%CB%A5%A6%A5%E0%B2%B9%C0%F4"
このような形になっております。
mysqlのデータベースでも確認しみますと
同じ表記で登録されてしまいます。
もう少しで出来そうな気はするのですが、他に変更をどのようにしていいかわからない状況です。。
No.1
- 回答日時:
こんちは。
>>自分の中の結論としては確認ページのhiddenあたりが間違ってるのでは
では、hiddenの中身を確認してみればよいだけかと思うのですが。。。。
>>文字化けなどをし、
Web関係の文字化けは、大体、文字のコード違いかと個人的には思ってます。
定義してあるファイル自体のコードが違うのか、Web通信を行った際に、通信に適さないコードだったため化けたか。。。
PHP使用者じゃないのであるかどうか分かりませんけど、ASPには、「HTMLEncode」という、HTML通信を行う際に、適したコードに変換して通信を行う処理が存在しますけど、PHPにはどうでしょうか??
この回答への補足
さっそくのご返答ありがとうございます。
hiddenの中身の確認ですが、それは登録完了ページに
変数がちゃんと受け取ってるかどうかの確認ということでしょうか?
もしそうであれば、登録確認ページの
var_dump($_POST["sejyutu_value"];
$sejyutu = $_POST["sejyutu_value"];
で確認をしたのですが、
表示としては
array(1) { [0]=> string(73) "磁失磁蒔蕊縞 雫靆邪赦。ヲ磁軸磁。ヲ酌磁射磁示磁犇嫉実。ヲ>
となってしまいます。
文字化けに関しては
mb_convert_encodingで対処しようとしてるのですが
登録確認ページから登録完了ページに飛ぶ際にうまくいってません。
素人で深く説明できず、申し訳ございません。
となり
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP php ログイン 1 2022/11/01 00:24
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBの値をチェックボックスに反...
-
【PHPチェック】ラジオボタンが...
-
検索時の選択内容を保持する方法
-
PHP ボタンが押されたら処理を...
-
入力フォーム→確認画面→送信画...
-
フォームでのリセットを使う方法
-
PHPの関数実行
-
エラーを元の画面に表示させるには
-
HTMLで前の画面に戻る時、入力...
-
PHPで画像の渡しが上手く行きま...
-
【HTML(PHP?)】複数のフォーム...
-
<input type="hidden" >で配列...
-
PHPで、ボタンを押すと同じペー...
-
phpやmysqlで作る簡易掲示板作...
-
PHP insert文内での、変数の記...
-
選択された値をセッションで保...
-
PHPでURLにジャンプするには?
-
セッションを使わずに遷移先画...
-
フォームにダブルクォーテーシ...
-
VBA で、スペースを含むファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
同じページでフォームデータを...
-
PHPで、ボタンを押すと同じペー...
-
フォームボタンを押すたびに数...
-
フォームへの前回入力値をクリ...
-
DBの値をチェックボックスに反...
-
チェックボックスによる検索
-
HTMLフォームで複数選択のチェ...
-
フォームでのリセットを使う方法
-
エラーを元の画面に表示させるには
-
PHP ボタンが押されたら処理を...
-
チェックボックスの必須項目指定
-
【PHPチェック】ラジオボタンが...
-
POSTやGETの変数をフォーム無し...
-
PHPでクリックするたびに変数を...
-
入力した部分を表示させたまま...
-
ラジオボタンをsessionで使いたい
-
POSTデータのNAME属性をVALUEに...
-
アップロードの際にファイルパス
おすすめ情報