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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

1154閲覧

PHPで登録削除修正をcsvに反映させるには?

nyui

総合スコア13

CSV

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/08/02 17:34

質問

xamppを使ってcsvからデータを読み込み、
インターネットエクスプローラーの画面に登録フォームと削除修正機能を付けました。
しかし、データの読み込みはできるのに削除や修正、登録がcsvに反映されません。
どうしたらいいのか全くわからないのでアドバイスいただけたら幸いです。

インターネットエクスプローラーの画面

イメージ説明

PHP

<?php echo('<pre>'); var_dump($_POST); echo('</pre>'); $data = file_get_contents("plan.csv");//plan.csv読み込み $data = mb_convert_encoding($data,'utf-8','sjis-win');//文字コードをutf8に $data = explode("\r\n",$data);//excel csv での改行 foreach($data as $key => $value){ $line_array = explode(",",$value); if ($key == 0){ $data_key = $line_array;//1行目は$data_keyに格納 }elseif(!empty($value)){//!は否定のマーク $plans[] = array_combine($data_key,$line_array);//2行目以降は plans に格納 } } foreach($plans as $key=>$value){ $array_year[]=$value['year']; $array_month[]=$value['month']; $array_day[]=$value['day']; } array_multisort( $array_year,SORT_ASC, $array_month,SORT_ASC, $array_day,SORT_ASC, $plans ); $output_str = "id,year,month,day,content\r\n"; foreach($plans as $key=>$line){ foreach($line as $key_line=>$value_line){ $output_str=$output_str.$value_line.','; } $length=mb_strlen($output_str); $output_str=mb_substr($output_str,0,$length-1); $output_str=$output_str."\r\n"; } echo("<pre>"); var_dump($output_str); echo("</pre>"); //削除機能 foreach($plans as $key=> $value){ if(!empty($_GET['action']) AND $_GET['action']=='delete' AND $_GET['id']==$plans[$key]['id']){ unset($plans[$key]); } } //修正リンクが押された時の呼び出し機能 $default=array('id'=>'','year'=>'','month'=>'','day'=>'','content'=>''); foreach($plans as $key=>$value){ if(!empty($_GET['action']) AND $_GET['action']=='edit' AND $_GET['id']==$plans[$key]['id']){ $default=$plans[$key]; } } //登録修正機能 if(!empty($_POST)){ foreach($plans as $key=>$value){ if($_POST['id']==$plans[$key]['id']){ unset($plans[$key]); } } $new_plan=array( "id"=>$_POST['id'], "year"=>$_POST['year'], "month"=>$_POST['month'], "day"=>$_POST['day'], "content"=>$_POST['content'], ); $plans[]=$new_plan; } file_put_contents('plan.csv',mb_convert_encoding($output_str,'sjis-win','UTF-8')); ?> <html> <head> <title>プログラミング入門</title> <meta charset="UTF-8"> </head> <body> <form action="?" method="POST"> <!--action="?"の?は送信ボタンを押した次のページ--> <p>ID:<input type="text" name="id" value="<?php echo $default['id'];?>"></p> <p>年:<input type="text" name="year" value="<?php echo $default['year'];?>"></p> <p>月:<input type="text" name="month" value="<?php echo $default['month'];?>"></p> <p>日:<input type="text" name="day" value="<?php echo $default['day'];?>"></p> <p>内容:<input type="text" name="content" value="<?php echo $default['content'];?>"></p> <p><input type="submit" name="submit" value="送信"></p> </form> <h1>Plans</h1> <table border='1'> <tr> <td>id</td> <td>year</td> <td>month</td> <td>day</td> <td>content</td> <td>過去・本日・未来</td> <td>アクション</td> </tr> <?php foreach($plans as $key=>$value){ //foreach(配列asキーが代入される変数=>値が代入される変数)(繰り返される内容)?> <tr> <td><?php echo $value['id'];?></td> <td><?php echo $value['year'];?></td> <td><?php echo $value['month'];?></td> <td><?php echo $value['day'];?></td> <td><?php echo $value['content'];?></td> <td><?php if (mktime(0,0,0,$value['month'],$value['day'],$value['year'])<strtotime("today")){ echo "過去"; } elseif (mktime(0,0,0,$value['month'],$value['day'],$value['year'])==strtotime("today")){ echo "本日"; //} elseif (mktime(0,0,0,$value['month'],$value['day'],$value['year'])<=strtotime("today")+86400*7){ } elseif (mktime(0,0,0,$value['month'],$value['day'],$value['year'])<strtotime("1week")){ echo "一週間"; } else { echo "未来"; } ?></td> <td><a href="?action=edit&id=<?php echo($value['id'])?>">修正</a>|<a href="?action=delete&id=<?php echo $value['id'];?>">削除</a></td> </tr> <?php } ?> </table> </body> </html>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/02 21:09 編集

PHPのバージョンは幾つでしょうか。 あと、細かいところなのですが、インターネットエクスプローラはあくまで「作った画面を見るためのもの」なので、そこに画面が埋め込まれるわけではありません。 PHPで出力したHTMLを読み取って表示するのがブラウザの仕事です(概念はテレビと同じです)。GoogleChromeなど別のブラウザでも動作確認は可能なので、そこは間違えないように・・・ XAMPPもあくまで環境構築の統合ツールなので「使って」るのはPHP、出力部分にHTML、というのが正しい表現です。
m.ts10806

2019/08/02 22:56

そういえば「登録」できてないんですよね? としたら「どういう形態で登録されるか」現在のデータもご提示いただかないと目指す形が見えないので対応しようがありません。 サンプルデータ 、要はCSVの中身をそのままテキストでご提示ください(コードブロックが望ましいです)
guest

回答1

0

$output_str に既存のCSV内容を保存したのち、
内容を変更せずにCSV出力しているので、
実行前後でなにもかわらないってことですね。
--- 追記 ---
コードをべた書きでだーって書いてると読みづらいし
理解しにくいし、デバッグも大変ですよね。
関数に機能を小分けにするといいです。
たとえば。こんな感じ

php

1<?php 2$default = array('id'=>'','year'=>'','month'=>'','day'=>'','content'=>''); 3$plans = get_csv_plans(); // CSV 読み込み 4if (isset($_POST['submit'])) { 5 $plans = plan_edit($plans, $_POST); //データ登録or修正 6 put_csv_data($plans); 7} 8if (isset($_GET['action'])) { 9 $act = $_GET['action']; 10 $id = $_GET['id']; 11 if ($act == 'edit') { //編集指示 12 $default = get_info($plans, $id); //inputタグに表示する内容をセット 13 } else { // 削除指示 14 $plans = plan_delete($plans, $id); //削除 15 put_csv_plans($plans); 16 } 17} 18//以下、関数の定義 19?> 20//以下HTML部分

投稿2019/08/03 01:05

編集2019/08/03 01:44
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問