• 締切済み

住所録を作りたい

『MySQL入門以前』という本をみながら住所録をつくっています。 1、htmlファイル データ登録画面用 ↓ 2、phpファイル データをMySQLデータベースに書き込み ↓ 3、phpファイル MySQLのテーブルから全体を読み出し の3つのファイルから構成しています。 データ登録画面で、全角文字『愛知県』をいれると データベースに新しいデータが追加されません。 半角英数字abcや123なら、新しいデータが追加されます。 どうしたら全角文字も対応させられるのでしょうか。 ファイルの一部 <form action="touroku.php" method="post"> <p>氏名:<input type="text" name="simei" size="40"></p> <p>郵便番号:<input type="text" name="yubin1" size="5">-<input type="text" name="yubin2" size="8"></p> <p>住所1:<input type="text" name="jusho1" size="50"></p> <p><input type="submit" value="登録"> <input type="reset" value="リセット"></p> </form> MySQL 5.0 PHP 5.2.5.5 apache 2.0.59 Windowes XP

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

取り急ぎサンプルを <?php mb_language('ja');  // 不要でも入れておく習慣を mb_internal_encoding('EUC-JP');  //  同上 extract($_POST);  // 危ないのでextractを使うのはやめましょう・・ mysql_connect("localhost","root","pass"); mysql_select_db("lesson"); $sql = "set names ujis";  // この行追加 mysql_query($sql) or die("set names abort : " . mysql_error());  //  同上 $kyou = date("y-m-d");  // DB側の定義がわかりませんが「登録日時」のセットはDBに任せては? $sql = "insert into jushoroku " .     "values(0,'" .     mysql_real_escape_string($kyou) . "','" .  // mysql_real_escape_stringを使うこと(以下同様)     mysql_real_escape_string($simei) . "','" .     mysql_real_escape_string($yubin1) . "','" .     mysql_real_escape_string($yubin2) . "','" .     mysql_real_escape_string($jusho1) . "','" .     mysql_real_escape_string($jusho2) . "','" .     mysql_real_escape_string($denwa) . "','" .     mysql_real_escape_string($fax) . "','" .     mysql_real_escape_string($keitai) . "','" .     mysql_real_escape_string($meruado) . "','" .     mysql_real_escape_string($biko) . "')"; mysql_query($sql) or die("sql abort : " . mysql_error() . ", SQL = " . $sql);  // この行書き替え ?> 整形のため2バイト空白があるのでコピペ時は要注意。なお未検証なので、文法ミスやtypoがあったら適宜修正してください。 気になったのはextractで展開している部分(セキュリティ的にマズイです)や今日の日付をわざわざphp側でセットしている部分ですかね。基本的にextractで展開せず、ひとつひとつ$_POSTを使うか、$_POSTからセットしましょう。日付はSQL文にMySQLの関数を書けばいいと思いますが、date()だけでよかったかどうか失念したので今回はパスです(汗

usabitti
質問者

お礼

回答ありがとうございます。

usabitti
質問者

補足

回答ありがとうございます。 データベースに新しいデータが追加されるようになりました。 ありがとうございます! しかし、文字化けは直りませんでした。全角文字をいれると「?????」と表示されてしまいます。 もう一つphpファイルがあります。 (jushorokuテーブルを読み出すファイルです。) <?php mb_language('ja'); mb_internal_encoding('EUC-JP'); mysql_connect("localhost","root","pass"); mysql_select_db("lesson"); $sql = "set names ujis"; $sql = "select * from jushoroku"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0) { echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo "<br />"; echo $row["simei"]; echo " "; echo $row["yubin1"]; echo "-"; echo $row["yubin2"]; echo " "; echo $row["jusho1"]; echo $row["jusho2"]; echo "<br />TEL "; echo $row["denwa"]; echo " FAX "; echo $row["fax"]; echo " CELL "; echo $row["keitai"]; echo " MAIL "; echo $row["meruado"]; echo "<br />"; echo $row["biko"]; echo "</p><hr />"; } } ?>

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

・MySQLの文字コード ・例示されたhtmlファイルの文字コード ・phpスクリプトの文字コード(スクリプトに「mb_internal_encoding」は書かれていますよね?) ・登録するときのSQL文の組み立て部分のソース をお願いします。 またmysql_query()の実行結果は確認されていますか? #今回は無関係ですが、MySQLへ接続したあとで「set names」をしていますか?

usabitti
質問者

お礼

回答ありがとうございます。補足を追加しました。

usabitti
質問者

補足

回答ありがとうございます。 ・MySQLの文字コードという存在すら知らなかったです(汗 よく分かりませんがMySQLで show variables like "char%";といれたところ下のように表示されました。 character_set_client │ utf8 character_set_connection │ utf8 character_set_database │ sjis character_set_filesytem │ binary character_set_results │ utf8 character_set_sever │ sjis character_set_system │ utf8 >#今回は無関係ですが、MySQLへ接続したあとで「set names」をしていますか? これもしていませんでした。 ・htmlファイルの文字コード euc-jpです。 ・phpスクリプトの文字コード mb_internal_encodingは書いていません(汗 euc-jpで保存すればいいものと思っていました。 ・登録するときのSQL文の組み立て部分のソース すみません。どこの部分かよく分からないです。 下は登録用PHPファイルのbody内です。 <?php extract($_POST); mysql_connect("localhost","root","pass"); mysql_select_db("lesson"); $kyou = date("y-m-d"); $sql = "insert into jushoroku values(0,'$kyou','$simei','$yubin1','$yubin2','$jusho1','$jusho2','$denwa','$fax','$keitai','$meruado','$biko')"; mysql_query($sql); ?> >またmysql_query()の実行結果は確認されていますか? 確認していません。 どのようにやればいいのでしょうか。

関連するQ&A