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

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

ただいまの
回答率

90.35%

  • PHP

    25496questions

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

  • CSV

    948questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP CSVを検索フォームで一致したキーワードを表示さようとすると真っ白になる。

解決済

回答 1

投稿 ・編集

  • 評価
  • クリップ 1
  • VIEW 3,913

hikaricafe

score 29

PHP初心者です。

こちらの方のサイト
◆練習問題12 - 外部ファイルの読み書き
を参考にPHPでcsvファイルを検索フォームで一致したキーワードを表示
させようと思っているのですがうまくいきません。
[送信]を押した後の画像のように中身が真っ白に表示されてしまいます。

[data.csv] も [index.php] 
もすべて以下ディレクトリ配下においております。
/var/www/html/

よろしくお願いします。

[送信]を押す前 検索キーワードを入力
イメージ説明[送信]を押した後 ↓中身が真っ白に表示される
イメージ説明

data.csv
商品番号,名称,単価,在庫
A001,りんご,80,10
A002,みかん,30,20
A003,バナナ,40,14
A004,いちご,400,20
A005,パイナップル,200,21

index.php
<?php
 //POSTの処理
 $id = isset($_POST['id']) ? $_POST['id'] : "false";
 ?>
 <html>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <head>
 <title>練習問題12 - 簡易データベースの動作確認 / PHPを学ぼう!</title>
 </head>
<body bgcolor="#FFFFFF">
<h1 style="font-size:14pt">◆簡易データベース</h1>
<?php
//ファイル名の指定
$file_name = "data.csv";


//処理の分岐
if($id != "false"){
$fp = fopen($file_name, "a+") or die('ファイルオープンエラー!');
//データを$arrayに代入(多元配列)
while(!feof($fp)){
$data = fgets($fp);
$array[] = explode(",", mb_convert_encoding($data, "UTF-8", "auto"));
}
var_dump( $array );
fclose($fp);

//目的のデータの修得
for($i=0; $i<count($array); $i++){
if($array[$i][0] == $id){
$new_data = $array[$i];
//var_dump( $new_data );
break;
}
}
}
$new_data = isset($new_data) ? $new_data : "false" ;
?>
<form action="index.php" method="POST">
<input type="text" name="id">
<input type="submit" name="Submit" vale="検 索">
</form>
<?php
if($id != "false"){
if($new_data == "false" || $id == ""){
echo "データが存在しません。";
}else{
echo '▼検索結果';
echo '<hr>';
echo '商品番号: '.$new_data[0].'<br />';
echo '名 称: '.$new_data[1].'<br />';
echo '単 価: '.$new_data[2].'<br />';
echo '在 庫: '.$new_data[3].'<br />';
}
}
?>
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

処理途中でのエラーによって、後続の処理が中断されて出力されているようですね
こうなった場合は、地道にエラー箇所を確認していく作業に移行することになると思います

index.php の最初の行あたりに

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
?>

とエラー出力の設定を書いてあげると、どの行でエラーが発生しているのか、情報を示してくれるようになると思います

今回の場合:

    //目的のデータの修得
    $array_size = count($array);
    for ($i = 0; $i < $array_size; $i++) {
        if($array[$i][0] == $id) {
            $new_data = $array[$i];
            //var_dump( $new_data );
            break;
        }
    }
}
var_dump($new_data); // ← 追記。データがあるか確認!
$new_data = isset($new_data) ? $new_data : "false" ;
?>

のあたりが怪しそうです

## Links
PHP: 実行時設定 display_errors - Manual
PHP: 実行時設定 error_reporting - Manual
PHP: 言語リファレンス - Manual
  * PHP: 変数のスコープ - Manual
PHP入門(基本編) (全32回) - プログラミングならドットインストール

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/12/31 21:36

    ありがとうございます!!
    まずは教えていただいたとおり
    <?php
    ini_set('display_errors', true);
    error_reporting(E_ALL);
    ?>
    を追加しました。そして実行すると

    CentOS上でPHPを動かすとき、文字コード変換関数mb_convert_encodingが実行できない
    PHP Fatal error: Call to undefined function mb_convert_encoding()

    関数がインストールされていないのが原因とのこと。

    当方の環境にPHPのモジュールがインストールされていないのが原因でございました。。

    以下を行い、解決されました。
    (1)関数のインストール
    yum install php-mbstring
    (2)httpdのサービスをリスタートする
    #service httpd restart


    <?php
    ini_set('display_errors', true);
    error_reporting(E_ALL);
    ?>

    を追加していきなり、原因がわかってびっくりいたしました。
    こちらを教えていただけなければ、ただただ悶々としているところでした。。
    ありがとうございます。

    また参考のLinksありがとうございま!!
    勉強いたします!!

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25496questions

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

  • CSV

    948questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。