【PHP】質問スレッドpart31【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/11/27(日) 00:07:12ID:eBvjdczp【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等>>2-10辺り
0304nobodyさん
2005/12/07(水) 22:17:29ID:???0305nobodyさん
2005/12/07(水) 22:32:52ID:???糞のやることだ。
0307nobodyさん
2005/12/07(水) 23:33:28ID:jWNRrWnpclass Human {
var $name;
function getName() {
echo $this->name;
}
}
$human = new Human;
$human->$name = "名無しさん";
// これはだめ
echo $human->$name;
//これはOK
echo $human->getName();
みたいな感じでメソッドを通してのみやり取り可能なのかな?直接代入はできて参照はできないってなんか変な感じなのですが直接参照する方法とかあるんでしょうか?
0308nobodyさん
2005/12/07(水) 23:45:14ID:???0309nobodyさん
2005/12/07(水) 23:45:29ID:???var $name;
^^^^^ここを publicにすれば
echo $human->name;
このようにアクセスできますよ!
0310nobodyさん
2005/12/07(水) 23:46:03ID:???0312nobodyさん
2005/12/07(水) 23:56:30ID:???$name = "name";
echo $uma->$name;
0313nobodyさん
2005/12/07(水) 23:58:21ID:???0314307
2005/12/08(木) 00:08:25ID:???0316nobodyさん
2005/12/08(木) 02:21:19ID:???0317nobodyさん
2005/12/08(木) 02:52:53ID:???という配列の中に
ある要素が含まれているか判定したいのですが
foreachなどを使わずにスマートに行う方法はないでしょうか。
'bbb' => true
'gaxtu' => false
みたいな感じになればいいです。
0318nobodyさん
2005/12/08(木) 02:53:34ID:???0319nobodyさん
2005/12/08(木) 03:04:03ID:???実は私もその問題で以前悩んだことがあります。
googleで検索してもMLに投げてもぜんぜんわかりませんでした。
そこで友人のハカーに相談したところ殆どの方がご存じ無いような
のですがphpの裏マニュアルが存在するということがわかりました。
特別にお教えしますが、絶対に人には教えないで下さいね。
http://jp.php.net/manual/ja/function.in-array.php
0320nobodyさん
2005/12/08(木) 03:12:55ID:???絶対に誰にも教えません
0321nobodyさん
2005/12/08(木) 05:45:08ID:???この描き方でT_VARIABLEエラーが出るのですがどう直したらいいですか?
やってるうちにわけわからなくなりました。。
0322nobodyさん
2005/12/08(木) 06:35:24ID:???まずはPHPEclipseでも何でもいいから
色分けしてコード強調表示してくれるエディタを使うようにしてみな。
そうすればお前にも分かる。
0325nobodyさん
2005/12/08(木) 10:30:12ID:???array_serch,in_arrayかな
質問なのですがa.txtに
a,k,h,u,g
b,k,x,p,t
j,w,t,a,j
・
・
・
とある場合一行ずつ読み込んでtest[]として配列にするとしますよね。
その後list()とexpload()で、,で分割して変数にしようと思うんですがlistの中って配列でもokですか?
test2[0] => a
test2[1] => k
・
・
・
と出来るかという事です。
後、もし出来るならa.txtをもとに表を作りたいのですが
$filename = "a.txt";
$test2 = array();
$test = file($filename);
for($i=0;$i<$count($fp);$i++){
list($test2)=expload(",",$test[$i]);
foreach($test2 as $value);
echo $value;
}
こんな感じで出来るのでしょうか?でもこの場合二行目のxを表示させたい場合って、
どうやって配列を指定するんでしょう?
$test[1,test[2]]とかorz(適当でごめんなさい)
03262
2005/12/08(木) 10:33:02ID:???この$id,$pwは認証した画面では変数として使えるようですが、他のページで使うには$_SESSIONを使うといけますか?
session_start();
$_SESSION['id'] = $id;
$_SESSION['pw'] = $_SESSION['pw'] = $pw;
で、$id="aiueo" $pw="aaa"で認証した場合は、SESSION指定後、他のページでは
$_SESSION['id'] = "aiueo"
$_SESSION['pw'] = "aaa"
$id="kaki" $pw="bbb"で認証した場合は、SESSION指定後、他のページでは
$_SESSION['id'] = "kaki"
$_SESSION['pw'] = "bbb"
となるのでしょうか?
質問ばかりで申し訳ないですが、授業中気になってしまいまして、どうぞご教授お願い致します。
0328nobodyさん
2005/12/08(木) 10:41:10ID:???0329nobodyさん
2005/12/08(木) 10:49:59ID:???>>4の7
>>326
$_SESSIONには$idだけ入れとけば認証済みかどうか確認できるんじゃない。
>>327
知らない。自分で作るっていう選択肢はなしなの?
0330nobodyさん
2005/12/08(木) 11:58:34ID:???即レスありがとうございます。
なるほど、配列の配列はあのように記述するのですね、勉強になりました。
$_SESSIONですが、a.txtを元に表を作り、room1,room2…と待合室のようにしたいのです。
それぞれの部屋に現在入っている人を表示し、入室ボタンをつけ、入室するとその部屋に自分の名前が表示されるというものです。
入室の際、配列に
$_SESSION['id']を追加しようと思うのですが、これだと配列の中身が$_SESSION['id']ばかりになってしまい、上手く認証された人の名前が表示されるのかと心配だったのです。
きちんと、aさん、bさんが入室した場合、
test2[0] = a
test2[1] = b
となるのでしょうか?
またもや質問になってしまいましたが、何卒よろしくお願い致します。
0332nobodyさん
2005/12/08(木) 12:17:31ID:???aだのtestだの変数名とやりたいことの対応がわかりづらい。変数名つけなおしてくれ。
とりあえず待合室ってやつに誰が入ってるかって情報は別口にファイルとかに保存しとかないと復元できないけど。
$_SESSIONにはそのときにアクセスしているユーザーの情報しか含まれないよ。
0333nobodyさん
2005/12/08(木) 12:36:30ID:???0334nobodyさん
2005/12/08(木) 12:43:04ID:???0335nobodyさん
2005/12/08(木) 13:06:23ID:???0336nobodyさん
2005/12/08(木) 13:16:30ID:???レスありがとうございます。
確かに、例など分かり辛いですよねorzすみません
一度、記述して、出直して参ります。
もし、その時お時間あるようでしたら、よろしくお願い致します。
0337nobodyさん
2005/12/08(木) 13:52:12ID:???list($a[$i][0],$a[$i][1],$a[$i][3]…)=explode
0338nobodyさん
2005/12/08(木) 13:52:59ID:???0339nobodyさん
2005/12/08(木) 13:56:39ID:???$a[$i] = explode(…
ですみそうな気が
0342nobodyさん
2005/12/08(木) 15:48:34ID:???マニュアル通りだと
$row = $stmt->fetch(PDO_FETCH_ASSOC);
に対して、
Warning: PDOStatement::fetch() expects parameter 1 to be long, string given in /home/www/test.php on line 49
こんな警告が出てしまいます。
PDOStatement::setFetchModeを使うのかなと
$result = $stmt->setFetchMode(PDO_FETCH_ASSOC);
を追加してみたのですが
Warning: PDOStatement::setFetchMode() [function.setFetchMode]: SQLSTATE[22003]:
Numeric value out of range: unhandled mode; this is a PDO bug, please report it in /home/www/test.php on line 48
こっちはこっちでこんな警告出してきました。
PHP5.1.1です。
0343325
2005/12/08(木) 15:57:52ID:???トップ画面→ルーム作成画面まで作成してみました。
http://www.uploda.org/file/uporg255946.zip.html
問題点は、
*$_SESSION['id'][$i]の表示がおかしくなってしまう。"yuji"→"y"など、一文字になってしまう。
FAQを参照し、$_SESSION{'id'}{$i} にするも結果は変わらずorz
宜しければ、ご教授願いたいと思います。
よろしくお願い致します。
0344325
2005/12/08(木) 15:59:23ID:???0347nobodyさん
2005/12/08(木) 16:56:50ID:???print_r($_SESSION);
してセッション変数がどう格納されているか確認してみな。
そういうことやらないなら、
丸投げスレに移行すべし。
0348342
2005/12/08(木) 17:05:47ID:???スンマセン。
Noticeも表示されるようにしたら
Notice: Use of undefined constant PDO_FETCH_ASSOC - assumed 'PDO_FETCH_ASSOC' in /home/www/test.php on line 49
警告の他に上記が追加されました。
で、PDO_FETCH_ASSOCの部分をシングルクォートで括ってやったら警告だけが残りました。
0350nobodyさん
2005/12/08(木) 17:18:54ID:???grs.phpの30行目を
$_SESSION['id'] = $id;
に変えて、
create.phpの31行目を
$_SESSION['id']
に変えれ。
$_SESSION{'id'}という書き方はダメ。中カッコは文字列の中から1文字だけ参照するときにつかうもの。配列の場合は必ず角カッコ。
0353nobodyさん
2005/12/08(木) 23:41:20ID:2fsehRpI>>337さん、>>347さん、>>350さん ありがとうございました。
教えて頂いた事を参考に、頭を捻りながら作業を進めた結果、
room.txtを元に、各表を作成する事までは出来ました。
しかし、参加ボタンで名前を追加という点で行き詰ってしまいましたorz
参加ボタンを押すと、$_SESSION['id']と、$_SESSION['rate']をroom.txtに追加したいのですが、難しいのです・・・。
[room.txt]
1,2,aaa,2,Dungeon,3,yuji/,1500/
となっており、
rate1700で、idがryuujiさんが参加した場合、
1,2,aaa,2,Dungeon,3,yuji/ryuuji,1500/
1700としたいのです。
http://www.uploda.org/file/uporg256297.zip.html
現在このような感じです。
出来れば、丸投げにしたくないのでアドバイスや解決策があればよろしくお願い致しますorz
予想としては、別にもう一つphpがいるのかなと思うのですが・・・。
もしかして、PHP+MySQL覚えた方が解決までの距離が短かったりでしょうか・・・。
0354nobodyさん
2005/12/08(木) 23:42:03ID:???sage忘れすみません;;
0355nobodyさん
2005/12/08(木) 23:44:45ID:???0357nobodyさん
2005/12/09(金) 01:14:54ID:vSvgZQPEフォームから >>1>>2>>3-4 など、参照したい行数を$resで指定して
datから該当の行のコメント部分だけを表示しようとしていますが、
処理が悪く表示が抜けてしまう行があります。<>は実際は半角です。
$res = preg_replace("/(^|)>>/i", ",>>", $res);
$res = substr("$res",1,(strlen($res)-1));
$log_line = split( ",", $res);
$ct = count($log_line);
for($i=0; $i<$ct+1; $i++){
$st = preg_replace("/(^|)>>(\d+)-(\d+)/si","\\2", $log_line[$i]);
$to = preg_replace("/(^|)>>(\d+)-(\d+)/si","\\3", $log_line[$i]);
$on = preg_replace("/(^|)>>(\d+)/si","\\2", $log_line[$i]);
$log_file = "$ls.dat";//該当2chのdatログ
$log_viewer = file($log_file);
if(!ereg("-", $res)){
list($name,$email,$date,$com) = split( "<>", $log_viewer[$on-1]);
echo "$com<br><br>";
}
elseif($st && $to){
for($h=$st-1; $h<$to; $h++){
list($name,$email,$date,$com) = split( "<>", $log_viewer[$h]);
echo "$com<br><br>";
}
}
}
既知の問題としては、>>1>>2>>3-4で1と2が落ちて3と4しか表示されない、
(>>1>>2>>3>>4や>>1-4ではとりあえず表示されます)
<br>が最後に4つ表示される。などです。
いろいろと変数を表示させたりしてやってきましたが、ここまでで手詰まりました。
最初からコーディングの悪さはあると思いますが、どなたかご教授ください。
0358nobodyさん
2005/12/09(金) 02:36:11ID:???とりあえず $ct = count($log_line); の行の前あたりに
$a=array(); foreach($log_line as $b) $a[]=urlencode($b); print_r($a);
を加えて$log_lineの中身がどうなっているかチェック。
他にも怪しそうな変数があったら同様にチェック。
変数の内容を確認するのはデバッグの基本。
あと×「教授」→○「教示」
0359nobodyさん
2005/12/09(金) 02:56:48ID:???使えるものしか使っていないのが一番の原因だとは思いましたが
おっしゃるように$log_lineを調べて、if(!ereg("-", $res)の部分を潰して
書き替えて、なんとか表示されるようになりました。
ご教示ありがとうございました。
0361nobodyさん
2005/12/09(金) 04:39:41ID:???>自分でphp5に出来無い時点でダメポ。
この流れだと、自分でサーバーの設定弄れるって事なんじゃないの?
レン鯖でも専鯖でも無い限りそれはムリポw
0363nobodyさん
2005/12/09(金) 09:15:36ID:???http://www.php.net/README_UPGRADE_51.php#extensions2
これだな。
0364nobodyさん
2005/12/09(金) 14:13:07ID:???日本語オンラインマニュアルの更新が遅いんだよな
最新のchm版マニュアルは定数の部分がPDO::〜に変更されていた
0365nobodyさん
2005/12/09(金) 14:17:30ID:???↓
PDO_FETCH_ASSOC
↓
PDO::FETCH_ASSOC
0366nobodyさん
2005/12/09(金) 14:24:52ID:???0367nobodyさん
2005/12/09(金) 14:26:23ID:???0370nobodyさん
2005/12/09(金) 21:15:22ID:???echo $referer;
携帯用スクリプトなんですが?mode=sourceを表示した時に前のページで取得したリファラのURLのソースを表示したいんですがどうすればいいでしょうか?
どうしても?mode=sourceの前つまりスクリプト自身のソースを吐くので
0371nobodyさん
2005/12/09(金) 22:04:41ID:Gto+rkho例えば、5文字以上連続して同じ文字が入力された場合、その文字を取り出す。とか。
自分なりに調べてみましたが、それらしい情報は見つからず、、、
自分でもいろいろ考えましたが、ぐるぐるループさせる方法しか浮かびません…。
0374nobodyさん
2005/12/09(金) 22:44:07ID:???同意
>371
>ぐるぐるループさせる方法
それでいいんじゃね
0377nobodyさん
2005/12/10(土) 01:13:39ID:???プログラム経験はflashのactionscriptでショボイゲームが作れる程度です。
よろしくお願いします。
0378nobodyさん
2005/12/10(土) 01:51:28ID:???http://www.php.net/manual/ja/
いやホントに、煽りで無くマジレス。
0380372
2005/12/10(土) 04:55:08ID:???流れは
【A】
1.ユーザが<<URL>>に存在するリンクをたどり クエリmode=source を伴って当該スクリプトにアクセスする
2.当該スクリプトはリンク元をHTTPリファラから取得する
3.当該スクリプトはリンク元のソースを表示する
【B】
1.ユーザが<<URL>>に存在するリンクをたどり クエリmode=source を伴って当該スクリプト1にアクセスする
2.当該スクリプト1はリンク元をHTTPリファラから取得する
3.当該スクリプト1はスクリプト2への遷移を提供する
4.スクリプト2は先ほど取得したリファラを何らかの形で受け継いでいて、<<URL>>のソースを表示する
どっちかだと思うけど。それが判らない。
次に、「ソース」ってのはPHPのソースコードをさすのか
それともHTML(PHPとかの出力)のソースコードをさすのか。これもわからない。
携帯ということだけどキャリアはどこ?ドコモはリファラとれないよ?
0381nobodyさん
2005/12/10(土) 05:06:16ID:???むしろ、こっちに誘導してやってよ。
PHP関連の書籍(但しPHP出版系お断り)第2版
http://pc8.2ch.net/test/read.cgi/php/1117066073/l10
後者です。
他のスクリプト(HTMLソースを表示するページ)に前のページで取得したリファラを送る方法が謎なんですよ。
機種はauです。
リファラを利用したお気に入り規制突破スクリプトを作っていてソース表示をいれようと。
すいません。
前者の方です。
test.phpで前に表示していたページのリファラを取得して表示。
次にソース(ボタン)をクリックするとmode=sourceに移動その時に取得したリファラをそのまま受け渡し。
そしてHTMLソースを表示。
どうにも受け渡しができないんですよ。
0384nobodyさん
2005/12/10(土) 06:58:43ID:???なにがいいたいのかさっぱりわからん
むいてないんじゃない?
0385nobodyさん
2005/12/10(土) 07:30:30ID:???受け渡しが出来ないって渡してないから受け取れないだけだろ
?mode=source&url=$_SERVER['HTTP_REFERER']
で渡したらいいんじゃないの
0386nobodyさん
2005/12/10(土) 07:42:38ID:???/$_SERVER['USER_AGENT']/
を指定したいんですが
モデファイ?4(よく覚えてなくてすいません)
とかいうエラーが出てしまいました。正規表現(()辺り?)の間違いだと思うのですが、どうにかして回避できませんでしょうか?
0388nobodyさん
2005/12/10(土) 10:45:34ID:???0389nobodyさん
2005/12/10(土) 12:26:23ID:???387のいうことももっともだが、
その前に
>モデファイ?4(よく覚えてなくてすいません)
こういうことではいつまでたってもダメじゃん。
エラーが出たらそれが何を意味するか理解するようにしようぜ。
0392nobodyさん
2005/12/10(土) 12:42:01ID:???387はそのまま$_SERVER['USER_AGENT']を指定するのは難しいといいたいんだろう。
ま、エスケープしろってこった。
0393nobodyさん
2005/12/10(土) 12:55:49ID:???おそらくMozilla/4.0の/で正規表現パターンが終わって次の4が修飾子と判断されてエラーになった
>>390
quotemetaしてstr_replace("/", "\/",
すれば出来るけど>>386には無理
そもそも正規表現使う必要あるのか疑問
やりたいことはarray_count_valuesとかじゃないのか
0394nobodyさん
2005/12/10(土) 13:04:59ID:???0396nobodyさん
2005/12/10(土) 14:10:55ID:???0397nobodyさん
2005/12/10(土) 14:30:05ID:???foreach ($w as $t){
$_POST['abc'] = mb_ereg_replace($t,'',$_POST['abc']);
}
こういう感じでpostからの入力文字を制限しようと考えているのですが
どういう訳か$wの最後の配列の文字「う」しか削除されません。理由が
全くわからないのですがヒントを頂けないでしょうか?。
0398386
2005/12/10(土) 14:48:38ID:???0399nobodyさん
2005/12/10(土) 15:08:21ID:???コードには問題がなさそうだからきっと凡ミス
あと、単純な置換なら正規表現関数を使う意味がないぞ
$result = mg_ereg_replace('[あ-う]','',$_POST['abc']);
0400nobodyさん
2005/12/10(土) 16:00:08ID:???print_r($w)してもecho $tしても予想通りの結果がでるしわからないんですよね。
最初は文字コードがsjisの影響なのかと思ってstr_replaceからmb_ereg_replaceに
してみたりしたのですが同じでした(^^; という残骸です。
0401nobodyさん
2005/12/10(土) 16:08:33ID:???どうせこんな感じのミスじゃない?
$input = "あいうえお";
$w = array('あ','い','う');
foreach ($w as $t){
$result = mb_ereg_replace($t,'',$input);
}
echo $result;
0402nobodyさん
2005/12/10(土) 16:15:08ID:???0403nobodyさん
2005/12/10(土) 17:18:45ID:???それも考えたんだけどインとアウトは同じ$aなんですよ(^^;
$a = mb_ereg_replace($t,'',$a);
■ このスレッドは過去ログ倉庫に格納されています