トップページphp
853コメント275KB

【PHP】初心者コーナー 3 Released【スローモード】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/11 06:24ID:???
PHPに関するアホな質問はここで、マターリやろな。
ファイル MySQL PostgreSQL 正規表現でも なんでもいってみ
でもな、アホな質問であっても詳しく質問しろよ。 ネタはおもしろく書けよ。

前スレ http://pc2.2ch.net/test/read.cgi/php/1048442813/l50

■PHPの普通の質問はあっちな、【PHP】質問スレッド Part8
 http://pc2.2ch.net/test/read.cgi/php/1050249148/l50
■PHPへ移行したいPerl信者はあっちな、【待望】PerlユーザのためのPHP入門
 http://pc2.2ch.net/test/read.cgi/php/1046326634/l50
■マニュアル嫁ってうるさいのがいるからちょっとは嫁な、
 http://www.php.net/manual/ja/
■おまえ初心者なら入門本くらいかっとけな、PHP関連の書籍(但しPHP出版系お断り)
 http://pc2.2ch.net/test/read.cgi/php/985315574/l50
■これはなズープスと読むらしいがあっちな、XOOPS
 http://pc2.2ch.net/test/read.cgi/php/1031736248/l50

でもな、ここで書きたかったらここで書き。 あとは関連な、>>2 
0002nobodyさん03/06/11 06:24ID:???
■ 本家
 http://www.php.net/
■ 日本 PHP ユーザ会
 http://www.php.gr.jp/
■ PHP マニュアル
 http://www.php.net/manual/ja/
■ PEAR マニュアル
 http://pear.php.net/manual/ja/

■【待望】PerlユーザのためのPHP入門
 http://pc2.2ch.net/test/read.cgi/php/1046326634/l50
■PHP-users ML ヲチ
 http://pc2.2ch.net/test/read.cgi/php/1031734100/l50
■【PHP】Smarty【Template】
 http://pc2.2ch.net/test/read.cgi/php/1047225437/l50
■ PHP アップグレード報告スレッド
 http://pc2.2ch.net/test/read.cgi/php/987259309/l50
■ PHP + MySQL
 http://pc2.2ch.net/test/read.cgi/php/983250751/l50
■ PHP + PostgreSQL
 http://pc2.2ch.net/test/read.cgi/php/983128806/l50
■ PHP 関連の書籍 (但し PHP 出版系お断り)
 http://pc2.2ch.net/test/read.cgi/php/985315574/l50
■ perlスクリプト⇒phpスクリプト移植要望スレ
 http://pc2.2ch.net/test/read.cgi/php/1035700861/l50
■ YomiサーチPHP化プロジェクト
 http://pc2.2ch.net/test/read.cgi/php/1044371877/l50
■ せっかくだからPHPで掲示板作ってみませんか?
 http://pc2.2ch.net/test/read.cgi/php/1035700861/l50
0003nobodyさん03/06/11 06:27ID:kzWk23HI
よっしゃ、3ゲット
0004nobodyさん03/06/11 06:31ID:???
う・ん・こ♪
0005nobodyさん03/06/11 06:32ID:???
4 げっちゅー
0006nobodyさん03/06/11 06:32ID:???
うんこかぶった
0007nobodyさん03/06/11 13:44ID:lWApjllN
phpでmysqlのテーブルの削除・コピーをおこなう命令を教えてください。
0008nobodyさん03/06/11 13:53ID:???
>>7
PHPに関しては、このあたりのページをブックマークしておくと便利だよ。
http://www.php.net/manual/ja/ref.mysql.php

MySQLに関しては、
http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_toc.html
0009nobodyさん03/06/11 13:55ID:???
MySQLのマニュアルの見にくさは異常
0010nobodyさん03/06/11 22:32ID:???
クラスに詳しいサイトないですかね?
英語でもいいんで・・
どなたかタノム
0011nobodyさん03/06/12 00:25ID:???
>9
確かに(見難さには)同意するが、それはPHPのマニュアルに
慣れすぎてる部分が多分にあるからかと。
あとmysql.comの方は結構使えるで。
0012nobodyさん03/06/12 23:40ID:FX+eijnO
質問です。
ttp://www.komonet.ne.jp/script/f_mail2/komomail.htm
ttp://www.komonet.ne.jp/script/f_mail2/komomail.phps(PHPソース)
上記のメールフォームを改造してチェックボックスを配置したいのですが、
HTML側のソースは、
<input type="checkbox" name="abc[]" value="hoge01">hoge01
<input type="checkbox" name="abc[]" value="hoge02">hoge02
<input type="checkbox" name="abc[]" value="hoge03">hoge03
<input type="checkbox" name="abc[]" value="hoge04">hoge04
を追加し、PHP側のソースに
for( $i=0; $i<count($abc); $i++ ) {
print $abc[$i] . "<br>\n";
}
print "<input type=\"hidden\" name=\"sabc\" value=\"$abc\">\n";
を追加しまして動作させたところ、
確認ページでは正常に表示されたのですが、ソースを見ると
<input type="hidden" name="sabc" value="Array">
とvalueの値がどのチェックボックスを選択しても「Array」になってしまい、
このまま送信してもメールにも「Array」と表示されてしまいました。
この「Array」の部分を「hoge01」「hoge01,hoge04」
のように表示させるにはどうすればよいのでしょうか。
宜しくお願いします。
0013nobodyさん03/06/13 00:03ID:???
PHPソースみじけ
value=\"$abc\"ここはArayだかだ$abc[$i]だとおもうど、
00141203/06/13 00:20ID:???
>>13
それも試してみたのですが、
value=""
となり、何も表示されなくなってしまいました…

書き忘れましたが、
function SendMessage()内には
globalに $sabc を、それと
$msg .= "選択肢 = $sabc\n";
を追加してあります
0015nobodyさん03/06/13 00:37ID:???
書いたものをみせないのかい?
0016nobodyさん03/06/13 00:42ID:???
for( ) {
}
print "value=\"$abc\">\n";

こうなってるから。
00171203/06/13 01:19ID:???
>>15
ttp://www.komonet.ne.jp/script/f_mail2/komomail.phps
のソースに>>12>>14を追記しただけなので全文の必要は無いかと
勝手に判断してしまいました…

>>16
それは…
for(){
}
内にprint "value=\"$abc\">\n"; を入れなければならない、
ということでしょうか?
0018nobodyさん03/06/13 01:30ID:???
まず配列を$abcなんて呼び出すのがおかしい
必ずインデックスをつけて呼び出さなければならない。($abe[$i])

あなたのソースの一番下の行を$abc[$i]としても
$iのなかに何も値が入っていないので、
おかしなことになります。
ちゃんと$iのなかに数字を入れましょう
00191603/06/13 01:52ID:???
読み間違えてた。スマソ。
> この「Array」の部分を「hoge01」「hoge01,hoge04」
ってことなら、
value=\"".implode(",",$abc)."\" みたいにして、
配列を文字列に変換しなきゃいけない。
00201203/06/13 02:19ID:???
>>18
インデックスというのは
$abc[0] = hoge01
$abc[1] = hoge02
$abc[2] = hoge03
$abc[3] = hoge04
というやつですよね?

>>19
おぉ!出来ました!implode…配列要素を文字列により連結する、
というヤツですね?これで全ての問題が解消されました。
>>13さん、>>15さん、>>16=>>19さん、>>18さん、
どうも有難うございました。
PHP勉強し始めてまだ日が浅いのですがもっと努力します。
0021nobodyさん03/06/13 02:21ID:???
$abc = array("さる","いぬ","ひつじ","うま","じゃこうねこ");
for($i=0;$i<count($abc);$i++){
print "<input type='checkbox' name='sabc' value='".$abc[$i]."'>".$abc[$i]."<br>\n";
}
こういうことなのか? PHP初心者なのか?
0022nobodyさん03/06/13 02:22ID:???
あでで
0023nobodyさん03/06/14 00:13ID:oYY8Bt5l

$hensu が a か b か c か d か
と言うのを書きたいんですけどうまく出来ません。
どうやったらいいんでしょうか。

ちなみに下記のように書きました。

$hensu = a;

if($hensu == (a||b||c||d)){
echo "あってます";
} else {
echo "違います";
}
0024nobodyさん03/06/14 00:50ID:???
>>23
$hoge = array("a","b","c","d");

if (in_array($hoge,$hensu)) {
 echo "あってます";
} else {
 echo "違います";
}
0025nobodyさん03/06/14 01:14ID:???
>23

if ($hensu == 'a' || $hensu == 'b' || ...) {
 yes;
} else {
 no;
}

if (preg_match("/^[a-d]$/", $hensu)) {
 yes;
} else {
 no;
}
0026nobodyさん03/06/14 01:33ID:???
>>24 >>25
ちゃんと動かせました。
ありがとうございます。
勉強になりました。
0027nobodyさん03/06/14 08:37ID:p4ucyWfS
リンクをクリックするたびに違うページへ飛ばしたいんですが

srand((double)microtime()*1000000);
$link=round(rand(1,5));
echo"<a href=\"http://www.*****.com/php?id=$link>;リンク</a>\"";

これだとページをリロードしなければリンク先が変わりません
どうやったらいいんでしょうか?
0028nobodyさん03/06/14 08:40ID:???
3行目間違えました・・・
echo"<a href=\"http://www.*****.com/php?id=$link\">リンク</a>";
0029あぼーんNGNG
あぼーん
0030nobodyさん03/06/14 08:49ID:???
>>27
ttp://www.*****.com/php に手を加えられるのなら、
その中でrand()すればいいのでは?
リンクのページ -> .com/php -> リンク先
0031nobodyさん03/06/14 09:04ID:???
>>30
ttp://www.*****.com/phpは自分のページじゃないのでできません
0032nobodyさん03/06/14 09:05ID:???
>>27
リロードせずにリンク先を変える方法があれば俺も知りたい。
JavaScriptでもつかったら?
0033nobodyさん03/06/14 09:24ID:???
>>32
JavaScriptでやってみたんですが携帯からアクセスすると機種によっては表示できない物があったので
0034nobodyさん03/06/14 11:32ID:???
1ページ目 : リンクページ
2ページ目 : rand()でジャンプ先を決めてheader(Location:)で実際にジャンプ

1ページ目のリンク文字(<a>〜</a>の間の文字)は固定になるけど、どう?
0035nobodyさん03/06/14 16:45ID:???
>srand((double)microtime()*1000000);

最近のバージョンだと不要だよ。
0036nobodyさん03/06/14 21:31ID:???
配列、というかimplodeを多用するとブラウザが落ちる、なんてこと無いですよね?
>>12を真似て更にチェックを増やした(チェック項目じゃなくて種類)ら
途中まで表示されて止まっちゃった(応答無し)んですけど
0037nobodyさん03/06/14 21:39ID:???
>>36
エラーじゃないんか?
0038nobodyさん03/06/14 21:43ID:???
なぜ12を真似るのか?
0039nobodyさん03/06/15 01:25ID:???
>>38
非常に重要な疑問だ
0040nobodyさん03/06/15 14:32ID:???
>>37
解決しますた
HTMLの書き方がおかしかったみたいです
>>38
前からメール送信フォームのスクリプトを探してたんですけど
チェックボックス付きのって不思議なくらい少ないんですよ
ラジオボタン付きのは多いのに。
こんなCGI探してますスレで聞こうと思っていた時に
12でそういう話題が出てたんでこりゃ僥倖、というわけです
0041nobodyさん03/06/16 19:26ID:???
ファイル編集で質問なのですが、
ファイルのn行目だけを消去というような処理は
どうすれば良いのでしょうか。
0042nobodyさん03/06/16 21:57ID:???
forとかで回して、
n行目だけ飛ばすとか?
0043nobodyさん03/06/16 22:35ID:???
>>41
edが入ってれば・・・

ed {ファイル名} <<EOT
行数d
wq
EOT

こんな感じのことをやらせると簡単?
# 複数行あるときは、行数は大きい順にdコマンドせいよ!

言ってることがわからないときは無視していいよ・・・
0044nobodyさん03/06/16 23:16ID:???
>>43
行ってることはよくわかるけど,無視
0045nobodyさん03/06/16 23:50ID:ULUKCUBQ
[[ と ]] でかこまれている文字列を抽出する正規表現を教えていただけませんか。
対象文字列が1つだけならば問題はないのですが、
複数ある場合に正しく認識しないのです。
0046nobodyさん03/06/17 00:06ID:???
>>41
オーソドックスに1行ごとファイルを読んで、対象行について処理。
消して詰めるんだったらスキップすれば良いし、
空行にしたいなら空行に入れ替えればよい。
処理用のテンポラリは配列を使ってメモリー上でやってもいいし、
PHPの一時作業ファイルの機能を使っても良い。別ファイルに吐くなら
直接そこに書き込んだ方が二度手間にはならないけど。

つかもちぃと、自分のやりたいことを具体的に書けるように汁。
0047nobodyさん03/06/17 00:16ID:???
>>45
/\[\[[^(\]\])]*\]\]/
0048nobodyさん03/06/17 03:07ID:jU4Lgx5s
>>47

$content=ereg_replace("(\[\[[^(\]\])]*\]\])","<a href=\"index.php?action=view&title=\\1\">\\1</a>",$content);
こうしてみたのですが、うまく動きません。
どうしたらよいのでしょう。
最初は
$content=ereg_replace("(\[\[.+\]\])","<a href=\"index.php?action=view&title=\\1\">\\1</a>",$content);
でした。
0049nobodyさん03/06/17 04:08ID:???
preg_replaceじゃないの?
0050あぼーんNGNG
あぼーん
0051nobodyさん03/06/17 11:30ID:???
>正しく認識しないのです
>うまく動きません。

これだけじゃね。
0052nobodyさん03/06/17 15:44ID:???
PHPってVBみたいなツールないですか?
0053nobodyさん03/06/17 17:12ID:???
>>52
http://www.zend.co.jp/aboutphp/
0054nobodyさん03/06/17 17:39ID:???
>>53
意外と安いですね。20まんくらいするのかと思ってたYO!
0055nobodyさん03/06/17 23:07ID:0jiXtget
ディレクトリのサイズを取得するいい方法はありますか。
ディレクトリの中のファイル一個づつ足していかないとだめなんでしょうか。
0056nobodyさん03/06/17 23:33ID:???
>>55
そうですけど,
duとか使えば?
0057nobodyさん03/06/17 23:56ID:???
45ですが。
>>47さん
>>49さん
ありがとうございました。
0058nobodyさん03/06/18 00:59ID:z2IuQj0n
PHPで画像をUPしたいんですがサーバ側で
画像の大きさを判別できるのでしょうか?
200×300とか
調べたんですけど関数がないような
ということはC言語で関数を作る?
だれかわかりませんか?
0059nobodyさん03/06/18 01:04ID:???
ほんとに調べたのかよこの知障
0060nobodyさん03/06/18 01:14ID:???
まぁまぁ初心者スレなんで生温かく見守れ

http://www.php.net/manual/ja/function.getimagesize.php
マニュアルにまんまあるぞ。このRTFM!
0061nobodyさん03/06/18 01:19ID:???
>>60
やさしいのか、やさしくないのか「RTFM」なんて。。。
0062nobodyさん03/06/18 01:40ID:???
やさすい
0063nobodyさん03/06/18 01:57ID:ozrEi3ht
60>>さん
ありがとうございました
59>>
回線切って首を吊れ
0064nobodyさん03/06/18 10:14ID:???
>>63
逆切れカコワルイ
0065nobodyさん03/06/18 11:17ID:Y4tmU7Uq
>>64氏が釣られている気がしないでもない今日この頃ですが、
皆様におかれましては、いかがお過ごしでしょうか?

と、まぁ〜、んな事はどーでもいいので、質問させて下さい。
配列の中の要素の数を取得する事って出来ますか?
$hoge[0] = hoge0
$hoge[1] = hoge1
$hoge[2] = hoge2
って、配列があるとしたら、全部で3つじゃないですか?
その3ってのを取得したいんです。
0066nobodyさん03/06/18 11:18ID:???
>>65
ネタにしてもつまらない。
0067あぼーんNGNG
あぼーん
00686503/06/18 11:40ID:???
【自己解決】
count() ってゆー便利な関数があるんですね。
>>66氏の気分を害してしまい、ずびばぜんでじだ(T_T)
0069nobodyさん03/06/18 11:40ID:???
>>65
count()
0070nobodyさん03/06/18 16:47ID:???
国際化されていないphpで日本語扱う方法ってありますか?
JCode.php見つけたんですけどいまいち上手く動作しないのです。
0071nobodyさん03/06/18 17:50ID:???
扱う、と言っても扱い方はいっぱいある
00727003/06/18 18:38ID:???
送られてきたデータの文字コードをEUCに統一してmySQLに保存するんです。
要は、普通の掲示板などで行われている処理なのですが。
0073nobodyさん03/06/18 22:02ID:???
>>65

scalar()
0074nobodyさん03/06/18 22:09ID:???
>>72
じゃあ、普通にjcode.phpつかえば。
jcode.phpだけど、
>JCode.php見つけたんですけどいまいち上手く動作しないのです。
こういう書き方するとバカかと思われるよ。
00756503/06/19 03:14ID:2RPLMQCv
>>66氏、>>73氏 レスどうもです。

別の質問なのですが、

title1,value1
title2,value2
title3,value3

というcsvファイルを、file()で読み込んで $lines に格納した後、
列ごとの要素を配列に入れたいのですが、

list($title,$value)=explode(",",$lines[$i]);

と、やったら上手くいきません。

マニュアル読むとlist()は、「配列と同様の形式で、複数の変数への代入を行います」
と、あるので上記だと $title や $value は変数で配列ではないという事ですよね?
列ごとの要素を配列として扱うには、どうすればよいでしょうか?
00767003/06/19 03:27ID:???
>>74
jcode.phpで文字コードを自動認識させると認識を誤ることがあるのです。
回避する方法はありますか?
0077nobodyさん03/06/19 03:59ID:???
自動だかだ。
なんでeuc指定しないの?
00787003/06/19 04:01ID:???
変換後はeucにするんです。
ただ、ブラウザが送出する文字列は指定できないこともありますので、
変換前文字列を自動認識にしているんです。
すると、ときどき化けることがあるわけで。
0079nobodyさん03/06/19 04:35ID:???
なるね。 ときどき化けるファイルのエンコードはJIS ?
これを上手い事、条件つけて変換するとか。
00807003/06/19 04:52ID:???
化けているのはおそらくshift-JISかと。
どういう条件をつけたらよいのでしょう。
0081nobodyさん03/06/19 04:57ID:Xa9Oiy3t
>>75
とりあえず
$lines = file('hoge.csv');
$title = array();
$value = array();
for ($i=0;$i<count($lines);$i++) {
 list($title[$i],$value[$i])=explode(",",$lines[$i]);
}
かなあ?

$lines = array_map('SplitCSV', file('hoge.csv'));
function SplitCSV($line) {
 $a = explode(',', $line);
 return array('title'=>$a[0], 'value'=>$a[1], 'value2'=>$a[2]);
}
みたいに多次元配列に入れたほうがデータを使い回しやすいし、
ファイルを全部読み込む必要がないならfgetcsvを使うのが良いだろうし。
方法はいろいろありますyo。

>>78
jcode.phpsは最新版(1.34)ですよね?
いちおう http://www.spencernetwork.org/ を張っときます。
PHPがセーフモードでないなら、exec()でnkfを使うとか
mbstringのDSOを調達してdl('mbstring.so');するとか? (w
00827003/06/19 05:17ID:???
>>81
jcode.phpsは最新版です。
で、後の方法ですが、強引ですねえ。。。

文字化けの状況はここと一緒かと。ちょっと内容微妙だけど。
http://www.google.co.jp/search?q=cache:W9edWQoBLUMJ:www.geocities.co.jp/CollegeLife-Labo/9015/discussion/0301-0350/log00000305.html+%E5%8A%B9%E5%8D%A0&hl=ja&ie=UTF-8
なんか、根本的に間違っている気がしてきました。
0083nobodyさん03/06/19 05:46ID:???
sage忘れてた・・・。
>>82
すごく強引です。半分ネタのつもりで書きました。ごめん。
ところで、文字列は保存する直前(処理したあと)変換してませんか?
それならスクリプトの冒頭で
$str = serialize($_POST);
$str = JcodeConvert($str, 0, 1);
$_POST = unserialize($str);
って感じであらかじめ変換してやるといいかも。
個別に変換するんじゃなくて、一つの長い文字列として扱うことで
判定ミス軽減を狙ってます。うまくいくかわかんないけど。

とりあえず、そのリンク先が根本的に間違っているのは疑いの余地が無いですね。
0084nobodyさん03/06/19 05:54ID:???
おっと、たしか大抵の国際化されてないレン鯖のPHPって4.0.6だったような。
上の$_POSTは$HTTP_POST_VARSもしくは$HTTP_GET_VARSと読み替えてくだされ。
0085nobodyさん03/06/19 09:25ID:???
>>78
チェック用にHIDDENで"美乳"とか入れらんないの?
その掲示板の入力フォーム。
0086nobodyさん03/06/19 09:37ID:???
>>85
> チェック用にHIDDENで"美乳"
あ,おれと同じことしてる…
00877003/06/19 13:22ID:???
>>85
「美乳」。。。
なんか、もうちょっと長いので無難なのありませんでしたっけ?
00887003/06/19 13:24ID:???
ググッたらすぐに出てきました。
「雀の往来」ですね。
>>83さんのアドバイスとあわせてやってみます。
0089nobodyさん03/06/19 14:58ID:???
うひょー、、こんなのあったのか<美乳・雀の往来
しらんかたよ汗
0090nobodyさん03/06/19 16:54ID:BuZyfKvG
$hash = array('key1'=>'val2','key2'=>'val'2);
$key = 'key';
$line = 'abcd $key{key1} efgh $key{key2} ijkl';
以上のデータを使って$lineを
abc val2 efgh val2 ijkl
と成るように置換したいのですが、以下だとうまく動きません。
$line = preg_replace('/\$'.$key.'\{(.*?)\}/',$hash["\\1"],$line);
どうしたらうまく動かせるのでしょうか。教えてください。

ちなみにperlだと
$line =~ s/\$$key\{(.+?)\}/$hash{$1}/g;
0091あぼーんNGNG
あぼーん
0092nobodyさん03/06/19 16:59ID:3FZVSEpw
>>90
つか、それ以前に''(シングルクォート)じゃあ、変数が
展開されねーべさ。
0093nobodyさん03/06/19 17:13ID:???
>>92
傍目に見たらダブルクォートに見える罠
0094nobodyさん03/06/19 17:19ID:???
"
''
009592 03/06/19 17:20ID:???
うーっぷす、すまねえ。
「'」(しんぐるくぉ〜と)
と書き直してみるテスト。
0096nobodyさん03/06/19 17:22ID:???
$hash["\\1"] -> $hasn[$1] でどう?
$hash[$1] のかわりに md5($1)とか、オリジナルのハッシュ関数($1)とかでもいいかも。
00979003/06/19 17:24ID:BuZyfKvG
>>92
ちょっとまぎわらしいコードを書いてしまってすいません。
$lineでしたら、展開されないように''にしています。

$line = 'abcd $CODE{1} efgh $CODE{2} ijkl';
$key = 'CODE';
$hash = array(1=>'111',2=>'222');
$line = preg_replace('/\$'.$key.'\{(.*?)\}/',$hash["\\1"],$line);
で$lineを
abcd 111 efgh 222 ijkl
にしたいのですがpreg_replaceの所で、つまずいています。
0098nobodyさん03/06/19 17:44ID:???
>> 70

実用的なものとしては、“漢字コードはEUC”というのがある。

ttp://www.valhalla.gr.jp/coffin/essay/2001/august.html#12


>> 90

$line = preg_replace_callback('/\$'.$key.'\{(.*?)\}/', create_function('$a', 'return $GLOBALS["hash"][$a[1]];'), $line);

もっといい方法があるかも。
0099nobodyさん03/06/19 18:05ID:j1VyygA0
PHPとTomcatを連携しようと考えています。
可能でしょうか?
0100あぼーんNGNG
あぼーん
0101nobodyさん03/06/19 21:54ID:???
この
■ このスレッドは過去ログ倉庫に格納されています