MySQLでAU携帯にも対応させるための設定

このQ&Aのポイント
  • MySQLで携帯、PC、両方で使えるサイトを構築するための設定方法について紹介します。
  • UTF8で構築したサイトをauブラウザで正しく表示させるためにはどのような工夫が必要でしょうか?
  • MySQLのデフォルト文字コードや接続照合順序、テーブルの文字コードなどの設定について詳しく解説します。
回答を見る
  • ベストアンサー

MySQLでAU携帯にも対応させるための設定

携帯、PC、両方で使えるサイトをMySQLで構築中です。 当初、UTF8で構築していましたが、「auブラウザ、いまだにUTF-8が使えず!」という記事発見したことにより、急遽、EUCに変更しました。(http://symple.jp/113.html) ところが、EUCの場合、漢字がGETコマンドで正しく送信できないことが判明しました。 (FORMタグに accept-charset="euc-jp,us-ascii" を付けても、JIS X0208.1990 の6878文字中、2743文字の文字エンコーディングが正しく検出されず、UTF8と誤認識される。実際にテストで経験済み) http://www-ise3.ist.osaka-u.ac.jp/miura/?PHP%20GET%2FPOST%A5%E1%A5%BD%A5%C3%A5%C9%A4%C7%A4%CE%C6%FC%CB%DC%B8%EC%A4%CE%CA%B8%BB%FA%B2%BD%A4%B1%CB%C9%BB%DF 私が作りたいサイトは日本語で検索できる必要があるため、やはりUTF8で作らなければならないようです。 質問です。 サーバー側はUTF8で作らなければならないようです。 でも、そうすると、「auブラウザ、いまだにUTF-8が使えず!」に引っかかってしまいます。 このようなサイトは決して少なくないと思いますが、UTF8にも関わらずでAU携帯でも問題なく見れるサイトはどのような工夫をされているのでしょうか? ●MySQLサーバーのデフォルト文字コード ●MySQL の接続照合順序:の文字コード ●テーブルの文字コード ●テーブルの接続照合順序:の文字コード ●フォームの文字コード をどう設定しているのでしょうか? またPHPのソースに何かを追加するのでしょうか? 情報提供、宜しくお願い致します。 現在の検索ソースは下記となります。 (県名を漢字で入力し、住所群から対象の住所録を抽出する) search.php <?PHP // サーバーデータベース記録情報接続 require_once '../../config_n_reform.php'; require_once '/usr/share/pear/DB.php'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $db->query('SET NAMES UTF8'); if (PEAR::isError($db)) { die($db->getMessage()); } $sql = 'select * from city_code'; if(isset($_GET['pre_name'])){ $sql = "select * from city_code where pre_name = '" .addslashes($_GET['pre_name'])."'"; } $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['pre_name'].'<br>'); print($row['city_name'].'<br>'); print($row['city_kana'].'<br>'); print($row['kyuu_cho'].'<br>'); } $db->disconnect(); ?> フォーム <form name="form2" action="search.php" method="get"> <input type="text" name="pre_name" size="25"> <input type="submit" name="search" value="検索"><br /> <input value="pre_name検索開始" type="submit" /> </form>

  • MySQL
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

AU(古いやつ?)はフォームをGETで送る時にSJISで送られているようです。 なのでEUCにするくらいならSJISをチョイスした方がいいのかな、と。 結局文字化けとは戦わないといけないですけどね。 僕は業務レベルで全部UTF-8派ですけど客から文句言われた事は一度もないです。 とりあえずUTF-8で作るようですので mb_convert_encoding($_GET['pre_name'],'UTF-8','UTF-8,SJIS,EUC-JP'); これで文字コードを変えてから検索すれば大丈夫です。

tajix14
質問者

お礼

有難うございます。やはり、UTF8でサーバーを作り、フォームはエンコードを付けるものなのですね。勉強になりました。有難うございました。 ソースも参考とさせていただきます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

携帯はSJISベースで行うのが妥当、SQLはUTF8で問題ないです。 検索用にデータを投げる際に、エンコード情報をつけるのが賢明。

tajix14
質問者

お礼

有難うございます。やはり、UTF8でサーバーを作り、フォームはエンコードを付けるものなのですね。勉強になりました。有難うございました。

関連するQ&A

  • Pear + MySQLで検索サイトの作り方

    Pear + MySQLで検索サイトを作っています。 テーブル名 city_code カラム id pre_no pre_code city_no city_name shop tel (ID、都道府県コード、都道府県名、市町村コード、市町村名、店名、TEL) PHP作成は最小限に、URLのリンクで多数の種類の表示が出来るように考えています。 http://hoge.jp/search.php?pre_no=13 東京都の飲食店の表示 http://hoge.jp/search.php?pre_no=14 神奈川県の飲食店の表示 http://hoge.jp/search.php?city_no=13001 千代田区の飲食店の表示 http://hoge.jp/search.php?city_no=14001 横浜市の飲食店の表示 のような感じです。 下記の試作品search.phpでは、全国の全ての登録飲食店を表示してしまいます。 (データベース接続はできています) これをURLでhttp://hoge.jp/search.php?pre_no=13のようにすることにより、検索地域を特定したいのです。(あくまで例: URLで振り分け指定出来ればこの形ではなくても可) データベースサーバーの使用用途の基本中の基本だと思うのですが、素人なものでこんなことで躓いています。何故かWEBにも落ちていません。Pearの本も購入したのですが記載されていません。 どなたかご教授頂けませんでしょうか? 宜しくお願い致します。 ************** search.php ************** <?PHP //config.phpのサーバー基本情報を読みに行く require_once '../../config.php'; require_once '/usr/share/pear/DB.php'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $db->query('SET NAMES ujis'); if (PEAR::isError($db)) { die($db->getMessage()); } $sql = 'select * from city_code'; $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['pre_name'].'<br>'); print($row['city_name'].'<br>'); print($row['shop'].'<br>'); print($row['tel'].'<br>'); } $db->disconnect(); ?>

    • ベストアンサー
    • MySQL
  • PearDBで項目を1回だけ適切に表示するには?

    何度もお問い合わせし申し訳ありません。本日2度目の問い合わせです。 MySQL + PearDBでコンテンツを作っています。 テーブルのカラムは「ID、都道府県名(pre_name)、都道府県ID(pre_no)、市町村名(p_name)、市町村ID(p_no)、会社名(company).....」です。 完成イメージは下記です。 ●ユーザーは都道府県IDをGETする。 ●都道府県名がヘッダーのタイトルに掲載される。 ●指定した都道府県下の市町村の一覧が表示される ●その一覧にあるリンクをクリックすると、市町村内のホテル一覧に飛ぶ そこで作ったのが下のソースです。 ヘッダーでは、GETされた任意のpre_noに基づき、抽出されたpre_nameを1つだけ表示する。 本文では、GETされた任意のpre_noに基づき、抽出された市町村名を1回だけ表示する(その市町村名にはリンクが張られており市町村ごとのホテルページへ飛ぶことが可能) 【結果】 【ソース1】の場合 市町村名へのリンクが、登録会社の数だけ出現! (表示数を指定しないためここまでは当たり前です) ここから、繰り返しさえ制御できれば完成のはずです。 ここで対策としてfetchOneを使おうとしたのですが、fetchOneはMDBからの機能のようでpearDBでは使えません。 ということで、【ソース2】の表示数を指定することにしました。 $rs=$db->limitQuery("SELECT * FROM reform_co where pre_no = '" .addslashes($_GET['pre_no'])." ORDER BY p_no ASC",1,1); しかし今回の使用用途では何故か Parse error: syntax error, unexpected $end in になります。 どなたか、私の間違いをご指摘いただけますでしょうか? ************************************************************ 【ソース1】(市町村名がホテルの数だけ出現) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <?PHP // サーバー情報接続 require_once '../../config_n_reform.php'; require_once '/usr/share/pear/DB.php'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $db->query('SET NAMES UTF8'); if (PEAR::isError($db)) { die($db->getMessage()); } //////GET URL表示 if(isset($_GET['pre_no'])){ $sql = "select * from reform_co where pre_no = '" .addslashes($_GET['pre_no'])."'"; } $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } //////タイトル表示 print<<<EOF <title> EOF; $i = 0; while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { if ($i == 0) { print($row['p_name']); print<<<EOF のホテルのご紹介 </title> </head> <body> EOF; } $i++; //////ホテル名1回のみ表示 $rs=$db->limitQuery("SELECT * FROM reform_co where pre_no = '" .addslashes($_GET['pre_no'])." ORDER BY p_name ASC",1,1); while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['pre_no']); //市町村へのリンク ここは機能しています //print '<a href="http://hoge.com/index1.php?p_no='; //print($row['p_no'].''); //print '">'; //print($row['p_name'].'<br>'); //print "</a><br><br>"; } $db->disconnect(); ?> </body> </html> **************************************************** **************************************************** 【ソース2】 繰り返しを制御したはずなのですが、エラー <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <?PHP // サーバー情報接続 require_once '../../config_n_reform.php'; require_once '/usr/share/pear/DB.php'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $db->query('SET NAMES UTF8'); if (PEAR::isError($db)) { die($db->getMessage()); } //////GET URL表示 if(isset($_GET['pre_no'])){ $sql = "select * from reform_co where pre_no = '" .addslashes($_GET['pre_no'])."'"; } $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } //////タイトル表示 print<<<EOF <title> EOF; $i = 0; while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { if ($i == 0) { print($row['p_name']); print<<<EOF のホテルのご紹介 </title> </head> <body> EOF; } $i++; //////ホテル名表示 $rs=$db->limitQuery("SELECT * FROM reform_co where pre_no = '" .addslashes($_GET['pre_no'])." ORDER BY p_name ASC",1,1); while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { //市町村へのリンク print '<a href="http://hoge.com/index1.php?p_no='; print($row['p_no'].''); print '">'; print($row['p_name'].'<br>'); print "</a><br><br>"; } $db->disconnect(); ?> </body> </html> ********************************************************

  • PHPのPEAR:DBでPostgreSQLを使用時、カラム名でデータが取得できない

    PHPのPEAR::DBのサンプルを公開しているサイトから以下のソースを引っ張ってきて、試してみました。すると、少しおかしな現象が発生したので、ご質問させていただきます。 ------------------------------ $dsn = "pgsql://postgres:pass@localhost/postgres"; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $sql = 'select * from "USER_TBL"'; $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } while ($row =& $res->fetchRow()) { print($row['ID']); print($row['NAME'].'<br>'); } ------------------------------ 接続は問題なかったのですが、データベースからデータを取得する「print($row['ID']);」の部分が動かず、<br>だけ出力されてしまいます。IDのカラム名をダブルクォーテーションで囲っても、値が出てきません。ところが、print($row[0]);などのように、数値を指定してやると、その部分が出力されます。 また、カラム名を小文字に変えてみたりもしましたが、やはりそれでもデータは取得できませんでした。 理由がよく判らないのですが、カラム名でデータを引っ張ってきたいと思います。解決方法はありませんでしょうか?

    • ベストアンサー
    • PHP
  • PearDBでタイトル部分に検索結果を反映したい

    PearDBでコンテンツを作っています。 テーブルのカラムは「ID、都道府県名、都道府県ID、市町村名、市町村ID、会社名」です。 まず、市町村IDで検索した時に指定した市町村にある会社一覧が表示されるように作りました。ここまでは問題ありません。 次に、SEO対策として、市町村名がタイトルに掲載されるようにしたいと考えました。 例  千代田区の検索をした場合、内容は千代田区のホテル一覧が表示され、タグのタイトル部分は 「<title>千代田区のホテル</title>」としたい。 そこで作ったのが下のソースです。 テスト結果 千代田区のIDで検索すると、千代田区のホテルの一覧表は出てくるのですが、タイトルはあきるの市になってしまいます。 あきる野市は、全国の市町村名でソートした場合、一番上に表示される市町村です。 「選択した市町村結果の中から、一番上の文字(検索結果の100件の千代田区の中から、一番上の千代田区を拾ってくる」と記載したかったのですが、「選択した2万件のテーブルの中から一番上の文字(あきる野市)を拾ってくる」になってしまったようです。 問題となるソースは下記です。ASCを外しても結果は変わりませんでした。 【タイトル部分のソース】        →検索地域の如何に関わらず、「あきるの市」が拾われ表示される。 print<<<EOF <title> EOF; $rs=$db->limitQuery("SELECT * FROM reform_co ORDER BY city_name ASC",1,1); while ($row =& $rs->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['city_name']); } print<<<EOF のホテル </title> 【ホテル一覧表示のソース】       →検索地域通りに、千代田区のホテル一覧100件が表示される。 $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['pre_name'].'<br>'); print($row['city_name'].'<br>'); print($row['company'].'<br>'); print($row['zip'].'<br>'); print($row['address'].'<br>'); print($row['tel'].'<br>'); print($row['fax'].'<br>'); print($row['free_dial'].'<br>'); print($row['gyousyu'].'<br>'); } 質問です。 タイトル部分について、検索地域の一番上の文字(千代田区100件の中の一番上の文字=千代田区)」を拾ってくるようにしたいです。 どなたか修正箇所をご指摘頂けませんでしょうか? 宜しくお願い致します。 【全ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <?PHP // サーバー情報接続 require_once '../../config_n_reform.php'; require_once '/usr/share/pear/DB.php'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $db->query('SET NAMES UTF8'); if (PEAR::isError($db)) { die($db->getMessage()); } $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } //タイトル表示 print<<<EOF <title> EOF; $rs=$db->limitQuery("SELECT * FROM reform_co ORDER BY city_name ASC",1,1); while ($row =& $rs->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['city_name']); } print<<<EOF のホテル </title> </head> <body> EOF; while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['pre_name'].'<br>'); print($row['city_name'].'<br>'); print($row['company'].'<br>'); print($row['zip'].'<br>'); print($row['address'].'<br>'); print($row['tel'].'<br>'); print($row['fax'].'<br>'); print($row['free_dial'].'<br>'); print($row['gyousyu'].'<br>'); } $db->disconnect(); ?> PHPおわり </body> </html>

    • ベストアンサー
    • MySQL
  • PEAR MDB2 のsetFetchModeが設定がうまくいきません

    お世話になります。 Pearのmdb2を使用し始めたのですが、 setFetchMode(DB_FETCHMODE_ASSOC) の記述をしても、データが連想配列形式になりません。 (数値添え字の配列になってしまいます。) 何か問題として考えられることはありませんでしょうか。 環境は、 CentOS5 apache 2.2.3 php 5.1.6 mysql 5.0.22 (すべてRPM) です。 ソースは下記のとおりです。 $mdb2 =& MDB2::connect( $dsn, array() ); if( PEAR :: isError( $mdb2 ) ){ $errmsg .= "データベースの接続に失敗しました。<br />"; }else{ //連想配列で取り出す $mdb2->setFetchMode(DB_FETCHMODE_ASSOC); $res =& $mdb2->query('SELECT * FROM tablename'); if (PEAR::isError($res)) { $errmsg .= "SQLの実行に失敗しました。<br />"; } print("<pre>"); while ($row = $res->fetchRow()) { print_r($row); } print("</pre>"); // 接続断 $mdb2->disconnect(); } アドバイスがあればぜひよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • タイトルと複数項目を適切に表示するには?

    MySQL + PearDBでコンテンツを作っています。 テーブルのカラムは「ID、都道府県名、都道府県ID、市町村名、市町村ID、会社名」です。 完成イメージは下記です。 ●ユーザーは市町村IDをGETする。 ●市町村名がヘッダーのタイトルに掲載される。 ●指定した市町村にあるホテル一覧が表示される そこで作ったのが下のソースです。 ヘッダーでは、GETされた任意のp_noに基づき、抽出されたcity_nameを1つだけ表示する。 本文では、GETされた任意のp_noに基づき、抽出された社名、住所、telなどを全て表示する 【テスト結果】 やりたいことは、ヘッダータイトルは1回のみ抽出、ホテルは全て抽出なのに、ホテル名全てにタイトルまで付いてきます。 【表示希望】 <title>千代田区のホテル</title>   ●●ホテル   105-0004   東京都千代田区●●町1-3-4   03-1234-5678   ●Xホテル   105-0005   東京都千代田区●X町1-4-4   03-1234-5679   ●△ホテル   105-0005   東京都千代田区●△町1-4-4   03-1234-5679 【表示結果】 <title>千代田区のホテル</title>   ●●ホテル   105-0004   東京都千代田区●●町1-3-4   03-1234-5678   千代田区のホテル【←これはタイトル文字であり出てきてほしくない】   ●Xホテル   105-0005   東京都千代田区●X町1-4-4   03-1234-5679   千代田区のホテル【←これはタイトル文字であり出てきてほしくない】   ●△ホテル   105-0005   東京都千代田区●△町1-4-4   03-1234-5679 ホテルを1件抽出するごとに、ヘッダータイトル部分の $rs=$db->limitQuery("SELECT * FROM reform_co where p_no = '" .addslashes($_GET['p_no'])."ORDER BY city_name ASC",1,1); まで戻り、タイトル名を再度1回取得し、再記入を続けているようです。 【質問】 ●市町村名をタイトルに記載する部分は1回だけの表示。 ●市町村IDで検索した時に指定した市町村にあるホテルについては全て抽出 するためには、どうすればいいか教えてください。 【ソース】****************************************** <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <?PHP // サーバー情報接続 require_once '../../config_n_reform.php'; require_once '/usr/share/pear/DB.php'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } print('接続に成功しました<br>'); $db->query('SET NAMES UTF8'); if (PEAR::isError($db)) { die($db->getMessage()); } //////GET URL表示 if(isset($_GET['p_no'])){ $sql = "select * from reform_co where p_no = '" .addslashes($_GET['p_no'])."'"; } $res =& $db->query($sql); if (PEAR::isError($res)) { die($res->getMessage()); } //////タイトル表示 print<<<EOF <title> EOF; $rs=$db->limitQuery("SELECT * FROM reform_co where p_no = '" .addslashes($_GET['p_no'])."ORDER BY city_name ASC",1,1); while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { print($row['city_name']); print<<<EOF のホテル </title> </head> <body> EOF; //////ホテル名表示 print($row['company'].'<br>'); print($row['zip'].'<br>'); print($row['address'].'<br>'); print($row['tel'].'<br>'); } $db->disconnect(); ?> </body> </html> ****************************************************

    • ベストアンサー
    • MySQL
  • 売上表示のプログラムをしたいのですが。

    ショッピングカートのcart_buy.phpの中で精算ボタンを押したら精算完了したのちuriage.phpで自動的に売上が入力されるというプログラムを作りたいのですが例えばAさんが購入したときにパソコンとプリンターを購入したとしたらパソコンは反映されますがプリンターは反映されず同じ購入者が複数の売上表示が行なえないのです。どうしたらうまくいくでしょうか。アドバイスお願いします。 uriage.php <?php require_once 'DB.php'; $dsn = "mysql://user:password@localhost/sampledb2"; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } $sql = 'select * from syohin_uriage'; $res =& $db->query($sql); while ($row =& $res->fetchRow(DB_FETCHMODE_OBJECT)){ print "<tr><td><center>$row->id</center></td>"; print "<td><center>$row->name</center></td>"; print "<td><center>$row->tanka</center></td>"; print "<td><center>$row->num</center></td>"; print "<td><center>$row->ss</center></td></tr>"; } $db->disconnect(); ?>

    • 締切済み
    • PHP
  • mysqlからphpに表示ですべての項目を出したい

    phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <?     mysql_connect('localhost' , 'root' , '') or die(mysql_error());     mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked>        {$row['name']}\n<br>"; } $select="{$options}</select>\n";     print $select; ?>

    • ベストアンサー
    • PHP
  • テキストボックスにデータベースの値を反映させるには

    とても初歩的な質問だと思いますが、回答よろしくお願いします。 データベースに保存した値を更新するページのテキストボックスに、データベースの現在値を反映させたいです。 使っている本には、フォーム要素のvalue属性に対応するフィールド値を反映させる、と書いてあるのですが、その通りにやってもできません。 edit.php <?php try { $db = new PDO('mysql:host=●●;dbname=●●;charset=utf8', '●●', '●●'); $stt = $db->prepare('SELECT name, email, password FROM `users` WHERE number = :number'); $stt->bindValue(':number', $_GET['number']); $stt->execute(); } catch(PDOException $e) { die('Error:'.$e->getMessage()); } ?> <?php /* print($_GET['number']); */ ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>インフォメーション</title> </head> <body> <h3>あなたの登録情報</h3> <form method="POST" action="dbconnect4.php"> <input type="hidden" id="number" name="number" maxlength="3" value="<?php print($row['number']); ?>" /> <div class="container"> <label for="name">ユーザ名</label><br/> <input type="text" id="name" name="name" size="10" maxlength="20" value="<?php print($row['name']); ?>" /> </div><br /> <div class="container"> <label for="email">メールアドレス</label></br /> <input type="text" id="email" name="email" size="30" maxlength="100" value="<?php print($row['email']); ?>" /> </div><br /> <div class="container"> <label for="password">パスワード</label><br /> <input type="password" id="password" name="password" maxlength="20" value="<?php print($row['password']); ?>" /> </div><br /><br /> <input type="submit" name="update" value="更新する" /> <input type="submit" name="delete" value="削除する" onclick="return confirm('本当に削除してよろしいですか?')" /> </form> </body> </html> information.php <?php try { $db = new PDO('mysql:host=●●;dbname=●●;charset=utf8', '●●', '●●'); $stt = $db->prepare('SELECT name, email, password FROM `users` WHERE email = :email AND password = :password '); $stt->bindValue(':email', $_POST['email']); $stt->bindValue(':password', $_POST['password']); $stt->execute(); } catch(PDOException $e) { die('Error:'.$e->getMessage()); } ?> <?php /* print($_POST['email']); print($_POST['password']); */ ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>インフォメーション</title> </head> <body> <h3>あなたの登録情報</h3> <table border="1"> <tr> <th>ユーザ名</th><th>メールアドレス</th><th>パスワード</th><th></th> </tr> <?php while ($row = $stt->fetch()) { ?> <tr> <td><?php print($row['name']); ?></td> <td><?php print($row['email']); ?></td> <td><?php print($row['password']); ?></td> <td><a href="edit.php?number=<?php print($row['number']); ?>">編集する</a></td> </tr> <?php } ?> <br /><br /> </body> </html> information.phpの編集する、というリンクからedit.phpに飛ぶようになっています。 information.phpの前の画面でパスワードとメールアドレスを入力し、それらが一致したらinformation.phpでレコードを抜き出すという仕様になっています。 回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql

    一覧画面と検索画面を一緒にしています <!--一覧画面 index1.php--> <html> <head> <title>一覧画面</title> </head> <body> <br><br> <blockquote> 一覧画面 <br><br> <?php if ($_GET) { // データがGETされていたら $event = isset($_GET['event']) ? $_GET['event'] : ''; // 取得 if (isset ($_GET['page'])==false) { $page=0; } else { //そうでなければpageパラメータの値をpage変数にセット $page = $_GET['page']; } } ?> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $name=isset($_GET['name'])?$_GET['name']:""; $sql ="select * from tbl_test where "; $sql.="`氏名` like concat('%',?,'%') "; $sql.="or `住所` like concat('%',?,'%') "; $sql.= " limit " . $page*10 . ", 10" ; $stmt = $pdo->prepare( $sql); $stmt->execute(array($name,$name)); $count = $stmt->rowCount(); if($count>0){ print "<table border=1>" ; print "<tr>"; print "<th>番号</th>"; print "<th>氏名</th>"; print "<th>住所</th>"; print "<th>操作</th>"; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ print "</tr>"; $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td></tr>"; }; print "</table>" ; }else{ print "該当するデータがありません"; } ?> <br><br><br> <form action = "index1.php" method="GET"> <input type="hidden" name="event" value="find"> <input type="text" name="name"style ="font-size:20px;width: 400px; height: 40px"> <input type="submit" value="検索" style ="font-size:20px;width: 100px; height: 40px"> </form> <br><br> <form action = "regist.php" method="GET"> <input type="hidden" name="event" value="regist"> <input type = "submit" value = "新規登録" style ="font-size:20px;width: 100px; height: 40px"> </form> <input type="hidden" name="page" value="0"> </blockquote> </body> </html> limit10で10件表示にしています 検索のテキストボックスが空だったら全件表示したいのですが今10件しか出ません limitの書く場所が原因でしょうか? またこのように一覧画面と検索結果画面が一緒じゃまずいですかね? 検索結果を別ウインドウじゃなく自分に返したいと思いこのやり方にしたのですがよくないですか?

    • ベストアンサー
    • MySQL