PHPによる行データのアップダウン

このQ&Aのポイント
  • フォームからデータ行をGETした内容をアップダウンさせたいのですが、どうにも入れ替えができません。プログラムコードのアドバイスをください。
  • ログファイルの中のデータ.datについて、行データのアップダウンを実装しようとしています。しかし、上手く入れ替えることができません。何かアドバイスはありますか?
  • PHPを使用してフォームからGETしたデータ行をアップダウンさせたいのですが、現在の実装ではうまく動作しません。コードのアドバイスをお願いします。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

file_exists($data_fn = 'data.dat') or trigger_error("{$data_fn} is not found.", E_USER_ERROR); $index = intval($_GET['row']); $data = file($data_fn, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); switch($_GET['mode']) { case 'up' : $index > 1 && swap($data, $index, $index - 1); break; case 'down' : $index < count($data) && swap($data, $index, $index + 1); break; } file_put_contents($data_fn, implode(PHP_EOL, $data)); function swap(&$data, $index1, $index2) { (isset($data[$index1]) && isset($data[$index2])) or trigger_error('Range error', E_USER_WARNING); $tmp = $data[$index1]; $data[$index1] = $data[$index2]; $data[$index2] = $tmp; return -1; }

関連するQ&A

  • 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で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のファイル操作についてご教授ください 同じサーバー内に置いている同じ環境の別ドメインに設置した 同じPHPの挙動が異なる為、その原因を教えて頂きたいです。 ファイルへ保存した場合の改行の有無についてです。 以下一部を抜粋しています。 初期状態(abc.txtの中身) -----ここから----- すもも<>あんず<>すいか<> -----ここまで----- ▼以下を実行 [入力内容] data01:すもも data02:あんず data03すいか $log_file = 'abc.txt'; $lines = ""; $fp = fopen($log_file, "rb+"); set_file_buffer($fp, 0); flock($fp, LOCK_EX); $freadsize = @fread($fp,filesize($log_file)); $freadsize = chop($freadsize); $lines = explode("\n",$freadsize); $lnum = count($lines); for($i=0;$i<$lnum;$i++){ $lines[$i] = "$lines[$i]\n"; } array_unshift ($lines, "$data01<>$data02<>$data03<>$blank"); rewind($fp); $lnum = count($lines); for($i=0;$i<$lnum;$i++){ if(preg_match("/^[0-9]{10}<>+/",$lines[$i])){$check = 1;}else{$check = 0;} if($check == 1){ fputs($fp,$lines[$i]); } } ftruncate($fp, ftell($fp)); flock($fp, LOCK_UN); fclose ($fp); ▼実行後(abc.txtの中身) りんご<>ばなな<>ぶどう<> すもも<>あんず<>すいか<> 別のドメイン下では、改行されません。 りんご<>ばなな<>ぶどう<>すもも<>あんず<>すいか<> この同じPHPを同じサーバー内の別ドメインで 実行した場合、改行される場合と改行されない場合があるのです。 ドメインが異なる以外は同じ環境のはずなのですが、挙動が異なります。 改行をして保存したいのですが、改行されないドメイン下のPHPは array_unshift ($lines, "$data01<>$data02<>$data03<>$blank"); ↓ array_unshift ($lines, "$data01<>$data02<>$data03<>$blank\n"); としています。 何故挙動が異なるのでしょうか? 文字コード、改行コードは同じです。

    • ベストアンサー
    • PHP
  • 親記事を削除するとレスも削除

    いつも参考にさせてもらっています。 タイトルどおりなのですが、 親記事を削除すると親Noを含むレスをすべて削除できるように $lines = file('res.log'); for ($i = 0; $i < count($lines) + 1; $i++) { $items = explode("\t", $lines[$i]); if ($items[1] == $_GET['oya_del']) { $dno = $i; $dnum2++; if ($dnum) array_splice($lines $dno, $dnum2); $fp = fopen('res.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } } と、記述しています。 しかしレスが2つ以上あると、1つ残ってしまいます。 どのようにしたらよいのか教えていただけないでしょうか。 お願いいたします。

    • ベストアンサー
    • PHP
  • 1行目と2行目の間にデータを書き出すには・・・。

    私はプログラマではないのですが、会社でPHPプログラムの修正を頼まれてしまいました。 ■現在のプログラム ----------------------------------- $fp = fopen( $CSVFileName, "a+" ); $a = fseek($fp,0,SEEK_END); $ret = fputs( $fp, $CSV_SJIS); fclose($fp); ----------------------------------- 現在は、以上のような方法で新しいデータを追加しているのですが、これをデータファイルの2行目に追加するように変更して欲しいと言われています。 なぜ、そのような要求が出たかというと、データファイルというのがCSV形式のファイルで、1行目にはExcelで処理するための列名(項目名)が入っています。よって2行目に新しいデータを追加したいのです。 どなたか詳しい方がいらっしゃいましたら、回答をお願い致します。

    • ベストアンサー
    • PHP
  • PHPカウンタのデータファイルのパスについて

    PHPカウンタのデータファイルをひとつ上の階層に置いて3つのページで共有したいのですが、 $fp="fopen("counter.dat"," "r+"); 上記パスを $fp="fopen("../counter.dat"," "r+"); このように記述するとエラーになってしまいます。 やり方が間違ってますでしょうか? 以下ソースです。 <?php $fp="fopen("counter.dat"," "r+"); $count=fgets($fp, 6); $count++; fseek($fp, 0); fputs($fp, $count); fclose($fp); ?><BR> <?php echo sprintf('%05d',$count); ?> 初心者の質問で申し訳ありませんが、 ご回答のほどよろしくお願い致します。

    • ベストアンサー
    • PHP
  • これは・・・・

    $fp = fopen ($IMODEFILE, "w"); fputs($fp, $data); fclose($fp); がエラーにでるのですが・・・・ どうしたら解決できますか? 初心者ですいません・・・

    • 締切済み
    • PHP
  • 書き込みデータフォルダの切り替え

    jump.php ./001/log ./002/log ----------------------------- 下記PHPのログファイルの書き込みをフォームから(001・002・・) $name=$_POST[name]; で得た値のフォルダへ振り分けてデータの書き込みしたいのですが うまくできません。 ----------------------------- 改変前 $logfile = $logdir."/$y-$m-$d.txt"; 改変後 $logfile = $name."/".$logdir."/$y-$m-$d.txt"; ----------------------------- ご指導よろしくお願いいたします ----------------------------- $logdir ="log"; // if($_POST[r]){ $y=$_POST[y]; $m=$_POST[m]; $d=$_POST[d]; $H=$_POST[H]; $i=$_POST[i]; $word=$_POST[word]; $name=$_POST[name]; $pass=$_POST[pass]; if($pass != $adpass){die("パスワードが違います"); } if( eregi("[^0-9]",$d) || eregi("[^0-9]",$m) || eregi("[^0-9]",$y)){ die("半角数字のみ有効です。"); } if(!checkdate($m,$d,$y)){die("その日は存在しません。"); } $logfile = $name."/".$logdir."/$y-$m-$d.txt"; if(file_exists($logfile)){ $lines = file($logfile); $fp = @fopen($logfile,"w"); for($j=0;$j<count($lines);$j++){ fputs($fp,$lines[$j]); } @fputs($fp,$H.":".$i.$word.$name."\n"); @fclose($fp); }else{ $fp = @fopen($logfile,"w"); @fputs($fp,$H.":".$i.$word.$name."\n"); @fclose($fp); } header("Location: $_SERVER[PHP_SELF]"); exit; } -----------------------------

    • 締切済み
    • PHP
  • PHPでCSVファイルの特定行のみ表示

    PHPでCSVファイルを読み込ませるにあたり、「クエリで指定した特定の1行だけ」を取りだしたいと考えています。 下記だと、1行目からクエリで指定した特定行までの抽出が可能です。 hoge.php?repert=5  → 1から5行目までが表示される。 従い、下記から特定行より上の行を削除すれば、当方が考えている「クエリで指定した特定の1行だけ」を取りだすことになりますが、その方法がわかりません。 ご教示いただきたくお願いいたします。 <?php $repeat = $_GET['repert']; $fp = fopen("file2.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; $count++; } fclose ($fp) ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう