[PHP-users 24132] Re: (無題)

T.Tsuruoka tsuruoka @ macrobilis.com
2005年 1月 14日 (金) 00:33:20 JST


はじめまして.
クマー@なぞなぞ大好き です.


以下,回答です.

----

まず問題解決の手がかりになりそうな情報を本文から探してみる.
OS,PHP,Apache などの環境についての情報と
問題のソースはどこにも記されていない.
他に参考になりそうな情報を探す.

「10日で覚えるPHP入門教室」という
問題のサンプルが含まれている書籍名.
サンプル付き書籍はオンライン上でも,同じデータや,
ソースに間違いがあるときはその訂正データを公開していることがある.

書籍名を元に書籍のサンプルを探すと,以下が見つかる.
http://www.shoeisha.com/book/hp/10days/down/index.html
http://www.shoeisha.com/book/hp/10days/down/PHP10sample.lzh

問題のサンプルに関する情報は,

> 簡易アドレス帳で
> 検索フォームに名前の一部を入れるだけで
> データのアドレスを検索して
> 表示してくれると言うものですが

とあるので,それらしきものを探す.

02-02 というディレクトリに含まれているサンプルがそれに近い.

* 02-02 のファイル構成
- 02-02.php       問題のソースと思われるもの
- 02-02-ex.php
- common.php      ファイル読み込みと文字コード変換
- data/m_addr.txt アドレスデータ

* 02-02.php のソース

<?php
require_once( "common.php" );
?>
<HTML>
<HEAD><TITLE>02-02</TITLE></HEAD>
<BODY>
<H1>アドレス帳</H1>
<FORM ACTION="<?php echo( $_SERVER[ "PHP_SELF" ] ) ?>" METHOD="POST">
キーワード:<INPUT NAME="KEYWORD" TYPE="TEXT" SIZE="30">
<INPUT TYPE="SUBMIT" VALUE="検索">
<?php
  $AddressData = LoadTextFile( "./data/m_addr.txt", "EUC_JP", "SJIS" );
  if ( $AddressData == false ) {
    echo( "データはありません。" );
  } else {
    ?>
      <TABLE BORDER="1">
    <?php
    for ( $i = 0; $i < sizeof( $AddressData ); $i++ ) {
      $line = explode( ",", $AddressData[ $i ] );
      $match = true;
      if ( $_POST[ "KEYWORD" ] != "" ) {
        if ( ( strstr( $line[ 0 ], $_POST[ "KEYWORD" ] ) != false ) ||
             ( strstr( $line[ 1 ], $_POST[ "KEYWORD" ] ) != false) ) {
          $match = true;
        } else {
          $match = false;
        }
      }
      if ( $match == true ) {
        ?><TR>
        <TD BGCOLOR="#FFFFCC"><?php echo( $i + 1 ) ?></TD>
        <TD><?php echo( $line[ 0 ] ) ?></TD>
        <TD><?php echo( $line[ 1 ] ) ?></TD>
        </TR>
        <?php
      }
    }
    ?></TABLE><?php
  }
?>
</FORM></BODY></HTML>

このコードで,

> フォームに入力して検索ボタンを押しても
> 「カチッ」と音が鳴るだけで何も起こりません

となるのは,
<FORM ACTION="<?php echo( $_SERVER[ "PHP_SELF" ] ) ?>" METHOD="POST">
の $_SERVER[ "PHP_SELF" ] が空で,
<FORM ACTION="" METHOD="POST">
になる場合.
あるいは,
      if ( $_POST[ "KEYWORD" ] != "" ) {
の $_POST[ "KEYWORD" ] が空の場合など.

これから,
$_POST,$_SERVER などが空になる.
↓
スーパーグローバル変数が定義されていない.
↓
答え:PHP のバージョンが 4.1.0 未満である.

----

正解ですか?

-------------------------
T.Tsuruoka
<tsuruoka @ macrobilis.com>


PHP-users メーリングリストの案内