弐ch編集のphp講座
まず最初は<?php
print("始まり");
?>
これでいいです ↑で指摘されてるように、
書き込むデータの改行を<br>じゃなくて\nにしないと
読み込んだときに複数データとしてばらしてもらえないよ。
それが証拠に5行以上表示されてるでしょ?
つまりforが機能していない。
$bbs[0]に全部のデータが1行で格納されちゃってます。 単純にコレ
$msg="$msg\n";
だけじゃダメみたいですな。 リロードで書き込ませたくなければ・・・
ヒント
1:HTMLフォームの、nameが変数名に、valueが変数の値となる。
2:リロードの際は送信ボタンは押されない
3:一番最初にやった条件分岐を使う
やってみよう。 >>48
HTMLは<br>がないと改行されない。
ファイルは\nがないと改行されない。
だから両方入れればよい。
ファイル書き込みの際に\nを入れて、
HTML表示のprint()のときに<br>を入れる。
これがスマートなんかな。
ファイルに<br>書き込んじゃってもいいけどね。 苦労してるなぁ。
PHPの場合は
<?=$value?><br>
がスマートっぽい なるほど。できた。
http://s7.xrea.com:8080/~readcgi/nihen/ex.php >>150さんのやりかたで改行は出来たけど再読み込み処理が出来ないよん。
ただいま修行中。 ちなみに、
test.php
と一緒に
test.phps(中身はtest.phpと同じ)
ってファイルを作ってアップロードしておくとweb上からtest.phpのソースが参照できるよ。 再読み込みつか、リロードしても書き込まれない処理、のことでした。
ゴメソ。 ファイルに書き込む処理を、送信ボタンが押されたときのみにすればいい。
たぶん今は呼び出されるたびに書き込むようになってるんじゃない?
それだとリロードどころか最初に呼び出したときにも空文字書き込んでると思うよ。
とりあえず処理とhtmを一緒にしないかifを使うか?
これで改行をかいれタンだけど、、どうかな?ドキドキ
<HTML>
<BODY>
<FORM method="POST" action="bbs.php"><INPUT size="20" type="text" name="msg"><INPUT type="submit" value="送信"></FORM>
<?php
if($submit=$msg)
{
$fl = "log.htm";
$filename = fopen("$fl","a+");
fwrite($filename,$msg."\n");
fclose($filename);
$bbs=file("$fl");
}
for($i=0;$i<5;$i++)
{
print("$bbs[$i]<BR>");
}
?>
</BODY>
</HTML> あれごめん書き込みのいちおかしいや、治してうpする
↑は無視して あれ基礎的なこと色々わすれてるや〜、じゃあ今日は休みで
基礎から俺も勉強しなおしてくるんで、明日、明後日再開です
ご め ん な つーか勉強できるような日じゃなかったしね・・・
そーす。
http://s7.xrea.com:8080/~readcgi/nihen/source.php?ex.php <HTML>
<BODY>
<FORM method="POST" action="bbs.php">
<INPUT size="20" type="text" name="msg">
<INPUT name="submit" type="submit" value="送信">
</FORM>
<?php
if($submit=="送信")
{
$filename = "log.htm";
$fp = fopen($filename ,"a+");
fwrite($fp,$msg . "\n");
fclose($fp);
$bbs=file($filename);
}
for($i=0;$i<5;$i++)
{
print("$bbs[$i]<BR>");
}
?>
</BODY>
</HTML>
これでどうかな?
ちょっと今動作確認できる環境が手元にないんで確認できないんだが。
ミスってたらごめん。
おそらく159の意図どおりリロードで書き込まないようになってると思う。
ただこれだと最新5件じゃなくて最初の5件にならない?
追記モードって確か最後に付け足すんじゃなかったっけ。
最新5件にするにはforの部分を少しいじらなきゃいけないな。 >>164
それだとリロードするとlogの内容も取得できなくない?
<HTML>
<BODY>
<FORM method="POST" action="bbs.php">
<INPUT size="20" type="text" name="msg">
<INPUT name="submit" type="submit" value="送信">
</FORM>
<?php
if($submit=="送信")
{
$filename = "log.htm";
$fp = fopen($filename ,"a+");
fwrite($fp,$msg . "\n");
fclose($fp);
}
$bbs=file($filename);
$bbs=array_reverse($bbs);
for($i=0;$i<5;$i++)
{
print("$bbs[$i]<BR>");
}
?>
</BODY>
</HTML>
でリロードの場合投稿されず&最新の5件を表示になると思う。 >>165
ありがと、やり方忘れてた、感謝〜〜!!!!
わかり易いようにソース書き直したけどいいのかな??
解説
<?php
$fl="log.htm";
if($msg)
{
$fp=fopen("$fl","a+");
fwrite($fp,$msg."\n");
fclose($fp);
}
$bbs=file($fl);
$bbs=array_reverse($bbs);←array_reverseっていう関数は
配列を逆にして返すって意味ね
for($i=0;$i<5;$i++)
{
print("$bbs[$i]<BR>");←それで逆から読みだしてる
}
?>
次回とう言うか今日だが本格的にテーブル等を使い掲示板を作る! >ミニヘン
お前漏れこのスレ楽しみにしているので
せいぜいがんばってください。 fclose($fp);
header("Location: ./bbs.php");
じゃダメ? ういうい。
http://s7.xrea.com:8080/~readcgi/nihen/test3.php
http://s7.xrea.com:8080/~readcgi/nihen/source.php?test3.php $msg=ereg_replace("<", "<", $msg);
$msg=ereg_replace(">", ">", $msg);
タグ消し >173
$msg = htmlspecialchars ($msg);
こんなんでいいの?
上のスクリプトに足してみた。
タグ禁止。 >>174
著作権表示消したらいかんよ
/* source view==PHP4 Only!== by ToR */
/* ->source.php?target.php */
>68
反応遅れてごめんなさい〜。
こんなページあったんだ・・・。
とりあえずみてみるよ。
ありがと〜。
そういえば、PHP4.1.0からpost/getされたデータを
グローバル変数で取り出すの、非推奨になってたんだね。
>176
ゴメソ。まともにダウンせずに、サイトに直で載ってたソースコピペしちゃってた。
直しまスた。
出来たできた〜、
やっぱフレームやめたは
ビルダー作だけど
htmlから
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 6.5.0.0 for Windows">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE></TITLE>
<BODY bgcolor="#619fbe" text="#ffffff">
<BLOCKQUOTE>
<form method="post" action="bs.php">
<DIV align="center">名前<BR>
<tt><INPUT name="name" type="text" size="24"><br>
本文<br>
<TEXTAREA name="com" cols="21" rows="9"></TEXTAREA><br>
<input type="submit" value=" Send "><br>
</tt></DIV>
</form><hr>
<?php
/* 設定 */
$logfile = "sample2.htm";//ログファイル名
$viewmax = 5; //表示行数
$logmax = 100; //保存最大行数
/* 書き込み処理 */
if($name && $com)
{
$com = str_replace("\r\n", "\r", $com);//Win系は\r\n
$com = str_replace("\r", "\n", $com); //Mac系は\r
$com = nl2br($com);//改行文字の前に<br />追加
$com = str_replace("\n", "", $com);//\n除去
$dat = "<P align=\"center\">$name<BR><BR><BR>$com</P>\n";
//ログに書き込む
$lines = file($logfile); //いままでのログを配列に読み込む
$fp = fopen($logfile, "w"); //ログをオープン(空になる)
fputs($fp,$dat); //データを書き込む(先頭に)
for($i = 0; $i < $logmax-1; $i++) //いままでの分を追記
fputs($fp, $lines[$i]); //(配列0-98→現ログ1-99行目)
fclose ($fp);
}
//表示処理
$lines = file($logfile);
for($i = 0; $i < $viewmax; $i++)
{
print("$lines[$i]<HR>");
}
?>
</BLOCKQUOTE>
</BODY>
</html>
ここ結構マネてんだけどね
http://php.s3.to/tt/tt5.php#multi
↓ソース解説、少しまってちょ <?php
/* 設定 */
$logfile = "sample2.htm";//ログファイル名
$viewmax = 5; //表示行数
$logmax = 100; //保存最大行数
/* 書き込み処理 */
if($name && $com)←&&は〜と〜って意味
{
$com = str_replace("\r\n", "\r", $com);//Win系は\r\n←str_replace関数は置き換え関数みたいな感じ
$com = str_replace("\r", "\n", $com); //Mac系は\r
$com = nl2br($com);//改行文字の前に<br />追加←<BR>タグいれてくれる関数nl2br
$com = str_replace("\n", "", $com);//\n除去
$dat = "<P align=\"center\">$name<BR><BR><BR>$com</P>\n";
//ログに書き込む
$lines = file($logfile); //いままでのログを配列に読み込む
$fp = fopen($logfile, "w"); //ログをオープン(空になる)
fputs($fp,$dat); //データを書き込む(先頭に)
for($i = 0; $i < $logmax-1; $i++) //いままでの分を追記
fputs($fp, $lines[$i]); //(配列0-98→現ログ1-99行目)
fclose ($fp);
}
//表示処理
$lines = file($logfile);
for($i = 0; $i < $viewmax; $i++)
{
print("$lines[$i]<HR>");<HR>は水平線
}
?>
宿題
何か作ってきて
次回 明日はお休み
カウンタ作ってみる? すまん急いで作ってんでわけわからんかもしれん、
またすっげー(・∀・)イイの作ってだすから〜ん!
今回わけわからんかった人も次の解説まってチヨ! >>184
>何か作ってきて
だった。何かって・・? >>184
ぃゃぁあのhtmlを駆使してイカシテル掲示板とか、
じゃんけんスクリプトとか何でもいいんで、おもろいもん、自分で
何か作るのが一番の勉強だからさ
>>186
俺が?
あと
>>167
>>168
ありがとーう!!!
>>169
意 味 が わ か ら ん
>漏れこのスレ楽しみにしてるから
ありがとう
>>せいぜいがんばれよ
はぁ?どっちやねん(´ω`;;;;) じゃあ寝るんで、お休みなさい明後日から再開します
じゃぁ! ミニ編さん、perlをやってるのですが、
PHPを勉強する利点ってありますか? >>181
ミニ編さま、講師おつかれさまですー。
個人的に 181の別解おもいついたのですが、効率を重視して(?)、
こういうのはどうでしょうか?
181の書き込み処理を軽くすませる方法(・∀・)
新たな命令 array_shift / array_slice / implodeつかってしまいました(´Д`;)
181の14行目〜21行目
//ログに書き込む-----------------------------------------------------------------------
$lines = file($logfile); //いままでのログを配列に読み込む
$lines = array_shift($lines,$dat); //配列の先頭に新しい要素(データ)を追加
$lines = array_slice($lines,0,$logmax); //配列の先頭[0]の要素から、指定個数($logmax)だけ残す
$write_data = implode($lines,""); //配列の内容を1つの文字データに結合
$fp = fopen($logfile,"w"); //ログファイル書き込みオープン
fwrite($fp,$write_data); //書き込み
fclose($fp); //クローズ
//------------------------------------------------------------------------------------- {192の補足コメント}
一度ログを配列にとりいれたのなら、配列だけで一度に新しい情報の追記などの処理をしてしまう。
書き込みは最後にfwrite一度のみで、済ませていまふ。
今回はforループ内で書き込み処理を使っていません。
forループで繰り返し書き込み処理(fputやfwriteなど)を行うと、保存行数が増えたとき、
(たとえば非現実的ですがログ保存行数が5000行とか)重くなるなど、のデメリットがあるため。
保存行数5000行ならループを5000回繰り返すことになるです(゚∀゚;)
以上、勝手な解釈ですみませぬ。m(_ _)m 1 名前:ミニ編 ◇aCDPDEl2 投稿日:2002/02/13(水) 22:07
http://pc.2ch.net/test/read.cgi/php/1012902013/l50
ここに俺odnADSLだからしばらく書けないかもって書いてきてください
ですって 1 ミニ編 ◇aCDPDEl2 2002/02/13(水) 22:07
俺odnADSLだからしばらく書けないかも
193のarray_shiftはarray_unshiftの間違いでしたm(_ _)m
失礼しました。 負荷のことはよくわからないが、
193のやり方がすっきりしてていいと思う。
でもどちらがサーバにやさしいんだろう?
5000行ぽっちじゃなくて
50万行くらいいったら差が出るんかな?
>>200
ステップ数よりも処理の内容によるでしょ。 >>200
50万行を配列にいれちゃうの?
ブルブル… あ、なんか勘違いしてた(;´Д`)
逝ってきます。 >202
foreachで回さない限り、破綻はしないけどね。
ま、アクセスが強烈なサイトだったらやめた方がいいかもね。
一日一万アクセス程度のサイトだったら、50万レコードの配列程度じゃびくともしなかったよ。
(ていうことは、やったということだけどね)
ちなみにサーバは、500MHz程度のペンティアムに512MBのメモリのLinuxだった。
whileで回して、lastで抜けてたけどね。 >205
foreachは、配列をいったん評価してからループにはいるから、配列の中身が50万個あると、
その50万個を評価するのに時間とリソース食う。
whileなら、さみだれ式に処理するから、めっかったところでなんか処理したらいい。
ただし、keysやvalues使っちゃうとwhileでも巨大なメモリ消費になるので、危険は危険。
eachで逐次処理するのが一番もっともらしいかな?
ただ、重いのは重いよ、やっぱし。
どきどきしちゃう。 Web Arena って PHP3.PHP4使用できるって書いて有るけど、制約が有るみたいな事も書いてある
普通に動かすことってできるのですか?
過去ログに有ったらすみません、場所教えてください。
PHP 素人です。 >>208
ホスティングサービスのPHP制限って言ったらセーフモードだろ(予想
あと、スレ違いな( `Å´) ミニ弐編!早く帰って濃い! みんなお前を待ってるぞ! いや、セーフモードでいいと思うよ
制限かかってるといってもsystem()とかそういうやつなので
こった事やろうと思わないなら問題ないと思う ereg(.., .., $regs);
$regs[1] ←$1 ミニ編いなくなっちゃったから、俺がしきるかなヽ(´ー`)ノ >>218
出来るけど自分でやれ。
もしくは30万円で作ってやる。 書き込めるかtest、書けたらレス書くから待って! >>216 ????
まあ一応ここ見て解決したが、
http://www.php.net/manual/ja/function.preg-replace.php
はまったのは取り出した$1を展開する時
=======================================
例 2/e 修飾子の使用法
preg_replace ("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
=========================================
置換する式を""でくくららいといかん
わーい書けた〜、
>>191
phpの利点だが、早い,webprog専用なので関数がいっぱいあって楽!
逆にwebprogにしか使えないとも言えるが、、
IPなんて一行で抜ける、レイアウトとスクリプトの役割分担しやすい
だめなとこ
鯖は改善されてきたが、これといった本が無いな、こんなもんだよ
>>214
セーフモードってうpロダとか使えないんじゃなかったっけ?
>>217
おお!お願いできる?今日の講座終わったら次から よ ろ し く!
>>218
3週間もあれば書くけど、、自分で作ったほうが早いよー
じゃぁ最近リアルで忙しいんで最後の講座でーす!
続きは>>217さんか他の方ができたらやってもらいたいなぁ
カウンタを作ってみよう!
<?
$filename = "count.dat";
$file = fopen($filename,"r");
$count = fread($file, filesize($filename));
fclose($file);
$count++;
print("$count");
$file = fopen($filename,"w");
fwrite($file, $count);
fclose($file);
?>
解説
<?
$filename = "count.dat";←$filenameはcount.datにする
$file = fopen($filename,"r");←読み専用で開ける
$count = fread($file, filesize($filename));←
fread関数はfread(読み込むファイル,読み込むサイズ)
でfilesizeで$filenameの大きさ測った
fclose($file);←閉める
$count++;←$countに1足す
print("$count");←表示カウンタ
$file = fopen($filename,"w");←カク専用で開ける
fwrite($file, $count);←書く
fclose($file);←閉める
?>
じゃぁ、俺編は今日で最後です〜。。
これで興味を持った人や初めてphpを触って面白いと思った
人がいたら凄く嬉しいです。。
あとレッツphpさん俺もあなたのページ凄く好きですよ!
番外編-お勧めphpエディタ-&-お勧めページ-
エディタ↓
http://www2s.biglobe.ne.jp/~t-susumu/toclip/library/tpad.html
ページ↓
http://php.s3.to/
http://www.dcl.info.waseda.ac.jp/~hasegawa/php/
ここで覚えたんでソースそっくりです
誰か俺が教えてやるぞーって人いたらやってください
長い間楽しかったです、じゃぁ! ミ二編 >>ミニさん
お疲れ様でした。
つうかできればこんどはもうちょっと上のレベルを
あなたに教えてほし(略) >>227
また時間が出来たら中級編でもやるよー。じゃぁおつかれさまでした!
>>228
よりたいなら素直によりたいって言えば?あほちゃうか おつかれ〜
これでPHPに興味を持ったよ。本も買ったしね。
中級編楽しみにしてるね >>233
PEAR?確かSoftwareDesignに乗ってたと思われ。 あぼんぬがイパーイになちゃたね。
ともあれ、ミニヘソさんオツカレでした。
おいらもPHPちょいと勉強してみる気になりました。 はじめまして、とても勉強になりました。
あと、下記でPHPの本が丸ごと一冊ダウンロード出来ます。
通称マンモス本
http://www.php.gr.jp/php/php4tettei/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| おい! オカマ野郎出てこい!
∧ ∧ |/\_________
(,,゚Д゚)____.
(つ/~ ※ ※ \
/※ ※ ※ ※ \
>241
thx!
>242
そのAA使わないでくれる?
荒らしだと思われたくないから。 ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/⌒ヽ) < 荒らしに使われてる…
〜(___ ) \_____________
''" ""''"" "'' てか、なぜmegabbsでやらないの?
今までいろいろ類似スレ立ててたみたいだけど、いっこうに答えてくれてないぞ。