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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2307閲覧

XMLからデータを取得し、IDを保存

daiti916

総合スコア17

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/12/19 07:17

編集2016/12/19 07:22

前提・実現したいこと

現在phpで、選手データ動画CSVを作成しています。
※ブラウザ上に選手の情報を表示し、よろしければCSVで保存という形です。

実現したいことは、各選手ごとに動画IDを持っており、その動画IDは毎月バラバラに発表されるので
発表されたごとに手動で保存したいと考えております。

イメージ図


イメージ説明



イメージ説明

●ここで保存を押すと、CSVのこと行に動画IDが入るようにしたいです。
最初のCSVの中身は以下の通りです。

1111,山田太郎,20161218,一般,始まりの終わり,⑥
2222,田中太郎,20161220,G1,最後から三番目,⑥

※動画IDが入るところは⑥の場所になります。

★補足★
DBを使わず、CSVのみで行う予定です。

ブラウザ場の2行目(画像で言うと山田太郎さん)の動画IDに数字をいれ、保存すると、CSVの山田太郎さんの動画IDの場所に数値が入るようにしたいです。

どのような方法があるか、アドバイスの方をいただけると嬉しいです・・・。

宜しくお願い致します。

現在のコード

//★メニューバー表示★ include('index.php'); //★ファイル名定義★ $file_name = mb_convert_encoding('動画用', "sjis" , "UTF-8" ); $days = date("Ym99"); $day = substr($days,0,6); $yearmonth = $_POST["yearmonth"]; //★月別優勝レーサー一覧取得★ if($xml = @file_get_contents("データ情報URL")){ $xml = simpleXML_load_string($xml); $xml = (array)($xml->table); $xml = (array)($xml["record"]); $max = count($xml); class xml { public $toban; public $name; public $hdate; public $grade; public $rsname; function __construct($toban, $name, $hdate, $grade, $rsname) { $this->toban = $toban; $this->name = $name; $this->hdate = $hdate; $this->grade = $grade; $this->rsname = $rsname; } } //★CSVファイルへ出力★ $output = ""; $out = ""; // 結果配列 $result = array(); // 全ての要素について一つずつ取り出して実行する foreach ($xml as $x){ // キー名をセット $keyValue = $x->toban . $x->name .$x->rsname; if (!isset($result[$keyValue])) { // 同じ toban, name の要素が存在しないので新たに設定する $result[$keyValue] = array( 'toban'=>preg_replace("/( | )/", "", $x->toban) , 'name'=>preg_replace("/( | )/", "", $x->name), 'hdate'=>$x->hdate, 'grade'=>preg_replace("/( | )/", "", $x->grade), 'rsname'=>preg_replace("/( | )/", "", $x->rsname), ); } if ($x->grade == 'SG') { $result[$keyValue]['grade'] = "SG"; }elseif ($x->grade == 'GⅠ') { $result[$keyValue]['grade'] = "G1"; }elseif ($x->grade == 'GⅡ') { $result[$keyValue]['grade'] = "G2"; }elseif ($x->grade == 'GⅢ') { $result[$keyValue]['grade'] = "G3"; }elseif ($x->grade == '一般') { $result[$keyValue]['grade'] = "一般"; } if (strpos($x->rsname,'SG') !== false) { $result[$keyValue]['rsname'] = str_replace('SG', 'SG', $x->rsname); }elseif (strpos($x->rsname,'GⅠ') !== false) { $result[$keyValue]['rsname'] = str_replace('GⅠ', 'G1', $x->rsname); }elseif (strpos($x->rsname,'GⅡ') !== false) { $result[$keyValue]['rsname'] = str_replace('GⅡ', 'G2', $x->rsname); }elseif (strpos($x->rsname,'GⅢ') !== false) { $result[$keyValue]['rsname'] = str_replace('GⅢ', 'G3', $x->rsname); } } //登番ソート(昇順) foreach($result as $key => $row){ $toban[$key] = $row["toban"]; } array_multisort($toban,SORT_ASC,$result); /* $output =$yearmonth.mb_convert_encoding("動画用", "SJIS", "UTF-8"); $output .="\n"; $output .= mb_convert_encoding("登番", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("選手名", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("日付", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("グレード", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("レース名", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("動画ID", "SJIS", "UTF-8"); $output .="\n"; */ foreach(array_keys($result) as $key) { $output .= $result[$key]['toban']; $output .="," . mb_convert_encoding($result[$key]['name'], "SJIS", "UTF-8"); $output .="," . $result[$key]['hdate']; $output .="," . mb_convert_encoding($result[$key]['grade'], "SJIS", "UTF-8"); $output .="," . mb_convert_encoding($result[$key]['rsname'], "SJIS", "UTF-8"); $output .=","; //最後のカンマを削除し改行する $output .= "\n"; } //データ書き込み file_put_contents("./out/$yearmonth$file_name.csv", $output); $file = "./back/$yearmonth$file_name.csv"; if( !file_exists($file) ){ file_put_contents("./back/$yearmonth$file_name.csv", $output); } //ダウンロード echo ("<b>ダウンロードはこちら ⇒ </b>"); echo '<a href="./back/'.$yearmonth.'動画用.csv">'.$yearmonth.'動画用.csv</a><br/>'; echo "※CSVはテキストで開いてください。<br/><br/><br/>"; ?> <!-- ★データ表示★ --> <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>csvファイル</title> <style> table { border-collapse: collapse; } td { border: 1px solid #333; text-align:center; } .wd{ border: 1px solid #333; text-align:left; } </style> </head> <body> <?php echo "<b>【↓内容はこちら↓】<br><br> ~ $yearmonth 月データ ~</b><hr><br>";?> <?php $fpd = fopen("./back/$yearmonth$file_name.csv", 'r+'); print '<table border="1">'; print '<tr> '; print '<td> 登 番 </td>'; print '<td> 選手名 </td>'; print '<td> 日 付 </td>'; print '<td> グレード </td>'; print '<td class="wd"width="500px" > レース名 </td>'; print '<td> 動画ID </td>'; while (($data = fgets($fpd)) !== FALSE){ $data = explode(",", $data); mb_convert_variables('UTF-8', 'sjis-win', $data); print '</tr>'; print '<tr>'; /* 登番 */ print'<td>' . $data[0] .'</td>'; /*選手名 */ print'<td>' . $data[1] .'</td>'; /*日付 */ print'<td>' . $data[2] .'</td>'; /*グレード */ print'<td>' . $data[3] .'</td>'; /*レース名 */ print'<td class="wd">' . $data[4] .'</td>'; /*動画ID */ print'<td></td>'; $out .= mb_convert_encoding($data[0], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[1], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[2], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[3], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[4], "SJIS", "UTF-8"); $out .=","; $out .= "\n"; file_put_contents("./back/$yearmonth$file_name.csv", $out); } print '</tr>'; print '</table>'; fclose($fpd); ?> </body> </html> <?php }else if($yearmonth == $day){ echo "<b>今月の情報は、【最新情報作成】から作成してください。</b>"; }else{ echo "<b>日付( YYYYMM )を正しく入力してください。<br/> または選択月のレースが1レースも終わっていない場合があります。</b>"; } ?> コード

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

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

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

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

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

motuo

2016/12/20 01:36

躓いている箇所を具体的に教えてください。htmlのtableタグ内でテキストボックスを出せれば解決でしょうか?または、formから値を取れなくて困っている状態ですか?動画ID以外の項目はCSV出力出来ている状態でしょうか?
daiti916

2016/12/20 03:52

躓いている箇所は、動画IDを画面上で記載し、保存ボタンを押すと、CSVの特定の箇所にIDが記載されるイメージです。 画像で見ると、2番目の人の動画IDでしたら、CSVの2番目の人の動画IDに記載される感じです。動画ID以外のデータは、XMLから読み取り配列に入れて出力していおります。 テキストボックスを表示するところまではできるのですが、そこからCSVの特定の行に書き出す方法がわからないでとまっています。 伝わりずらくて申し訳ございません。宜しくお願い致します。
guest

回答1

0

これで如何でしょうか?
tdのテキストボックスにnameを指定する。

html

1<form action="hoge.php" method="POST"> 2<table> 3<tr> 4<td><input type="text" name="movieId[]"></td> 5</tr> 6</form>

php側でformから送信された内容を配列として受け取る

php

1$movieId_array=$_POST["movieId"];

これで入力されたIDを取ることが出来ると思います。

投稿2016/12/20 04:11

編集2016/12/20 08:44
motuo

総合スコア3027

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

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

daiti916

2016/12/20 08:44 編集

tdのテキストボックスにnameを指定する。ということは・・・ ``` <form action="hoge.php" method="POST"> <table> <tr> <td><input type="checkbox" name="movieId[]" "></td> <td><input type="text" name="movieId[]" "></td> </tr> </form> ``` でしょうか・・・?
motuo

2016/12/20 08:45

すいません。チェックボックスは不要で<td><input type="text" name="movieId[]"></td>ですね。(回答も修正しました。)
daiti916

2016/12/20 08:59

ありがとうございます! 色々試してみます。 またわからないことがありましたら、お手数ですがお願い致します・・・。
daiti916

2016/12/20 09:05

いきなり質問なのですが・・・CSVに出力する際どう記述すればよろしいでしょうか?
motuo

2016/12/20 09:10

どう、と言われてもちょっと答えづらいのですが… CSVファイル自体は出力出来ているんですよね?変数へのセット方法が分からない、という事ですか? $out .="," . mb_convert_encoding($data[4], "SJIS", "UTF-8"); の下に $out .="," . $movieId_array[$i]とかすれば良いのでは? whileのループの中で$iをカウントアップしていけば、多分、取れると思いますよ。
daiti916

2016/12/20 09:21

入力箇所は現在 print'<form action="" method="POST"> <td><input type="text" name="movieId[]"></td> <td><input type="submit" name="movieId[]" value="保存"></td> </form>'; になっており、ファイルへ出力箇所は、 while($i <= $max){ $output .="," . $movieId_array[$i]; $i++; } になっておりますが、Notice: Undefined offset: というエラーが出てしまいます・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問