• 締切済み

PHPでCSVの一部の行を編集したい

amountainblastの回答

回答No.1

こんにちわ。 私の場合ですが・・・ CSVでの編集だと、一度全てのデータを配列に格納し、CSVを空にします。 配列から該当するデータの変更を行い CSVに全て書き込む手順で行っています。 ある特定の行のみ書き換えるってことはできなかったと思います。 参考ソースがなくてすみません・・・。 蛇足ですが、 CSVで何かをするときはファイルにロックを欠けるようにしたほうがいいですよ。 タイミングによっては、変更されてないなんてこともあるかもしれませんので・・・

hukazuo
質問者

お礼

ありがとうございます。 一度すべてを空にして、、、、、 というのはわかるのですが、 自分なりにソースを記入してみたのが、上記のソースなんです。。。。 それでもうまくいかないので、 詳しく教えていただけたらと思ったのですが、、、。

関連するQ&A

  • PHPでCSVファイルの任意の行だけを編集したい

    簡易掲示板の管理画面を作成しようと思っていますが、 うまくいかずに悩んでいます。 入力フォームで送られてきた内容をcsvファイルに書き込み、 それを表示するという掲示板なのですが、 管理画面ではそのcsvファイルを操作して、 任意の書き込みを修正・削除できるようにしたいと考えています。 以下、PHPコードです。 if($mode == "edit"){ foreach($csv as $val){ list($li_no, $li_date, $li_comment) = split("\t",$val); if($li_no == $info_no){ $csv[$info_no] = "$id\t$date_y/$date_m/$date_d\t$comment\t\n"; fputs($fp,$csv[$info_no]); fclose($fp); } } }else{ $dat = "$id\t$date_y/$date_m/$date_d\t$comment\t\n"; $fp = fopen('$csv' , 'w'); fputs ($fp, $dat); for ($i=0; $i<1000;$i++){ fputs ( $fp,$csv[$i]); } fclose($fp); } 編集用のフォームで$info_noを飛ばして、 CSVファイル内の$li_noと一致した場合、 $li_noの行を書き換えという処理をしているつもりなのですが、 なぜか、他の行がすべて消えて、 編集した行だけがファイル内に残ります。 いろいろと検索して試してはみたのですが、 どうもうまくいきません。 どなたか教えてください。 お願いします。 これ以外の方法で簡単にできる方法があれば そちらも教えていただけたら幸いです。

    • ベストアンサー
    • PHP
  • 変数部分の書き方について

    PHPでcsvファイルに書き込む形の掲示板を作っています。 最後のfputについては、下記で、1301-T.dat に書き込む形としました。 $fp = fopen('../../data/1301-T.dat', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); 【やりたいこと】 この掲示板の、1301-T.datを変数としたいと考えています。変数は<?php echo $row_id['uni_id']; ?>という形でSQLファイルから取得可能です。 【問題点】 下記のようにするとエラーとなります。 $uni_id の部分の書き方について教えていただきたくお願いいたします。 $uni_id = "../../data/"$row_id['uni_id']".dat"; $fp = fopen($uni_id, 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp);

    • ベストアンサー
    • PHP
  • PHPから書き換え

    尻取りゲーム用に書いたPHPスクリプトの一部ですが CGIに書き換える方法がよくわかりません。 教えていただけませんでしょうか。 ============================================ if(isset($_POST['shiritori'])){ $rest = mb_substr($shiritori, -1, 1, "SJIS"); $hajime = mb_substr($shiritori, 0, 1, "SJIS"); if(($name != "") && ($shiritori != "")){ if($hajime == $key){ setcookie("name", $name, $expire); $key = file($keyfile); $fp = fopen($keyfile, "w"); fputs($fp,$rest); fclose ($fp); $word = "".$shiritori."<hr>"; $lines = file($logfile); $fp = fopen($logfile, "w"); fputs($fp,$word); for($i = 0; $i < $logmax-1; $i++) fputs($fp, $lines[$i]); fclose ($fp); } } else{ print"記入漏れはありませんか<br>"; print"次は<b>" .$key. "</b>から始まる語です。<br>"; } ============================================ どうぞよろしくお願いします。

    • 締切済み
    • CGI
  • 取得した列データを行に書き込むには

    取得した列のデータを出力する際に行に対して書き込みたいのですが、 どのように生成すればいいでしょうか。 $row[1]は1列分のデータが読み込まれています。 よろしくお願いします。 $filename = "dltest.csv"; $fp = fopen($filename, "w"); for($i=0;$i<$line;$i++) { $row = mysql_fetch_row($rs); $top=$row[1]; fputs($fp,split(',',$top));

    • 締切済み
    • PHP
  • PHPによる行データのアップダウン

    PHPによる行データのアップダウン フォームからデータ行をGETした内容をアップダウンさせたいのですが、どうにも入れ替えができません。 プログラムコードのアドバイスをください。 *ログファイルの中(data.dat) ゴリラ チューリップ ばなな ストロベリー ペンギン <?php $data = "data.dat"; function row_up() { $lines = @file($data); $lines[$ont] = $lines[$_GET[row]]; //自分 $lines[$_GET[row]] = $lines[$_GET[row]-1]; //前の人 $fp = fopen($data,"w"); rewind($fp); for($i=0;$i<count($lines);$i++) { if($lines[$i] == $lines[$_GET[row]]){ fputs($fp,$lines[$_GET[row]]); } elseif($lines[$i] == $lines[$ont]){ fputs($fp,$lines[$ont]); } fputs($fp,$lines[$i]); } fclose($fp); } function row_down() { $lines = @file($data); $lines[$ont] = $lines[$_GET[row]]; //自分 $lines[$_GET[row]] = $lines[$_GET[row]+1]; //次の人 $fp = fopen($data,"w"); rewind($fp); for($i=0;$i<count($lines);$i++) { if($lines[$i] == $lines[$ont]){ fputs($fp,$lines[$ont]); } elseif($lines[$i] == $lines[$_GET[row]]){ fputs($fp,$lines[$_GET[row]]); } fputs($fp,$lines[$i]); } fclose($fp); } switch($_GET[mode]) { case up: row_up(); break; case down: row_down(); break; default: break; } ?>

    • ベストアンサー
    • PHP
  • 【PHP】CSVファイルの特定行を書き出す

    PHPでCSVファイルを読み込み、特定行のみを別のCSVファイルに書き出したいと思います。 作りたいものは、 http://example.com/file.php?repert=5 とすると、「002.csvファイルの5行目のみ」を「003.csv」に書き込むというものです。 下記で作りましたが、 Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\file.php on line 32 になります。 指摘された32行は ?> の行です。 ググると改行コードのトラブルのようでしたのでCR+LF CR LF と試しましたが、改善されません。 どこが不味いかご教示戴けませんでしょうか? 宜しくお願い致します。 <?php $repeat = $_GET['repert']; $inFile = '002.csv'; // 抽出元ファイル $outFile = '003.csv'; // 結果ファイル $inFp = fopen($inFile, 'rb'); $outFp = fopen($outFile, 'w'); while ($data = fgetcsv($fp, 10000)) { if ($count == $repeat) { { $outLineArray = array( 0 => $data[0], 1 => $data[1], 2 => $data[2] ); fputs($outFp, implode(",", $outLineArray) . ""); } } fclose($inFp); fclose($outFp); exit(); ?>

    • 締切済み
    • PHP
  • PHPでログインフォーム

    PHPで簡易的なログインフォームを作成しようと思っています。 name.csvにてユーザーの名前の管理、 pw.csvにてID,パスワードの管理をしようと考えています。 $name = file('name.csv'); $pw = file('pw.csv'); foreach($pw as $val){ list($li_pw_id ,$li_id, $li_pass) = split("\t",$val); if($li_id == $id){ if($li_pass != $pass){ echo "ログイン失敗"; exit; }else{ foreach($shop as $val){ list($li_shop_id ,$li_shop_name, $info_flag) = split("\t",$val); if($li_pw_id == $li_shop_id){ echo "ログイン成功"; } } } }else{ echo "ログイン失敗"; exit; } } と、上記のようにプログラムを記述すると、 ID・パスワードがあっていてもログイン失敗になります。 echoを使用していろいろ確かめた結果、 $li_idが$idと一致しても最後まで読みこんでしまうため、 最終的に$li_id != $idと判断されてしまっているようです。 どのようにすれば、修正できるのか教えていただきたく思います。 上記以外でも、何かいい案があれば教えて下さい。

    • ベストアンサー
    • PHP
  • phpのCSVの保存について教えてください

    下記のようにinputタグから値をphpにおくり、csvファイルに保存しようとしています。 値1に12345 値2に67890 値3にあいうえお というように値を送って保存し、csvファイルを開くと、 12345," 67890",あいうえお というように、値2として送ったものの先頭にダブルコーテーションとスペース、最後にダブルコーテーションが勝手に入ってしまいます。なぜ何でしょうか?対処法も含め教えていただければありがたいです。よろしくお願いします。 --------------------html---------------------------------- <form action="send.php" method="post"> 値1:<input type="text" name="aaa" > 値2:<input type="text" name="bbb" > 値3:<input type="text" name="ccc" > <input type="submit" value="送信する"> </form> --------------------php---------------------------------- <?php $val[0] = $_POST['aaa']; $val[1] = $_POST['bbb']; $val[2] = $_POST['ccc']; $fp = fopen("valdata.csv", "a"); fputcsv($fp, $val); fclose($fp); ?>

    • ベストアンサー
    • PHP
  • CSVを作成出来たはいいものの・・

    $file_name = "oz_test.csv"; $fp = fopen( $file_name , "w"); $contents = "\"1列目\",\"2列目\"\n"; fputs($fp, $contents); こんな感じでファイルを作成し、 あとは<A>タグでダウンロード出来るまでに至ったのですが、 CSVファイルが、サーバ上に出来たら出来たまま、ディレクトリに残りますよね? ダウンロードが終われば消し去りたいのですが、 ダウンロード時のみに作成し、終われば消える仕組みにしたい。 (メモリ上に作ったら消える?HDD上に作るから消えない?) (非公開ディレクトリにファイルを作ればダウンロードできないだろうし) 何か手はありますか?

    • ベストアンサー
    • PHP
  • CSVファイルの検索結果表示について

    CSVファイルを検索して検索結果を表示したいのですが、 検索結果を表示できません。 トップページ <form action="search.php" method="get"><input type="text" name="key" size="90"> <input type="submit" name="submit" value="検索"></form> 検索結果を表示するページ <?php $ArrKeywordLength = sizeof($ArrKeyword); $fp = fopen('data.csv', "r"); $Result=array(); while(!feof($fp)){ $ret = fgets($fp, 4096); $lines = strip_tags($ret); $Match=true; for($n=0; $n<$ArrKeywordLength;$n++){ if(!strpos($ArrKeyword[$n], $lines)){ $Match = false; break; } } if($Match === true){ $Result[] = $ret; } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<10;$i++){ $line=explode(",",$Result[$i]); ?> <li><a href="item.php?id=<?=$line[0]?>"><?=$line[1]?></a></li> <?php } } ?> </ul> 上記のプログラムを実行すると、以下のようになってしまいます。 ○件見つかりました ・ ・ ・ ・ ・ 私のやりたいことは、以下のようなCSVファイルがあったら ----------------------------------------------------- CSVファイル 1,あいうえお 2,かきくけこ 3,さしすせそ 4,たちつてと 5,なにぬねの ----------------------------------------------------- <li><a href="item.php?id=1">あいうえお</a></li> <li><a href="item.php?id=2">かきくけこ</a></li> <li><a href="item.php?id=3">さしすせそ</a></li> <li><a href="item.php?id=4">たちつてと</a></li> <li><a href="item.php?id=5">なにぬねの</a></li> のように出力したいのですが、 どのように改良すればよいのでしょうか? わかってる方からすれば笑われるようなことかもしれませんが、 PHP初心者なので、本を読みながらいろいろ試してみても、 全然うまくいかないので、どなたか教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP