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

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

ただいまの
回答率

87.37%

phpでtxtファイルのデータを取り出す方法

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 677

score 1

前提・実現したいこと

PHPでtxtファイルのデータを表示させるシステムを作っています。

<?php
$fp = fopen("23.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>


上記ソースで23.txtのデータを表示させています。

発生している問題

<?php
$arr = array(
'23.txt'=>['name'=>'inp_01','disp'=>'クーピー'],
'24.txt'=>['name'=>'inp_02','disp'=>'クレヨン'],
'25.txt'=>['name'=>'inp_03','disp'=>'マジック(大、油性)'],
'26.txt'=>['name'=>'inp_04','disp'=>'マジック(小、油性)'],
'27.txt'=>['name'=>'inp_05','disp'=>'マジック(水性)'],
'28.txt'=>['name'=>'inp_06','disp'=>'マイネーム'],
'29.txt'=>['name'=>'inp_07','disp'=>'カッター'],
'30.txt'=>['name'=>'inp_08','disp'=>'はさみ'],
'31.txt'=>['name'=>'inp_09','disp'=>'水のり'],
'32.txt'=>['name'=>'inp_10','disp'=>'ボンド'],
);
$msg = array();
if ($_POST) {
foreach ($arr as $file=>$val) {
$name = $val['name'];
if (!isset($_POST[$name])) die('abort');
file_put_contents($file, $_POST[$name] . PHP_EOL, LOCK_EX);
$msg[] = sprintf('%s:%s<br>', $file, htmlspecialchars($_POST[$name], ENT_QUOTES));
}
}
?>
<!DOCTYPE HTML >
<html lang="ja">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/themes/black/pace-theme-center-circle.min.css" />
<title>備品個数書き込みフォーム</title>
</head>
<body>
<?= count($msg) > 0 ? implode('', $msg) . "上記内容で書き込みました。<hr>" : '' ?>
<div style="text-align:center">
<form action="main.php" method="post">
<?php
foreach ($arr as $val) {
$disp = $val['disp'];
$name = $val['name'];
printf('%s<br><input type="text" name="%s" value="%s"><br>', $disp, $name, isset($_POST[$name]) ? htmlspecialchars($_POST[$name], ENT_QUOTES) : '');
}
?>
<input type="submit">
</form>
</div>
</body>
</html>

上記コードでフォームを表示させ、データをそれぞれ別のtxtファイルに書き込んでいます。
次に、下記のコードで、先ほどとは別のフォームで先ほど入力したtxtファイルのデータを備品名の横に表示させています。

<?php
$arr = array(
'46.txt'=>['name'=>'inp_01','disp'=>'クーピー
 <?php
$fp = fopen("23.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'47.txt'=>['name'=>'inp_02','disp'=>'クレヨン<?php
$fp = fopen("24.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'48.txt'=>['name'=>'inp_03','disp'=>'マジックペン(大、油性)<?php
$fp = fopen("24.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'49.txt'=>['name'=>'inp_04','disp'=>'マジックペン(小、油性)<?php
$fp = fopen("25.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'50.txt'=>['name'=>'inp_05','disp'=>'マジックペン(水性)<?php
$fp = fopen("26.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'51.txt'=>['name'=>'inp_06','disp'=>'マイネーム
<?php
$fp = fopen("27.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'52.txt'=>['name'=>'inp_07','disp'=>'カッター<?php
$fp = fopen("28.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'53.txt'=>['name'=>'inp_08','disp'=>'ハサミ<?php
$fp = fopen("29.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'54.txt'=>['name'=>'inp_09','disp'=>'水のり
<?php
$fp = fopen("30.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
'55.txt'=>['name'=>'inp_10','disp'=>'ボンド<?php
$fp = fopen("31.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],
);
$msg = array();
if ($_POST) {
foreach ($arr as $file=>$val) {
$name = $val['name'];
if (!isset($_POST[$name])) die('abort');
file_put_contents($file, $_POST[$name] . PHP_EOL, LOCK_EX);
$msg[] = sprintf('%s:%s<br>', $file, htmlspecialchars($_POST[$name], ENT_QUOTES));
}
}
?>
<!DOCTYPE HTML >
<html lang="ja">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/themes/black/pace-theme-center-circle.min.css" />
<title>中二1  710日 備品ナンバー書き込み</title>
</head>
<body>
<h2>備品ナンバー書き込みフォーム</h2>
<h3> <?php
$fp = fopen("class.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?></h3>
<h3> <?php
$fp = fopen("day.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>
</h3>
<h4>下記のフォームに貸し出した備品のナンバーを書き込んでください。備品名のとなりに貸出申請の個数が記載されています。参考にしてください。複数になる場合は、カンマで区切ってください。</h4>
<?= count($msg) > 0 ? implode('', $msg) . "備品のナンバーを書き込みました。 <hr>" : '' ?>
<div style="text-align:center">
<form action="main.php" method="post">
<?php
foreach ($arr as $val) {
$disp = $val['disp'];
$name = $val['name'];
printf('%s<br><input type="text" name="%s" value="%s"><br>', $disp, $name, isset($_POST[$name]) ? htmlspecialchars($_POST[$name], ENT_QUOTES) : '');
}
?>
<input type="submit">
</form>
</div>
</body>
</html>

試したこと

いつも通り、

<?php
$fp = fopen("23.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>


上記コードで取り出そうとしたところ、
うまく表示されず、phpのコードが表示されてしまいました。

何がいけなかったのでしょうか?
phpの中にphpを埋め込んだことが原因かと思いましたが、
<? Php
?>
の部分を消しても動作しませんでした。

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/09/07 12:28

    前のアドバイス無視してこれ続けるならもう業者に頼んだほうが良いです。
    素人未満のコードをシステムと呼んではいけないですし社内の何かの業務に使うべきではありません。

    キャンセル

  • 退会済みユーザー

    2019/09/08 01:17

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

+2

何を参考にしたら2019年にこんなコードになるんだろう…。
PHPにはfile()とかfile_get_contents()とか便利な関数があるのでfopen()とか使わない。

'46.txt'=>['name'=>'inp_01','disp'=>'クーピー
 <?php
$fp = fopen("23.txt", "r"); while ($line = fgets($fp)) {
echo "$line<br />"; }
fclose($fp); ?>'],

こういう部分は当然動かない。
やろうとしてることがあまりにも意味不明すぎて理解できない…。
ちょっと基本から勉強し直してもらわないと難しい。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+1

1, <?php ?>の中に<?php ?>を入れたら当然動かない。
2, 入れる場所確認しましたか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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