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

【PHP】ID出さなくても質問OKなスレ【初心者歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/09/15(月) 18:41:32ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0413nobodyさん2008/12/09(火) 18:48:28ID:???
>>396
ttp://www.sitepoint.com/article/hierarchical-data-database/
これの、日本語訳相当のもの、あったよ。
ttp://www.mysql.gr.jp/mysqlml/mysql/msg/12071
図を参照するならここ
ttp://dev.mysql.com/tech-resources/articles/hierarchical-data.html

要約すると、トーナメント表のようにツリー概念をフラットなテーブルで表現するには
Adjacency List モデルとネストセットモデルがある。
Adjacency List モデルは親子を登録しておいて再帰で取りに行く形で
すぐにおもいついて実装はすぐできるが、パフォーマンス的に無駄があるし大量のデータは扱えない。
ネストセットモデル(>>404氏が書いてるLR方式)の方が検索性に優れている。
ネストセットモデルの更新は若干トリッキーなので更新中はロックを正しく実装する必要がある。

カテゴリー管理などツリー構造を扱うときはネストセットモデルがFAなので、
覚えておいて損はないよ。
0414nobodyさん2008/12/09(火) 18:59:25ID:???
XML形式のデータをフラットに書き下す時もネストセットモデルだよね。
もしこれよりうまいモデリング手法があるんなら俺も知りたい。
0415nobodyさん2008/12/09(火) 19:04:23ID:???
検索性に優れるのは衝突を限りなく無視できるハッシュ法だ
0416nobodyさん2008/12/09(火) 19:09:18ID:???
ハッシュで検索が効率がいいのは、ターゲットが限られているとき。
特定ノード配下から条件指定で検索など、実用コードを書いたら一気に重くなる。
もしくは、全データをメモリに読み込むとか、Web用としては使えんと思うが、
ハッシュで実用的なツリー構造を扱う新理論でもお持ちで?
0417nobodyさん2008/12/09(火) 19:13:34ID:???
ないよ
10年後ぐらいには実用になるさ
0418nobodyさん2008/12/09(火) 19:14:59ID:???
おいw
0419nobodyさん2008/12/09(火) 19:15:25ID:???
次の初心者さん、どうぞ
0420nobodyさん2008/12/09(火) 19:17:37ID:???
トーナメント表なのに難しく考えすぎてないかね
0421nobodyさん2008/12/09(火) 19:21:27ID:???
データの探索アルゴリズムと格納法の話がごっちゃになってないか
0422nobodyさん2008/12/09(火) 19:22:11ID:???
トーナメント表をDBでやりたいってことはさ。
甲子園なんかで、決勝進出チームが、本大会、県大会で戦ったチームのうち
左ピッチャーからどのくらい打って何点差で勝てたかとか、
過去のデータを蓄積してデータ検索をサクっとやりたいわけでしょ。
高度な部類だと思うけど、違うのかな?
0423nobodyさん2008/12/09(火) 19:24:36ID:???
>>421
ごっちゃっていうより表裏一体でしょ。
格納あっての探索。探索を考慮しての格納じゃなくて?
0424nobodyさん2008/12/09(火) 20:02:49ID:oaG+U8nz
>>413
わざわざ丁寧に教えて頂きありがとうございました。
0425nobodyさん2008/12/09(火) 20:17:02ID:???
もう全部ファイル書き出して検索はグーグル先生に頼れよ
0426 2008/12/09(火) 23:48:38ID:???
WWW_JAILって何ですか?
0427nobodyさん2008/12/09(火) 23:54:36ID:???
>>424
「教えて下さり」じゃないか?
0428nobodyさん2008/12/10(水) 00:06:02ID:???
>>427
スレ違いの質問でしょうか?

確かに
教えて下さりありがとうございました

または
教えて頂きありがたくおもいます

が正確なのかも知れませんね
04293872008/12/10(水) 01:13:56ID:???
>>388
完璧な回答、ありがとうございます!。プロパティの中にあったんですね!

0430nobodyさん2008/12/10(水) 15:57:45ID:???
WEB上のテキストフィールドで入力した値を、HTMLの変数Cに格納したいのですが、
どうすれば良いのでしょうか・・・・?
0431nobodyさん2008/12/10(水) 16:29:06ID:???
<form method="post">
<?php
$data = '';
$fieldName = 0;
do {
$data .= array_key_exists($fieldName, $_POST) ? $_POST[$fieldName] : "nodata";
echo "<input type=\"text\" name=\"{$fieldName}\" value=\"" . htmlspecialchars($data) . "\" />";
} while( $_POST && error_log("posted value is " . $fieldName++ . ":" . $data));
?>
</form>
0432nobodyさん2008/12/10(水) 17:20:41ID:???
>>430
HTMLの変数ってなんですか?
0433nobodyさん2008/12/10(水) 18:06:52ID:???
htmlはプログラミング言語です
0434nobodyさん2008/12/10(水) 19:32:34ID:???
HTMLがあれば何でも出来る
0435nobodyさん2008/12/10(水) 20:01:00ID:???
htmlはCを超えます
0436nobodyさん2008/12/10(水) 20:15:34ID:???
質問させて頂きたいのですが

PHPプログラムの中で連続してMySQLへデータを書き込みたい場合
どのように記述すれば良いのでしょうか?

例えば指定条件のデータを一度消去してから
改めて幾つかのデータを入れなおすなど

お分かりになる方よろしくお願いいたします
0437nobodyさん2008/12/10(水) 20:16:40ID:???
消去するプログラムのあとに書き込むプログラムを書く
0438nobodyさん2008/12/10(水) 22:08:32ID:???
関数の戻り値が配列の場合での質問なのですが
class hogehoge {
private $hoge = array("1", "2", "3");

public function getHoge(){
return $this->hoge;
}
}

$hogehoge = new hogehoge();
$hogehoge->getHoge()[1];
のように関数の戻り値の配列の要素を1行で取得はできないのでしょうか?
0439nobodyさん2008/12/10(水) 22:11:01ID:???
getHogeの引数で返せばいいんじゃない
0440nobodyさん2008/12/11(木) 09:37:39ID:???
syntax error, unexpected ';'で困ってるんですけど、
どこかおかしいです?
$this->smarty_obj->assign('date_trackbacks_url',spriunf(TEXT_TRACKBACKS_URL, htmlspecialchars(td_get_trackbacks_url(intval($HTTP_GET_VARS['products_id'])), ENT_QUOTES));
0441nobodyさん2008/12/11(木) 09:48:57ID:???
括弧の数も数えられないなら、一行をそんなに長くするなw
0442nobodyさん2008/12/11(木) 09:49:20ID:???
かっこの数
0443nobodyさん2008/12/11(木) 10:47:01ID:???
>>438
構文解析周りが貧弱なので出来ません
array の代わりに ArrayObject を使い、俗に言うメソッドチェインでアクセスする、
またはプロパティ限定でよかったら __get マジックメソッドで代用できます

class Hoge {
  private $hoge = array(1, 2, 3);
  public function __get($name) {
    return $this->$name;
  }
}

$hoge = new Hoge();
echo $hoge->hoge[1];
0444nobodyさん2008/12/11(木) 11:03:02ID:???
こんな感じね
class hogehoge {
private $hoge = array("1", "2", "3");

public function getHoge(){
return new ArrayObject($this->hoge);
}
}
$hogehoge = new hogehoge();
$ahoge->getHoge()->offsetGet(1);
// $ahoge[1]としてもアクセス可能
0445nobodyさん2008/12/11(木) 11:10:35ID:???
>>444
動かないよw
0446nobodyさん2008/12/11(木) 12:43:41ID:???
>>441-442
thx!解決しました。
0447nobodyさん2008/12/11(木) 20:04:24ID:???
テーブル内に
フィールドが2つ japa, engl 行1 a, a 行2 i, b 行3 u, c 行4 e, d 行5 o, e
みたいに入っていたとして
$data = mysql_array(上のテーブルから情報)みたいにMySQLから取得したデータを配列に入れた場合には
フィールド名も含めてどのような形で配列に入っているのでしょうか?

さらにフィールドjapaを選択して頭からa, i, u, e, oと取り出すように
その配列の特定のフィールドだけを選択して次々にデータを取り出す方法は有るのでしょうか

どなたか教えていただけ無いでしょうか
0448nobodyさん2008/12/11(木) 20:14:18ID:???
assign()内で、include出来ますか?
ググっても浅いところでは情報を拾えないみたいなので、
よろしくお願いします。
0449nobodyさん2008/12/11(木) 20:20:40ID:???
>>447
普通は、行レベルでアクセスして順に取得する。
データベースアクセスの基本だから、基本的なサンプルはみんなそうなってる
しかし、工夫すれば、一気に取り出すことも不可能でないが、
内部的にはほとんど同じことなので、行レベルで処理した方が無難

>>448
できる
04504472008/12/11(木) 20:39:36ID:???
>>449
ありがとうございます

それぞれのフィールドの値を別のところで使うので一度の方が良いと思いました
そうしますと
$japaData = mysql_fitch_array()
$englData = mysql_fitch_array()
みたいに2回に分けてデータを取得し2つに分けると良いという事でしょうか?
0451nobodyさん2008/12/11(木) 20:43:19ID:???
>>450
とりあえず、基本的なサンプルを試してみたら?
select * from hoge limit 5;
とかして。
0452nobodyさん2008/12/11(木) 20:50:19ID:???
fitch!
04534472008/12/11(木) 22:55:36ID:???
>>451
あまり知識が無いのでデータベースから読み込む回数を減らした方が
機械に負担が少ないかなと単純に思って出来た発想でした

2回に分けた方が自分としても手っ取り早いので試してみたいと思います

ありがとうございました
0454nobodyさん2008/12/12(金) 01:37:25ID:???
>>450
何がしたいのかよう分からんな
04554482008/12/12(金) 19:18:09ID:???
assign()内で、postされたトラックバックをリスト表示する.phpを
include出来るのは確認できたけど、
思った場所に表示できません(最上部に表示される)。

$this->smarty_obj->assign('trackback', require(trackback.php));

普通に{$trackback}で呼ぶだけじゃダメなのですか?
0456nobodyさん2008/12/12(金) 19:22:02ID:???
requireした中に出力してるから、呼んだ瞬間に出力してるんでしょう。
assignに値を渡したければ、return "$trackbackの中身";
0457nobodyさん2008/12/12(金) 19:22:41ID:???
あぁ、中に出しちゃだめ。
04584482008/12/12(金) 20:24:30ID:???
return $this->smarty_obj->assign('trackback', require(trackback.php));
したら、それ以外の処理がキャンセルされちゃった。。。
これって、調べるとreturnの特性みたいですけど、
回避するにはどうしたらいいですか?それとも勘違い?
0459nobodyさん2008/12/12(金) 20:28:40ID:???
うーん、まじか・・・
>>456
に書いてあること理解できてる?
requireされてるファイルの中で出力するなと、
そして、そのファイルからreturnしろと読めない?
0460nobodyさん2008/12/12(金) 20:31:51ID:???
>>459
あ・・・了解。
たった今、理解したような気が・・・
0461nobodyさん2008/12/12(金) 22:10:32ID:???
先生。。。ダメです。。。

$trackback_for_products = require(DIR_WS_MODULES . FILENAME_TRACKBACKS_FOR_PRODUCTS);
$this->smarty_obj->assign('$trackback_for_products');
0462nobodyさん2008/12/12(金) 22:16:48ID:???
お前は何をやってるんだ?
0463nobodyさん2008/12/12(金) 22:47:25ID:???
シングルクォートだし、代入してるし、
やりたいこととちがうんじゃねぇーの?
04644482008/12/13(土) 23:06:46ID:???
結局、trackback.htmlにincludeして、templateとして使う事にしました。
結果オーライというか、上記本来の使用法かな?とも思ったりするのですが、

後学の為に正解をお願いします。
returnを実行phpで使うのか、includeしたphp内で使って、その結果を実行phpに渡すのか。
assignに渡すのと同じ行でreturn出来るのかなと思ったのですけど、
そんな感じじゃないみたいなので。。。
0465nobodyさん2008/12/13(土) 23:07:39ID:???
×上記本来
○上記が本来
0466nobodyさん2008/12/14(日) 14:17:48ID:???
ぐぐってもみつけられなかったんで知ってる人いたらつД`) タスケレ !!
formからアップロードしたzipファイルを解凍するスクリプト書いてるんですが、
解凍する前にzipファイルの破損をチェックするのってどうやったらできますか?
0467nobodyさん2008/12/14(日) 14:18:44ID:???
マルチはやめぃ
0468nobodyさん2008/12/14(日) 14:30:49ID:???
質問スレいけって言われたからこっち来たんですが・・・
0469nobodyさん2008/12/14(日) 14:32:31ID:???
じゃななんで誘導されてきた旨を書かない?
0470nobodyさん2008/12/14(日) 15:07:29ID:???
すみません言葉足らずでしたorz
0471nobodyさん2008/12/14(日) 15:07:51ID:???
誘導元を見てるなら誘導されていることを知ってるし
元を見てないならマルチかどうか知らんことだし
誘導されてきたことは告げるべきことなのか?
466じゃないけど気になったんで聞いてみる
0472nobodyさん2008/12/14(日) 15:13:56ID:???
自演乙
0473nobodyさん2008/12/14(日) 15:14:33ID:???
誘導レスを見たから、同じ質問を別スレでしたのか
それとも誘導レスを見る前にマルチしたのかどうやって判断するんだ?
時間的に整合性があればマルチじゃないと判断しろよ って言うのか?

誘導された旨を書くのがスマートだろ
0474nobodyさん2008/12/14(日) 15:17:17ID:???
3行目でいいと思うんだけど
ああ誘導があったから来たんだなっと
たしかに実際にはわからんけど悪い方にとり過ぎだと思うんだが
0475nobodyさん2008/12/14(日) 16:28:52ID:???
>>446なんですが、自分のせいで嫌な流れになってすみませんです
0476nobodyさん2008/12/14(日) 16:50:59ID:???
少しややこしいないようですが質問です。(phpはutf-8です。)

iPhoneのメールからある掲示板にメールで投稿する時に絵文字を挿入(タイトルへ)して送ると
普通の文字は大丈夫なのですが絵文字部分が =?utf-8?B?77+9?= という文字列になって表示してしまいます。
iPhoneでは1つの絵文字を書いたつもりなのですが。
同じ絵文字をメールで受信すると菱形の中に?が入ったように化けています。
これをiPhoneで掲示板を見たときはちゃんと絵文字を表示するようにしたいのですが、
どうすれば表示できるようになるのでしょうか?
どなたかその流れを教えてもらえませんか?
0477nobodyさん2008/12/14(日) 19:09:19ID:???
誘導されたなら誘導元のスレでちゃんと誘導先で聞くことを書いたなら
ここで誘導されてきたことを書く必要はない
0478nobodyさん2008/12/14(日) 19:12:05ID:???
>>476
俺それ解決できるよ。
0479nobodyさん2008/12/14(日) 19:14:05ID:???
>>478
de?
04804762008/12/14(日) 19:19:25ID:???
>>478
どう解決すればいいのでしょうか?

0481nobodyさん2008/12/14(日) 19:49:38ID:???
釣り回答だからスルー汁
0482nobodyさん2008/12/14(日) 21:46:26ID:???
お助けください。
wordpressでつくったサイトのトップページに、
ブログの更新情報をPHPで表示したいのですが、

2008.12.14 ブログの更新情報
2008.12.14 ブログの更新情報
2008.12.14 ブログの更新情報

という風に表示するには、どういう記述をしたらいいのでしょうか。
詳しい方お願いします!
04834762008/12/14(日) 21:49:33ID:???
引き続きわかる方いませんか?
0484nobodyさん2008/12/14(日) 21:50:56ID:???
>>482
echo'2008.12.14 ブログの更新情報
2008.12.14 ブログの更新情報
2008.12.14 ブログの更新情報';
0485nobodyさん2008/12/14(日) 21:55:18ID:???
>>483
base64エンコードされたものをデコードし、得られた文字列を出力可能なものに
変換するというのが基本。
しかし、絵文字などはキャリア依存だったりするので、キャリア別のマップを入手して
それに合わせて変換するライブラリを用意する必要があるが、PHPではあまり見かけない。
MobaSiFはPerlだが、これを参考にPHP用のを書いて公開してくれ。
0486nobodyさん2008/12/14(日) 21:57:15ID:???
>>482
WPのスレがブログ板にあるから、そっちで聞けば、(マルチついでに)
04874822008/12/14(日) 22:05:42ID:???
ありがとうございます!
04884762008/12/14(日) 22:17:15ID:???
>>485
レスありがとうございます。
デコードとかしなきゃいけないんですね。
2chに絵文字をいれるとiPhoneでちゃんとひょうじされるのでそんなこともしてあるんですね。
utf-8じゃなくshift-jisだと絵文字はみれるんだけど。
Macでみると・になってたりするけどw
レスをヒントにもう少し悩んで見ます。
0489nobodyさん2008/12/14(日) 23:55:56ID:???
>>485
どこぞの会社様がライブラリをフリーで提供してるぞ
04904762008/12/15(月) 17:50:21ID:???
一応
$subject = mb_decode_mimeheader($subject);
とする事で絵文字は表示するようになったのですが
通常の文字と絵文字を混在すると例えば「あいうえお@@@@@」(←@は絵文字です)な風ですが
=?utf-8?B?44GC44GE44GG44GI44GK77+977+977+977+977+977+977+977+9?=
ってログになってしまいます。
前半のあいうえおが絵文字の中に入ってしまってて後半の絵文字がおかしくなってるように思うのですが
これってどうすれば分離?出来るんでしょうか?
04914662008/12/15(月) 20:24:06ID:???
昨日から自分でなんとかできないかと試行錯誤しているのですが一向に解決できませんorz

phpでzip書庫のテストをする処理方法をご存じの方いらっしゃったら教えてください!!
0492nobodyさん2008/12/15(月) 20:37:18ID:???
それってPHPじゃなくてzipの仕様の問題じゃないの?
zipの仕様に完全に則ってるファイルはzipでそれ以外は破損扱いにすればいいじゃん
04934662008/12/15(月) 21:18:44ID:???
>>492
zipの仕様に完全に則ってるかどうかで判定ということですか。
その方法を調べてきます!
ありがとうございます。
0494nobodyさん2008/12/15(月) 23:30:01ID:???
pearのdbからトランザクション使用してるんだけどrollbackしても自動増加に設定してるプライマリキーが増えたままになるのはなんでなんだ?
0495nobodyさん2008/12/16(火) 01:08:24ID:???
勘違い
0496nobodyさん2008/12/16(火) 04:55:52ID:???
print "aaa\"bbb";

上の記述で Parse error: syntax error, unexpected T_STRING のエラーが出るのですがなぜでしょうか?
.htaccessなどの設定ファイルはすべて削除済みです。
サーバーの設定で影響しそうな箇所があれば教えてください。
print 'aaa"bbb'; でエラーは出ませんが、根本的に解決したいです。
0497nobodyさん2008/12/16(火) 05:30:17ID:???
あ
0498nobodyさん2008/12/16(火) 05:34:28ID:???
>>496
エラー出ないよ
04994962008/12/16(火) 05:39:47ID:???
>>498
すみませんファイル転送時の問題かも知れません。もう少し調べてみます。
05004962008/12/16(火) 06:04:44ID:???
テキストエディタの設定でエスケープ文字が正しく保存されていませんでした。解決しました。ごめんなさい。
0501nobodyさん2008/12/16(火) 18:08:58ID:???

/**
 * @access public

のメソッドにつけるコメントの意味あいがいまいちわかりません。
この辺のドキュメントはありませんでしょうか?
検索しにくく、通常のアクセス修飾子に関してしかでてこず困っております。
0502nobodyさん2008/12/16(火) 18:26:54ID:???
javadocやphpdocというものを探してみれ
0503nobodyさん2008/12/17(水) 00:24:15ID:???
phpの関数内関数はもしかしてグローバル関数になりますか?

クラス内のメソッド内でローカルの関数のつもりで定義したのですが、
クラスのフィールドにアクセスできないみたいで泣けてました。

この辺に関する記述があるドキュメントはありませんでしょうか?
0504nobodyさん2008/12/17(水) 00:28:27ID:???
マニュアル
0505nobodyさん2008/12/17(水) 09:10:43ID:???
>>502
>>501ですが、PEARのphpDocumentorのページからマニュアルのリンクを見つけることができました。
ありがとうございました。

@accessについては、privateをつけるとphpDoc実行時--parseprivateをつけない時にドキュメントに表示されない、
くらいの意味合いみたいですね。

@access
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.access.pkg.html

phpDocumentor Tutorial
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html
0506nobodyさん2008/12/17(水) 10:02:58ID:???
>>504
ありがとうございます。

「関数内関数」で見つけられず、「inner function」で検索したところ
(何故かw)以下のページが見つけられました

PHP: 関数 - Manual
http://jp.php.net/manual/ja/language.functions.php

> PHP では、関数やクラスはすべてグローバルスコープにあります -
> 関数の内部で定義したものであっても関数の外部からコールできますし、
> その逆も可能です。

「例3 関数の中の関数」の例と上記の解説だけではよくわからないのですが、
クラス内メソッドで宣言してもメソッドにならずにグローバル関数になる、という解釈であっているようです。

webでも検索単語がわるいのか、この手の話題を扱っている人がいなくてちょっと悲しい
0507nobodyさん2008/12/17(水) 10:07:45ID:???
>>506

> クラス内メソッドで宣言してもメソッドにならずにグローバル関数になる

こんなことどこにも書いてないでしょ。
基本的過ぎて誰も書かないけど、
マニュアルのクラスとオブジェクト(PHP5)のところも読んでみたら?
0508nobodyさん2008/12/17(水) 10:11:09ID:???
あぁ、ていうかもう少し正確にわかりやすく書いてくれ

クラスメソッドのなかでfunction宣言やclass宣言をしたりインクルードした場合に
内部関数や内部クラスになるかというとそれはない。
PHPでは、functionもclassもグローバルという解釈であってる。
0509nobodyさん2008/12/17(水) 10:13:26ID:???
クラス内メソッドじゃなくてクラスメソッド内な
じゃないと、
クラス内メソッドとして宣言してもと、読み間違える(って俺の日本語力のせい?)
0510nobodyさん2008/12/17(水) 10:23:23ID:???
昔はそれなりに質問らしい質問してたと思うんだけど、近頃は酷すぎるねぇ。
質問もこれだけしてたら質が向上しそうなもんだけど、
>>322を見る限り、池っぷりは明白だし難しいんだろうなぁ・・・
0511nobodyさん2008/12/17(水) 10:24:01ID:???
↑誤爆ですw
05125062008/12/17(水) 17:06:31ID:???
>>507-508
すまそ。ちょっとphpの用語というか全般に慣れてない成果、互換を与えているみたいです。

こういう状況を想定しています。Hoge::mageメソッドのhoge内から$thisにアクセスできないので、
グローバルなんだ、と判断してしまっていました。

class Hoge
{
 var $foo;

 function mage()
 {
  function hoge()
  {
   $this->foo; #アクセスできない!?
  }
 }

}
0513nobodyさん2008/12/17(水) 17:16:56ID:???
>>512
了解。それ、正しい判断です。
■ このスレッドは過去ログ倉庫に格納されています