スレッド表示 | フラット表示〕 全トピック 920 件中 36 番目 次≫ ≪前

php掲示板を改造しています。

created: 2008-09-29 04:19 | modified: 2008-10-16 19:11 | reply: 8

[4234] php掲示板を改造しています。

user: wes | created: 2008-09-29 04:19
良くこのサイトは見ていたのですが、質問させていただくのは初めてですまだまだ初心者ですが宜しくお願いいたします。


普通のphp掲示板の改造をしたいと思っています。

現在書き込まれたデータは log.cgi に入っていて , カンマ区切りになっています。

実際には $no,$hyouji,$url,$HN のようにデータを書き込んでいます。
 
$noは登録ナンバー $hyoujiはデータを表示するかの判断 $urlはアドレス $HNはハンドルネーム です。

質問なんですが、管理画面にチェックボックスとボタンを作って チェックボックスにチェックを入れボタンを押すと $hyouji の値だけが変えられるというものが作りたいのです。($hyouji は投稿時は常に"*"になるようにしてあります。)

$no は登録番号ですのでチェックされボタンを押したら$no のデータを探し $hyouji の値(*)を (-)に自動的に書き換えたいのですが、このややこしいことがどうしても出来ません。

何卒、初心者の私ですがご教示戴けますようお願いいたします。
reply: 4235 4242 返信 編集 削除

[4235] Re. php掲示板を改造しています。

user: ゆうじ | created: 2008-09-30 18:20
こんばんわ。

1)log.cgi から1行ずつ読み込み , で区切って配列に格納する。
2)該当レコードをみつけたら $hyouji の値を更新する。
3)該当レコードをテキストに戻してファイルに書き込む。

プログラムにすることをもっと細かく洗い出して
順を追ってひとつひとつやってくしかありませんが
ややこしいのはどこでしょうか。
Parent: 4234  reply: 4236 返信 編集 削除

[4236] ゆうじさん返信ありがとうございます。

user: wes | created: 2008-10-01 06:21
お返事いただきありがとうございます。

PHPボケットリファレンス という本で勉強中なんですが、恥ずかしながらゆうじさんが提示していただいた3つの項目をどのようにすれば実現できるのか解かりません。

掲げていただいた3つの項目は、頭ではなるほどと思うのですが・・
一つの事がわからないとその後のことが想像出来ません。

例えば、処理をする為のボタンを作ってもボタンを押す事で、その処理にどのように連携すればいいのかなどです。

本に書いてあるものは 例えば”ファイル全体を配列に格納したい”の場合

<?php
//このファイルを配列に格納
$result = file('file.php');
//読み込み結果をダンプ
var_dump($result);
?>

などと実行したい項目についてだけ書いてあり、今回の場合どのように繋ぎ合わせれば思い通りの事が実現できるのか、私にとって複雑でややこしいものとなっています。

今回のものに適合するサンプルなどあればいいのですが、そんな都合の良いのもなど本に載っている筈も無く日々頭を悩ませております、これからもphpは勉強しなければと思っているんですが・・早く理解できるようになりたいです。

ゆうじさん、どのようにすれば私の思っていることが実現出来ますでしょうか? 何卒何卒ご教示下さい。
Parent: 4235  reply: 4237 返信 編集 削除

[4237] ログファイルの更新

user: ゆうじ | created: 2008-10-01 19:55
$_POST の値の妥当性チェックとか
ファイルのロックとか省いてますが
こんな感じの処理になるかと思います。

// ログファイル名
$filename = '/home/user/data/log.cgi';

// 更新対象レコードの$noを $_POST['no'] で初期化
$no = $_POST['no'];

// 更新対象レコードの$hyoujiを初期化
// CheckBoxなので$_POST['hyouji']の真偽を取る
$hyouji = ($_POST['hyouji']) ? 1: 0;

// ログファイルを丸ごと読み込み
$records = file($filename);
// レコード数を初期化
$recCount = count($records);

// 1行ずつレコードを走査
for ($line = 0; $line < $recCount; $line++) {
// 1レコード分のテキストを , で配列に分割
$record = explode(',', $records[$line]);
// $recordの始めの値と$noを比較して対象レコードか判定
if ($record[0] == $no) {
// $recordの2番目の値を$hyoujiで初期化
$record[1] = $hyouji;
// , で連結して $record を配列から文字列に変換し
// $recordsの該当行を書き換える
$records[$line] = implode(',' $record);
// 強制的にループを抜ける
break;
}
}

// 更新対象レコードがあれば、強制的にループを
// 抜けてるので $line は $recCount より小さいはず
if ($line < $recCount) {
// $records を連結してひとつのテキストにする
$records = implode('', $records);
// テキストの $records を ログファイルに書き込む
file_put_contents('log.cgi', $records); // PHP5以降
} else {
// $no に該当するレコードが無かった場合
// 何らかの処理もしくは何もしない
}

// 終了:更新フォームに戻るなどの画面移管
Parent: 4236  reply: 4238 返信 編集 削除

[4238] ゆうじさん本当に感謝いたします。

user: wes | created: 2008-10-02 00:59
たった今仕事から戻ってきました、掲示板にアクセスしたところプログラムが書いてあるので驚きました、それも説明まで書いてありパートごとがわかり易くありがたい限りです。

帰ってきたばかりなので試しもしていませんが、先ずはお礼がいいたくて返事を書いてしまいました。これからどの様に動くかプログラムを少しでも理解しながら動かしてみようと思います。

ゆうじさん本当にありがとうございます、感謝いたします。
Parent: 4237  返信 編集 削除

[4242] チェックボックスとボタン

user: wes | created: 2008-10-05 20:41
ゆうじさんお世話になります。

あれからいろいろ試していたのですが、実は実現できていません。
チェックボックスとボタン(表示するかしないかの判断用)でゆうじさんが書いてくださったプログラムを実行するのですが思い通りにいきません。

以下がボタンとチェックボックスの表示が書いてあるようです。

echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=hidden name=admin value=del>\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<p><input type=submit value=\"表示する\">";
echo "<input type=submit value=\"削除する\">";
echo "<input type=reset value=\"リセット\">";
echo "[<input type=checkbox name=onlyimgdel value=on>画像だけ消す]";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr bgcolor=6080f6><th>表示</th><th>削除</th><th>記事No</th><th>アドレス</th><th>ハンドルネーム</th>";        ・
        ・
        ・
echo "<tr><th><input type=checkbox name=\"$no\" value=edit></th>";
echo "<th><input type=checkbox name=\"$no\" value=delete></th>";
echo "<th>$no</th><td><b>$url</b></td><td><small>$now</small></td><td><small>$sub</small></td>";
echo "</tr>\n";


<input type=checkbox name=\"$no\" value=edit> にチェックを入れて 表示する ボタンを押すと ゆうじさんのプログラムが実行されるようにするにはどうしたらいいのかわかりません。

削除の場合 case で分岐して

switch($mode){
case 'regist':
regist($name,$email,$tag,$sub,$com,'',$pwd,$upfile,$upfile_name,$resto);
break;
case 'admin':
valid($pass);
//if($admin=="log") log_op($pass);
if($admin=="del") admindel($pass);
if($admin=="post"){
echo "</form>";
form($post,$res,1);
echo $post;
die("</body></html>");
}
break;
case 'usrdel':
usrdel($no,$pwd);
default:
if($res){
updatelog($res);
}else{
updatelog();
echo "<META HTTP-EQUIV=\"refresh\" content=\"0;URL=".PHP_SELF2."\">";
}
}


下のルーチンに飛んで行くようですが、

function admindel($pass){


チェックボックスとボタンと飛んでいく先の連携が今ひとつわかりません、どこにプログラムを書けば実現できるのか何卒ご教示いただけませんでしょうかお願いいたします。

一寸質問がわかりにくいかもしれませんが、宜しくお願いいたします。
Parent: 4234  reply: 4244 返信 編集 削除

[4244] Re. チェックボックスとボタン

user: ゆうじ | created: 2008-10-08 01:14
私が書いたコードは、ログの更新処理のみを
流れがわかり良いよう書いたまでで
そのまま使えるものかわかりませんし、
ログの一項目だけを更新するにしても
ココで説明するには複雑すぎます。

ひとまずコードのいたるところにコメントをつけたりして
どこでどのような処理をしているのか
改造元スクリプトを読み込み把握してみてはいかがでしょう。

その上でわからない個所を
ひとつひとつ質問頂ければなんとかがんばってみます。
Parent: 4242  reply: 4245 返信 編集 削除

[4245] ありがとうございます。

user: wes | created: 2008-10-08 08:21
はい、なんとかいろいろ触ってみます。

ご親切にありがとうございます。
Parent: 4244  reply: 4246 返信 編集 削除

[4246] やっとなんとか・・・

user: wes | created: 2008-10-16 19:11
ゆうじさんありがとうございました。

書いていただいたプログラムや資料を参考に思考錯誤しながらですが、やっと思い通りのものが出来上がりました。

お手数をお掛けいたしました、これからも壁にすぐにぶち当たると思いますのでその節は何卒宜しくお願いいたします。
Parent: 4245  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 36 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑