トップページphp
1001コメント342KB

【PHP】下らねぇ質問はID出して書き込みやがれ 85

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2009/06/15(月) 22:53:52ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 84
http://pc11.2ch.net/test/read.cgi/php/1240835951/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0822nobodyさん2009/07/26(日) 16:17:49ID:???
func0.phpで
func0()呼んで
適当な配列にでも入れとけばいいじゃん
インタフェースの統一ってのが意味不明
0823nobodyさん2009/07/26(日) 17:56:26ID:???
ID:VnzjqimA
こいつはとんだしったかだな
算数の質問しにくるような馬鹿が金融系開発?
釣りもほどほどにしとけ
0824nobodyさん2009/07/26(日) 17:59:23ID:???
ID:VnzjqimA は第二のISSEIになれる
アイディアを盗まれる前に起業すべき
http://itpro.nikkeibp.co.jp/article/COLUMN/20080104/290425/

>>821
*** data.php
<?php return array(1, 2, 3);
*** main.php
<?php $a = include 'data.php';

データをわざわざ実行コードにする必要性は?なければ別のフォーマットを選ぼう
serialize()/unserialize(), json_encode()/json_decode(), fgetcsv()/fputcsv()
0825nobodyさん2009/07/26(日) 18:33:08ID:???
ISSEIって初めて聞いたけど、
 ・ファイル名に変換
 ・VisualBasic
 ・ストップウオッチを片手に処理速度を計測
あたりが凄まじくネタっぽいな
0826nobodyさん2009/07/26(日) 18:47:06ID:???
記事よんだけどこれはねえわw
08277892009/07/26(日) 19:42:47ID:???
>>824
私もそう思ってました
第二のIKKOになれるようにがんばります。

ikko "どんだけ〜";
0828192.168.0.7742009/07/26(日) 19:51:13ID:+70USpzn
echo ($aaa!='' ? "$aaa. " : '')
echoのリファレンスを見ました。でも、↑のようなものについては見当たりませんでした。
これは、どのように解釈したらいいんでしょうか?また↑の出力結果は同じになりますか?
これと似た構文でC言語にもありますか?
よろしくお願いします。
0829nobodyさん2009/07/26(日) 19:57:38ID:???
こちらはPHPのスレです
0830nobodyさん2009/07/26(日) 20:58:41ID:???
>821
function call_func($func_number){
 require_once('func' . $func_number . '.php');
 $result = func();
 // おぞましい黒魔法でfunc()の定義を削除
 return $result;
}
黒魔法の詳細は
ttp://jp2.php.net/manual/ja/function.runkit-function-remove.php
引数以外のもの(環境変数などのスーパーグローバルなど、関数からアクセスできるもの)で処理を分けるなら、勿論それでもいい。
まあ、オススメできない。俺なら、func1 - func9で定義される関数func()には別名を使っておく。
そうすりゃ、衝突を気にしなくていいからな。

OOP的なプログラム構造にするなら、まずメソッドfunc()を持つ別個のクラスを10個用意する。
で、上記call_func()は、直接結果を返すのではなく、引数などに応じて適切なファイルをrequireしてクラスのインスタンスを返す。
呼び出し側は$obj->func()を呼べば、望む結果が得られる。

メモリ消費を気にするなら、そもそも16,000なんて大きさの配列を作るべきではない。
毎回16,000個の変数を全部使う、ってんなら話は別だけどな。
0831nobodyさん2009/07/26(日) 23:39:25ID:???
>>830
>>799
0832nobodyさん2009/07/27(月) 12:02:48ID:TX4gysr6
PHPで$_SESSIONを扱うライブラリを書いています。
しかしユニットテストを書いて実行すると、
Cannot send session cookie - headers already sent
というエラーが出てテストできません。
まあ当たり前と言えば当たり前なんですけど、でもテストできないのも困ります。
こんなとき、どうすればいいでしょうか。
つまり$_SESSIONを扱うライブラリで、Cannot send session cookie エラーを回避しつつテストするにはどうしたらいいでしょうか。
0833nobodyさん2009/07/27(月) 12:13:13ID:???
>>824
>サンプルデータ約110万件のデータ検索時間は約1秒になった

たった110万件のデータの中から特定のものを抽出するのに1秒掛かるの?速いの?
0834nobodyさん2009/07/27(月) 12:29:27ID:???
ストップウォッチってw
実行開始と終了で引き算して結果をどっか隅っこにでも出力すればいいのに
なんでそんなとこでアナログマなんだよ
0835nobodyさん2009/07/27(月) 12:36:51ID:???
そんな訳の分からない数字を客に見せたら、
問い合わせが来るだろうが。

夏休みは、学生の知ったかばかりだな。
0836nobodyさん2009/07/27(月) 12:46:59ID:???
ストップウォッチだとネットワークやOSやブラウザの影響かかるんじゃなのかなぁ
0837nobodyさん2009/07/27(月) 12:47:40ID:???
>>832
出力バッファリングは?
0838nobodyさん2009/07/27(月) 13:10:36ID:???
>>835
google
aho の検索結果 約 4,440,000 件中 1 - 10 件目 (0.12 秒)

おまえはこれを否定してるんだな
それこそ知ったか、もし社会人なら恥ずかしくて自殺するレベルだぞ?
0839nobodyさん2009/07/27(月) 13:13:54ID:???
>>838
検索エンジンという特殊事例を出してきて、
しかもgoogleの一例だけで全てを語るこの薄っぺらい脳みそwww
0840nobodyさん2009/07/27(月) 13:23:46ID:???
往生際が悪いやつだなw
検索エンジンの何が特殊事例なんだ?やってることは同じだろ
指摘を素直に認められないなんて、なんてちっぽけな人間なんだよ
0841nobodyさん2009/07/27(月) 13:26:02ID:???
お前が極論好きのお馬鹿な学生だということはよく分かった。
0842nobodyさん2009/07/27(月) 13:32:02ID:???
で、お前らのDBだと110万件のデータを検索するのに何秒掛かるの?
0843nobodyさん2009/07/27(月) 13:34:04ID:???
ポスグレだが、40万件あるアクセスログのデータで、1.4秒かかった。
0844nobodyさん2009/07/27(月) 13:34:15ID:RGhhhkQi
system()又はexec()に関しての質問です

system('ls')で望む結果は取得できたのですが
system('history')では何も出力されません(エラーも)
ソース下記状態です

<?
ini_set ( "display_errors", "1" );
ini_set('error_reporting', E_ALL);
system('history');
?>

サーバの/bin/以下をみるとlsがあるのにhistoryがありませんでした
これが関係していると思うのですが、コンソールからhistoryとうつと問題なく履歴が表示されます
そしてwhereis historyとうつと
[root@www bin]# whereis history
history: /usr/share/man/man1/history.1.gz /usr/share/man/man3/history.3.gz

のようにmanしかひっかからないのですが
historyはどこにあるのでしょうか?
また、そもそも
system('history');
が無反応なのは/bin/にhistoryがないから、で合ってるんでしょうか?
0845nobodyさん2009/07/27(月) 13:35:01ID:???
>>837
なるほど、出力をバッファリングすれば、もしかしたらエラーがでないかも。
試してみます。どうもありがとう。
0846nobodyさん2009/07/27(月) 13:37:12ID:???
>>835-841
ケンカすんなよw

>>835氏は、通常のwebサイトやシステムで、実行時間を隅っこに表示するのはおかしい。
>>838氏は、実行時間を隅っこに表示する事は珍しい事ではない(検索エンジンなど)

と言ってると俺は読んだ。そして両方言ってることは間違ってないと思った。
0847nobodyさん2009/07/27(月) 13:37:37ID:???
>>844
historyは通常のコマンドじゃなくて、shell内のみで利用可能な命令。
cdとかと同じで、system()では実行できないと思うよ。
もし$HOME/.bash_history とかあれば、それを読み込んで表示するしかないと思う。
0848nobodyさん2009/07/27(月) 13:39:54ID:???
>>844

Manpage of BASH_BUILTINS
http://www.linux.or.jp/JM/html/GNU_bash/man1/builtins.1.html

historyは組み込みコマンド。
0849nobodyさん2009/07/27(月) 13:44:50ID:???
検索完了までの実行時間を売りにしているのだから検索にかかった時間を表示するのは正しいやり方だ
0850nobodyさん2009/07/27(月) 14:26:50ID:RGhhhkQi
>>847 と他の方も

ありがとうございました
$HOME/.bash_historyから読み込めそうです
後学の為に組み込みじゃないコマンドをしっておきたいのですが
【組み込みじゃない】のをぐぐるときのキーワードを教えて頂けますでしょうか
0851nobodyさん2009/07/27(月) 14:31:28ID:???
ttp://www.linux.or.jp/JM/html/util-linux/man1/script.1.html
0852nobodyさん2009/07/27(月) 14:33:53ID:???
>>850
組み込みコマンドを覚えた方が早いのでは?
0853nobodyさん2009/07/27(月) 14:37:36ID:???
includeって文頭以外ではするべきではない?
文中でしても作法的におかしくはない?
0854nobodyさん2009/07/27(月) 14:40:06ID:???
文中でしなきゃいけないときもあるだろう
0855nobodyさん2009/07/27(月) 14:45:33ID:jUhtLxSq
ですよね。
どうもです〜。
0856nobodyさん2009/07/27(月) 14:57:47ID:???
とはいえ、文中でやらなくて済む方法は考えるけれど。
そして、たいてい代替案はある。
08578532009/07/27(月) 15:15:40ID:???
>>856
設定ファイルを外部ファイルにしててそれを読み込もうとしてるんですけど
phpファイルの変数として定義されてるものです。
<?php

$hoge=13

?>

みたいな。
改修なので設定ファイル自体のフォーマットはかえられないので
includeしかないかなと
08588562009/07/27(月) 15:21:36ID:???
レガシーシステムなら仕方ないかもね
0859nobodyさん2009/07/27(月) 15:22:45ID:???
変数定義だけなら文頭でもよさそうだけど何か理由があるのか
0860nobodyさん2009/07/27(月) 15:25:35ID:???
設定ファイルならiniにしてparse_ini_fileでもよさそうだけど何か理由があるのか
0861nobodyさん2009/07/27(月) 15:32:56ID:???
そっちは理由書いてあるじゃない
08628562009/07/27(月) 15:56:32ID:???
>>859
読み込むファイルが以下のような内容なんだけど、
局所化したほうがいいかと思って

Class hoge1{
Function hoge2(){
//ここで使う
}
Function hoge3(){
//ここで使う
}
Function hoge4(){
//ここでは使わない
}
}
0863nobodyさん2009/07/27(月) 16:19:15ID:???
設定ファイルのフォーマットが変えられないのにそれは可能なのかい
0864nobodyさん2009/07/27(月) 16:20:14ID:???
includeはJAVAのimportのように使うのがいいんじゃないかね
importとincludeじゃ意味あいが違うけど
0865nobodyさん2009/07/27(月) 16:22:58ID:???
>>863

それとは?
プログラムの変更は可能だけど、そういうことではなく?

Class hoge1{
Function hoge2(){
//ここで使う
include hoge.php
}
Function hoge3(){
//ここで使う
include hoge.php
}
Function hoge4(){
//ここでは使わない
}
}
0866nobodyさん2009/07/27(月) 17:38:33ID:iOuW4Vu1
【OS名】win32
【PHPのバージョン】5.3.0
【質問内容】
filesize関数を使って

1.ファイルサイズを取得
2.ファイルを書き換え
3.ファイルサイズを取得

としたとき、ファイル書き換え後にファイルサイズを取得しても、取得した値は書き換え前のものになってしまいます。
解決方法はありますか?
0867nobodyさん2009/07/27(月) 17:40:26ID:???
PHPで実行時間を求める方法

<?php
$time_begin = microtime(true);

/* expression */

echo "実行時間".(microtime(true) - $time_begin)."秒";
?>

チラ裏
0868nobodyさん2009/07/27(月) 17:41:01ID:???
>>866
ttp://jp2.php.net/manual/ja/function.clearstatcache.php
0869nobodyさん2009/07/27(月) 17:46:09ID:iOuW4Vu1
>>868
解決しました
ありがとうございます
0870nobodyさん2009/07/27(月) 21:41:14ID:JxRE4otA
質問します
例えば名簿アプリでmeibo_tableにループで10回(10人分)のデータをループで入れるとします
このとき、登録がうまくいった場合は「成功」失敗したら「失敗」と表示するケースで、
どのようにプログラムを書けば良いんでしょうか?
for($i=0; $i<10;$i++){
$rs = mysql_query($sql);
if(!$rs){
$err = 1;
}
}
if($rs){ echo "失敗";}else{echo "成功";}

こんな感じですか? どうも自信がないというか、もっと良いやり方がないか知りたいです
トランザクションというのがあるのも知っていますが、使い方がrollbackなどいまいちわかりません
その辺も含めて教えてもらえたら嬉しいです
よろしくお願いします
0871nobodyさん2009/07/27(月) 21:43:09ID:???
>>865
クラスにするんだったら
includeは一箇所のほうがいいと思うけどなぁ。。
で、変数の内容はprivateなメンバに入れとくかんじ。

もっとそれっぽく書くなら
フレームワークなんかのConfigとかいう感じのクラスを
参考にしてみるといいかも。
0872nobodyさん2009/07/27(月) 21:55:43ID:???
>>870
mysql_queryのエラー自体はその方法で判別できる。
エラー内容はmysql_errorで取得できる。
トランザクションについては、mysqlの場合InnoDBとかでないと出来ないので注意。

>>871
「改修なので設定ファイル自体のフォーマットはかえられない」とあるので仕方がないんじゃない?
0873nobodyさん2009/07/27(月) 21:58:52ID:???
ループを10回まわした後で成功・失敗を出しても、それって一番最後(10回目)
の結果だけしか見てないんじゃあ。
ていうか$errは何に使うんだ
08748722009/07/27(月) 22:10:57ID:???
ちょwwよく見てなかったw

最後のif文は$errを見ないと意味無いな
あと「$err = 1;」の行の前後でmysql_errorなどでエラー内容拾っておいたほうがいい
0875nobodyさん2009/07/27(月) 22:13:45ID:zLQPD/lR
【OS名】Fedora 11
【PHPのバージョン】PHP5.3.0
【連携ソフトウェア】特になし
【質問内容】
社内の簡易報告システムを作っています。
そのシステムのメニューをPHPで作っていて、入力した内容を別のdatファイル、
もしくはtxtファイルに入出力で保存する処理をするように設計しています。
そのメニューPHP内でチェックボックスを使用しているのですが、
チェックを入れて、セーブボタンを押すと、チェックを入れた内容が保持され、
PHPを開くたびにチェックしている状態、チェックしていない状態を表示させたいです。
今考えているのは、チェックボックスの配列を用意して、以下のような処理をし、
数値が1の時は表示画面で、チェックボックスがON、数値が0の時は表示画面で、チェックボックスがOFFという風に
処理をし、チェックボックスの状態に変更があった場合は随時更新していくという風にしたいのですが、
どういう風にチェックのスクリプトを書けばよいのか分かりません。
html部のチェックボックスにチェックが入っているのは、PHPでどのように判断させればよいのでしょうか?

chk[0] = 1; // 配列の数値が1の時はチェックボックスON
chk[1] = 0; // 配列の数値が0の時はチェックボックスOFF
chk[2] = 1; // 配列の数値が1の時はチェックボックスON
chk[2] = 1; // 配列の数値が1の時はチェックボックスON
0876nobodyさん2009/07/27(月) 22:17:00ID:???
簡単な一行掲示板を作ってます
書き込みというボタンのとこが文字化けを起こるのですが
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
と書くと治りました。
なぜですか? 
某所からダウンロードしたソースには<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
と書いてないのですが・・・
08778762009/07/27(月) 22:17:45ID:On6c+/Yd
ID忘れてました
0878nobodyさん2009/07/27(月) 22:21:48ID:???
>>872
形式変える必要はないよ。使いかたを変えるの。

設定ファイルで設定した変数(って分かりにくいな)を直に触るんじゃなくて
間にイチマイ挟む。

もしひとつのクラスでしか使ってないのなら、メンバ変数にしてもいいし
複数のクラスで使うんなら「設定値を保持してるクラス」を導入して
そのクラス経由で使うっていう。

まぁ。。そこまでやるかっていうのはあるけど
せっかくクラス使ってんならそういう方向で考えたほうがいいかなぁって。
0879nobodyさん2009/07/27(月) 22:48:01ID:???
>>873,874
ありがとうございました
$errで判別するのを書き間違えました
ご意見参考にして、やり直してみます
0880nobodyさん2009/07/27(月) 22:49:44ID:???
>>875
よく分からんけど$_POST
>>876
ソースの文字コードがshift-jisだったから?
0881nobodyさん2009/07/27(月) 22:57:18ID:???
>876
コンピュータは、文字をデータとして、つまり一種の数字として保存している。
例えば、「11」なら「あ」、「15」なら「お」、「23」なら「く」みたいなイメージな。数字と文字を1:1対応させるわけだ。

で、日本語をデータとして表現する方法、つまりこの対応付けにはいくつかの種類がある。これを文字コードという。
たとえば、「あ」は、Shift_JISコードでは16進数の「82A0」、EUC-JPコードでは「A4A2」、UTF-8コードでは「E38182」という数値として格納されている。
(16進数ってのは、htmlの色指定のアレと同じ。09の次が0Aになって、0Fの次が10になる数値の表現方法)

で、コンピュータは文字を表示する際に、「82A0」を「あ」へと再変換しないといけないわけだが。
上記のように、日本語を数値として表現する方法にはいくつか種類があるので、「このデータは、どの種類の方法で文字を数字に直したものなのか?」が分からんと日本語に戻せないわけだ。
大体の場合自動で上手い事判別してくれるわけだが(3通り試して一番それっぽいのを選ぶとか)、たまにミスる。ミスった場合、文字化けが発生する。

文字化けさせないためには、ミスらないようにすればいい。
そのためには、自動判定に頼らず、「このデータはどの文字コードで文字を表現したものか」をきちんと指定すればいい。
そのための方法のひとつがmetaタグ。

ちなみに、アルファベットは「ASCIIコード」という統一標準があるので、まず文字化けしない。
0882nobodyさん2009/07/27(月) 23:02:18ID:5jW2DCWq
質問です。

今利用しているレンタルサーバに拡張モジュール BC MATH が入っていないのですが、
ぜひ BC MATH を使いたいと思っています。

そこで、単純に BC MATH に属する関数をまとめた PHP ファイルを include する考えに至ったのですが、
この拡張モジュールに含まれる関数(bccomp とか)の PHP 版のソースコードはどこかにないでしょうか?

詳しい方よろしくお願いします。
0883nobodyさん2009/07/27(月) 23:13:36ID:???
>>882
それってソースはPHPじゃないよ。
Cか何か、つまりPHPのソースの中に含まれてる。
じゃないとPHP上で数字型データの制約を外部から
書き換えることはできない。(文字型演算に突っ込む
という手があるけど最悪CPU100%食ったままタイム
アウトなんてくらいの負荷がかかる可能性がある)

ちょいと難しいんじゃないかな
0884nobodyさん2009/07/27(月) 23:23:42ID:???
斬新な発想だな
0885nobodyさん2009/07/28(火) 00:04:32ID:IxhPfTut
>>883
助言ありがとうございます。
引数をString型で受けとるなどの処理をすれば、PHPでも同様の機能を実現することは不可能ではないので、
PHPで書かれた同機能の関数を探していました。
そもそも邪道というか、必要とされない手段だから誰も作らない=見つからないのでしょうか。

>>884
普通はこういう場合、どのような手段をとるのでしょうか?
アドバイスをいただけると助かります。
0886nobodyさん2009/07/28(火) 00:33:26ID:???
>>875
まずは、これを読んでください

◯HTML フォームで配列を使用するにはどうすればよいですか?
http://www.php.net/manual/ja/faq.html.php#faq.html.arrays

これら内容に従うことで、チェックされた項目を配列として取得出来ます。

後は、保存された内容と比較すればよいでしょう
0887nobodyさん2009/07/28(火) 03:26:44ID:UNpQ8CBn
>>886
そのページを参考にチェックボックスの処理はすることができましたが
datもしくはtxtに保存された内容と比較はどうすればいいのでしょうか
txtファイルには110010011... といった風にチェックボックスを入れたところは1、
そうでないところは0と記載されているのですが表示画面に反映できません
0888nobodyさん2009/07/28(火) 03:39:40ID:???
if文でok
0889nobodyさん2009/07/28(火) 03:45:50ID:???
>>885
どの言語でもライブラリがなければ自分で作るし>>882の考えは普通よ
大抵の場合PEARにあがってるから使ってあげようぜ
http://pear.php.net/package/Math_BigInteger
0890nobodyさん2009/07/28(火) 03:48:06ID:???
User Contributed Notesに一杯書いてあると思うが
0891nobodyさん2009/07/28(火) 03:53:16ID:UNpQ8CBn
>>888
if文でいけました
しかし、チェックを入れてセーブボタンを押すとチェックを入れたチェックがすべて消えて、
もう一度セーブボタンを押すと反映されたものが表示されます
こういった風になるのは普通なのでしょうか?
0892nobodyさん2009/07/28(火) 03:57:41ID:UNpQ8CBn
さらに、チェックボックスをひとつだけオンにした状態で保存し、
反映さえた後にそのチェックボックスをオフにするとすべてオフといった状態に反映されません。
何がいけないのでしょうか?
0893nobodyさん2009/07/28(火) 04:08:31ID:???
簡素化した検証コードのせられる?
0894nobodyさん2009/07/28(火) 04:25:47ID:UNpQ8CBn
少々お待ちください。
0895nobodyさん2009/07/28(火) 05:11:11ID:UNpQ8CBn
>>893
ttp://www.rupan.net/uploader/download/1248725391.txt
パスはphpです。
check.phpとファイル名を変えて、別途check.txtファイルをご用意ください。
0896nobodyさん2009/07/28(火) 06:46:46ID:???
>>895

<?php
$n = 10;
//書き込みロジック
$text = "";
if (isset($_POST['chk'])) {
 for ($i = 0; $i < $n; $i++) {
  if ($_POST['chk'][$i]) {
   $text .= "1\n";
  } else {
   $text .= "0\n";
  }
 }
 file_put_contents("check.txt", $text, LOCK_EX);
}
//表示ロジック
$list = file("check.txt");
for ($i = 0; $i < $n; $i++) {
 if ((int)$list[$i]) {
  echo "<input type=\"checkbox\" name=\"chk[{$i}]\" value=\"{$i}\" checked>{$i}<br>\n";
 } else {
  echo "<input type=\"checkbox\" name=\"chk[{$i}]\" value=\"{$i}\">{$i}<br>\n";
 }
}
?>

なるべくシンプルに書いたつもり
インデントに全角スペースつかってるのでそのままコピペしても動かないので注意
原因は・・・ロジックの流れにあると思うけど詳しく調査してる時間もないので
詳しい人に任せるとしよう
0897nobodyさん2009/07/28(火) 07:04:16ID:???
チェックがすでについてる状態から
すべてのチェックをオフにした場合
ii (isset($_POST['chk']))が働かないので更新されない
だからそこは変えたほういいよ
前回の状態と比較してかわってたら更新とかにすると
またやることが増えるので
単純にPOSTされたときに更新すればいいのだから
if ($_POST)とかにしたほうがいいと思う
0898nobodyさん2009/07/28(火) 08:19:20ID:UNpQ8CBn
>>896
ありがとうございます
とりあえずコピペして動作確認をしてみたのですが、
やはり配列0の箇所が反映されません
>>891の修正は完璧でした

>>897
if ($_POST)にしてみたのですが、動作は変わりませんでした
0899nobodyさん2009/07/28(火) 08:41:56ID:/osX6Bgi
>>889
ありがとうございます!
PEARは導入したことがなかったのですが、使用してみようと思います!
0900nobodyさん2009/07/28(火) 08:47:54ID:/osX6Bgi
使おうかと思って Math_BigInteger をダウンロードしてみましたが、
クラス内で BC MATH 関数を使用しているようでした…;;
0901nobodyさん2009/07/28(火) 09:35:09ID:???
有効桁数だけの問題なら、mySQL があれば、一行クエリを投げればいいじゃん。
0902nobodyさん2009/07/28(火) 10:28:24ID:???
>>898
今手元に環境がないから動くかわからないけど、
array_fillで初期化してあらかじめ配列を用意しておいたらどうだろうか?
0と1だけ入れればいいのなら、
$n = 10;
if (isset($_POST['chk'])) {
 $text = "";
 $tmp = array_fill(0, $n, 0);
 foreach ($_POST['chk'] as $key => $value) {
  $tmp[$key] = 1;
 }
 foreach ($tmp as $value) {
  $text .= $value."\n";
 }
 file_put_contents("check.txt", $text, LOCK_EX);
}
チェックボックスに何もいれなかったらエラーが出たり、
>>897の指摘にあるようなことがおきるので正常終了のための条件が必要。
チェックボックスが空の状態でもページを読み込んだ初期の状態でも、
おそらく!$_POST['chk']の状態であるので一工夫必要。
0903nobodyさん2009/07/28(火) 12:16:04ID:iDr4ntOe
phpって変数や配列の初期値=NULLって保証されているのでしょうか?
それともCみたくゴミが入ってることもあり得るのでしょうか?
0904nobodyさん2009/07/28(火) 12:20:17ID:???
>>903
http://jp2.php.net/manual/ja/language.variables.basics.php
0905nobodyさん2009/07/28(火) 12:29:54ID:???
>>903
いきなり宣言するのが気持ち悪いならなんでもござれ
0906nobodyさん2009/07/28(火) 14:14:11ID:nFAJUBt9
phpで円グラフとか作る必要があるのですが、
一番いいモジュールってどれでしょうか?

できればフリーで。
0907nobodyさん2009/07/28(火) 14:23:31ID:???
>>906
GDじゃだめ?
0908nobodyさん2009/07/28(火) 14:32:23ID:???
素の GD を勧めるか…。
ttp://pchart.sourceforge.net/
0909nobodyさん2009/07/28(火) 18:13:11ID:???
>>900
ドキュメントぐらい読もうぜ
GMP/BCMath/俺俺実装のいずれかを使うって書いてあるでしょ
> Uses the GMP or BCMath extensions, if available,
> and an internal implementation, otherwise.
0910nobodyさん2009/07/28(火) 19:06:49ID:???
グラフを作るライブラリなんてありがちすぎてどれがメジャーなのかわからん
0911nobodyさん2009/07/28(火) 19:13:18ID:???
だから聞いているんだろうな
0912nobodyさん2009/07/28(火) 19:58:38ID:???
お手軽なのはGoogle Chart
異論は認める
0913nobodyさん2009/07/28(火) 20:09:28ID:???
jpGraph は一昔前の定番だったような
0914nobodyさん2009/07/28(火) 20:16:49ID:???
PEAR Image_Graphって、もうメンテされてないんだな。
サンプルが豊富にあって、重宝してたんだが

↓サンプルサイト
http://pear.veggerby.dk/samples/
0915nobodyさん2009/07/28(火) 20:46:32ID:???
>>892
>>886に書いたページの次のFAQ
◯"select multiple" タグで選択された全ての結果を取得するには どうすればよいですか?

ここに
「... count() 関数を使えば選択された項目の数を知る ことができます。...」
と書かれています。

つまり、チェックを付けた箇所しか値が飛んできません。
チェックを外しても、値は飛んできません。
(PHPの仕様として、このページ以外のところに書かれてるとは思うのですが、不明です。)

従って、何番目をチェックしたかも保存する必要があるでしょう

例えば、保存フォーマットを
番号=チェック状態
とするとか...

この場合、file関数で配列展開した後、各行に対してexplodeで番号とチェック状態に分解すればよいでしょう。



0916nobodyさん2009/07/28(火) 20:48:52ID:???
ちなみに、>>891後半の
「もう一度セーブボタンを押すと...」の所も同じ原因でしょう
(全てoffのため、$_POST['chk']がセットされず、ファイル更新されなかった。多分)

>>891の前半は不明。
$list = file("check.txt");
の直後に、print_rかvar_dumpで$listの内容を表示してみると何か原因が見えてくるかもしれない
0917nobodyさん2009/07/28(火) 23:38:24ID:sYVzfVPt
【OS名】WindowsXP
【PHPのバージョン】PHP5.2.9(XAMPP1.7.1)
【連携ソフトウェア】特になし
【質問内容】
PHPで以下のコードを書いたときに配列の値が出力されません。
原因を教えてください。
<?php
class Sample{
public $i;
public $arr = array("A", "B", "C", "D");
function Sample(){
$this->i=0;
}
function output(){
while($this->i < count($this->arr)){
print("$this->arr[$this->i]<br>");
$this->i++;
}
}
}
$samp = new Sample();
$samp->output();
?>

出力結果
Array[0]
Array[1]
Array[2]
Array[3]

foreachを使用する方法ならうまく出力されますが、この方法だと
なんでうまくいかないのかわかりません。
0918nobodyさん2009/07/28(火) 23:52:34ID:???
>>917

print( $this->arr[$this->i].'<br>');
または
print( "{$this->arr[$this->i]}<br>");
0919nobodyさん2009/07/29(水) 00:09:58ID:4FaRK/k2
>>918
ありがとうございました。期待する表示がされました。

これってどういうことなんでしょうか?
print関数に渡す前に$thisを解決しておく必要があるということでしょうか?
0920nobodyさん2009/07/29(水) 00:19:05ID:???
ダブルクオート中でアロー演算子(->)と配列([])が文字列として扱われてるだけ
シングルクオートの場合は変数すらも文字列として扱われる

○ "$var<br>";
○ "{$var}<br>";
× '$var'<br>;
× '{$var}<br>';
○ $var . "<br>";
○ $var . '<br>';

× "$this->a[]<br>"
○ "{$this->a[]}<br>"
○ $this->a[] . "<br>"
0921nobodyさん2009/07/29(水) 00:34:24ID:4FaRK/k2
>>920
おお、なるほど。
解説ありがとうございました。
レス数が900を超えています。1000を超えると表示できなくなるよ。