【PHP】下らねぇ質問はここに書き込みやがれ 72
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/08/16(土) 12:01:25ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 71
http://pc11.2ch.net/test/read.cgi/php/1216291372/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0124nobodyさん
2008/08/19(火) 20:25:37ID:???0125nobodyさん
2008/08/19(火) 20:29:29ID:/yAc2/hi何か便利な標準関数はありませんか
0126nobodyさん
2008/08/19(火) 20:41:42ID:???0127nobodyさん
2008/08/19(火) 21:03:23ID:???今のところwikiも行単位の差分だもんなぁ
文字列比較になると文字数の違いをどう吸収するかが悩みどころだろう
諦めて行単位のdiffがいいと思うぜ?
俺だとarray_diffとarray_intersectを使って文字自体の違いと共通を出してそこをヒントにフレーズを導く、
とか考えるが難しいことには変わりない
0128nobodyさん
2008/08/19(火) 21:21:13ID:6/c1nOwy//各レコード内容を表示する表を組み立てます
$body .= "<TR>
<TD>
<INPUT type='text' name='categname[]' value=\"$col[categoryname]\" size='70'>
<INPUT type='submit' name='btnedit$cnt' value='更新'>
<INPUT type='submit' name='btndel$cnt' value='削除'>
<INPUT type='hidden' name='categid[]' value='$col[categoryid]'>
</TD>
</TR>";
$cnt++;
}
というプログラムで、データを渡したいんですけど、
$categname[]=$_POST['categname'];
$btnedit=$_POST['btnedit$cnt'];
$btndel=$_POST['btndel$cnt'];
$categid[]=$_POST['categid'];
foreach($_POST['categname'] as $value){
$categname[]=$value;
}print_r($categname."<br>");
foreach($_POST['categid'] as $value){
$categid[]=$value;
}
でデータを受け取っています。でも、更新ボタンや削除ボタンが複数ある時に、nameが一緒なのでどのように判別すればいいかがわかりません。どのようにすればいいでしょうか?
0131nobodyさん
2008/08/19(火) 21:32:25ID:6/c1nOwyやはりこのやり方ではできないんでしょうか?
0132nobodyさん
2008/08/19(火) 21:51:08ID:???$btndel=$_POST['btndel$cnt'];
ここをループさせて更新とか削除という値が入ってる$cntを探せばいいんじゃないのだろうか?
>通常1formにsubmitは1つ
んなこたーない。
nameは統一してvalueで区別するとラジオボタンと同じ感覚で使える。
とはいえvalueってのがそのままボタンのラベルになるからどうも使いづらいんだよな。
0133nobodyさん
2008/08/19(火) 22:06:49ID:???せめてbuttonタグが思い通りに動いてくれればいいのにな
下みたいなヤツ
<button type="submit" name="action" value="regist">登録</button>
inputタグでやるとマルチバイトでswitchやifするのが気持ち悪いんだよなぁ
0134nobodyさん
2008/08/19(火) 22:11:30ID:6/c1nOwyこのようにしてみたんですが、ダメでした。
for($cnt = 0; $cnt < $reccnt; $cnt++) {
if(isset($_POST['btnedit$cnt'])){
$btname=$btndedit.$cnt;
break;
}
}
更新が入っている$cntを見つけたら$btnnameにbtnedit$cntという値を保存したいんです。どうすればいいかわかるでしょうか?
0135nobodyさん
2008/08/19(火) 22:18:21ID:???----------------
categname[]
categid[]
----------------
を
----------------
categname[$cnt]
categid[$cnt]
----------------
にしたらいいんじゃないか?
btnedit$cntの$cnt部分から目的のデータを正確に取れる
0136nobodyさん
2008/08/19(火) 22:22:52ID:6/c1nOwy0137nobodyさん
2008/08/19(火) 22:57:55ID:6/c1nOwyボタンを押しても送られてくる$cntは最後の値しか入ってないんですが、そこはどうにかならないですかね?
0138nobodyさん
2008/08/19(火) 23:21:48ID:???0139nobodyさん
2008/08/19(火) 23:25:02ID:/yAc2/hiforをぶんぶん回すのがいやだなーと思ったのですが、仕方ないですね。
失礼しました
0140nobodyさん
2008/08/19(火) 23:36:15ID:6/c1nOwyvar_dump($_POST)してみたんですけど、結果は
["btnedit1"]=> string(4) "更新"
となりました。この結果のbtnedit1だけ取り出せないですかね?valueは更新なので、そっちだけなら受け取れるのですが。
>>139
具体的にどのように使えばいいんでしょうか?今調べてみたんですが、どのように、どこで使えばいいのかよくわからなくて・・・
0141nobodyさん
2008/08/19(火) 23:55:15ID:???0142nobodyさん
2008/08/19(火) 23:58:20ID:6/c1nOwyそれはどのボタンを押すかによって変わるんじゃないんですか?例えば3番目のボタンを押したら$cnt=3になってほしいんですが
0143nobodyさん
2008/08/20(水) 00:35:06ID:MvAneMVr0144nobodyさん
2008/08/20(水) 00:37:56ID:???$body .= "<TR>
<TD>
<form>
<INPUT type='text' name='categname[]' value=\"$col[categoryname]\" size='70'>
<INPUT type='submit' name='btnedit$cnt' value='更新'>
<INPUT type='submit' name='btndel$cnt' value='削除'>
<INPUT type='hidden' name='categid[]' value='$col[categoryid]'>
</TD>
</form>
</TR>";
$cnt++;
0145nobodyさん
2008/08/20(水) 00:39:15ID:???0146nobodyさん
2008/08/20(水) 00:44:06ID:MvAneMVrそれは>>128で書いたんですが、nameの値が同じなので、複数ボタンがある時に、どれが押されたかの判定をしたいんです。
そこでvar_dump($_POST)してみると["btnedit1"]=> string(4) "更新" という値が渡せていたので、これのbtnedit1だけ取り出せないかなと思って・・・
0147nobodyさん
2008/08/20(水) 00:45:46ID:???$mode = 'edit';
}
0148nobodyさん
2008/08/20(水) 00:47:09ID:MvAneMVrボタン1を押したときはbtnedit1になるんですが、ボタンがいくつもあるので、$cntにするとうまくいかないんです
0149nobodyさん
2008/08/20(水) 00:55:24ID:MvAneMVr0150nobodyさん
2008/08/20(水) 01:08:50ID:???他人にも分かるように説明してくれ。
<form>
<input type="text" name="textbox" value="<?php echo $text; ?>">
<input type="submit" name="edit" value="更新">
<input type="submit" name="del" value="削除">
<input type="hidden" name="id" value="<?php echo $id; ?>">
</form>
でいいだろ。
駄目なら何が駄目なのか簡潔に。
俺ならsubmit2つは使わないけど。
0151nobodyさん
2008/08/20(水) 01:10:22ID:???<INPUT type='submit' name='btnedit$cnt' value='更新'>
<INPUT type='submit' name='btndel$cnt' value='削除'>
なんだから3番目の更新ボタンはbtnedit3になると思ったんだが・・・
俺たちはとんでもない思い違いをしているのか?
0152nobodyさん
2008/08/20(水) 01:17:47ID:MvAneMVrそこでnameを'btnedit$cnt'にして$cntの部分で変えているのですが、それをどうやって受け取るかがわからないんです。
受け取るのはvalueの値(更新)ですよね?でも判別するときはnameがいるので、そこを何とかできないかなと
0154nobodyさん
2008/08/20(水) 01:36:54ID:???0155nobodyさん
2008/08/20(水) 01:37:51ID:MvAneMVrこれはどういったことをしているのでしょうか?
もともと<?php ?>でつくっているのですが、2重に囲んでもいいんでしょうか?
0156nobodyさん
2008/08/20(水) 01:40:16ID:???0157nobodyさん
2008/08/20(水) 01:49:51ID:MvAneMVr$id=$_POST['id'];で受け取ってみましたが、echoしてみると;?>が表示されて、更新ボタンを押すたびに増えていくんですが、これはどういうことでしょう?
0158nobodyさん
2008/08/20(水) 01:58:48ID:4SgzBP1u基礎からやりなおせ。
0159nobodyさん
2008/08/20(水) 02:00:28ID:MvAneMVr0160nobodyさん
2008/08/20(水) 02:12:04ID:???0161nobodyさん
2008/08/20(水) 02:13:47ID:???ここにかかないとだめなん?
0162nobodyさん
2008/08/20(水) 02:16:27ID:MvAneMVrすいません、ほんと初心者なんでわからないことだらけで・・・
0163nobodyさん
2008/08/20(水) 02:31:59ID:???0164nobodyさん
2008/08/20(水) 02:34:31ID:MvAneMVr0165nobodyさん
2008/08/20(水) 02:52:46ID:???[ID1を削除]
とかってvalueにすれんばいいんじゃねw
0166nobodyさん
2008/08/20(水) 02:54:14ID:MvAneMVr0167nobodyさん
2008/08/20(水) 02:56:21ID:???0168nobodyさん
2008/08/20(水) 02:56:50ID:MvAneMVr0170nobodyさん
2008/08/20(水) 03:01:48ID:MvAneMVr0171nobodyさん
2008/08/20(水) 03:03:39ID:???何故駄目だったのか追求しないなら諦めろ
0172nobodyさん
2008/08/20(水) 03:07:03ID:???0173nobodyさん
2008/08/20(水) 03:18:09ID:???0174nobodyさん
2008/08/20(水) 04:12:49ID:PkKH7Tnjこちらでもお聞きすることにしました。
MySQLのスレには、お礼を申し上げて閉じました。
重複するデータが多数登録されているテーブルがあるのですが、
それを一発で直す関数はないでしょうか?
データ件数が多いため、CREATE, INSERT IGNORE INTO SELECT 〜以外の方法で
できれば嬉しいのですが。
宜しくお願いします。
0175nobodyさん
2008/08/20(水) 04:19:38ID:PkKH7Tnj一発で直す関数というのは、具体的には配列関数でいうarray_uniqueのような関数です。
宜しくお願いします。
0176nobodyさん
2008/08/20(水) 04:22:29ID:???あるわけない
>データ件数が多いため、CREATE, INSERT IGNORE INTO SELECT 〜以外の方法で
謎なこといってるがSQL使わずにどうやってデータを取り出すというのだ?
だいたいデータが重複するとか設計に問題があるんだろ
今のまま放置したらまたいずれ同じことの繰り返しになるだけ
phpMyAdminなんかでデータをdumpして
dumpファイルのテーブル部分を設計しなおして再登録したほうがいい
そうすれば登録の時点で重複されるデータは登録されないだろ
0177nobodyさん
2008/08/20(水) 04:33:56ID:???アドバイスありがとうございました。
> 謎なこといってるがSQL使わずにどうやってデータを取り出すというのだ?
すみません、誤解を招く表現で。
いいたかったのは、データ件数が7300万件以上ありまして、
UNIQUEキーを設定した仮テーブルを作ってコピーすると、
時間が掛かってしまうため、ミドルウェア層に位置する
SQLの範疇では手に負えないというのが以前の結論でした。
なので、アプリケーション層に位置する高級言語でなんとか処理できないと
考えたのですが、やはりそこでも無理そうでしょうか。
phpで無理でしたら、JavaとかC++のスレでも聞こうと思っています。
0178nobodyさん
2008/08/20(水) 04:36:44ID:PkKH7Tnj0179nobodyさん
2008/08/20(水) 04:42:02ID:???0180nobodyさん
2008/08/20(水) 04:45:21ID:???7300万件もあるなら他の言語のほうが処理速度はあがると思うよ
C++が使えるならそうしたほうがいいかも
0181nobodyさん
2008/08/20(水) 07:43:47ID:???これは釣り?それとも本気?
本気でいっているならメモリーキャッシュとか使えば、
Java並みの実行速度にはなる。
0183nobodyさん
2008/08/20(水) 08:37:14ID:???そっちで処理すればいいだろ。
実行時間やメモリサイズの縛りがあるPHPで、
わざわざ実行する必要はない罠。
0184nobodyさん
2008/08/20(水) 08:59:03ID:???0185nobodyさん
2008/08/20(水) 09:43:41ID:???だから、それは設定の問題でしょ。もしくは、環境の問題でしょ。
言語仕様の問題みたいにいうと変な誤解する人がいるぞ。
0186nobodyさん
2008/08/20(水) 10:03:49ID:???作れるがそれをした所でDBで時間が掛かってしまうから駄目なんじゃないの?
7400万件あってもPHPで十分処理できるよ
まぁサーバ次第だけど
てかこんな所じゃなくコンサルたのめよ
0187nobodyさん
2008/08/20(水) 10:13:36ID:???0188nobodyさん
2008/08/20(水) 10:14:14ID:???0189nobodyさん
2008/08/20(水) 11:35:11ID:???データベース使う意味まるで無いよなw
0190nobodyさん
2008/08/20(水) 11:41:13ID:uoEIdMLz<field>
<hoge name="test1">val1</hoge>
<hoge name="test2">val2</hoge>
</field>
↑これを↓のように取り込みたいのだけど、
$xml["field"]["hoge"]["test1"]="val1";
$xml["field"]["hoge"]["test2"]="val2";
実際やってみたら↓という風になっちゃうんです。
$xml["field"]["hoge"][0]="val1";
$xml["field"]["hoge"][1]="val2";
前者のように得たい場合、何か良い手はないでしょうか。
(XMLの書式を変えろとかは無しの方向で)
0191nobodyさん
2008/08/20(水) 11:51:31ID:???> PHPは大規模な処理には向いていない言語なので
> 7300万件もあるなら他の言語のほうが処理速度はあがると思うよ
> C++が使えるならそうしたほうがいいかも
あんた実戦経験無し?
7300万件とかそんなにデータが多い場合・・・いや、少なくてもだけど
普通は高速にかつ楽に開発する為に、既に作られている、
ライブラリやデータベースシステムを使う。
ライブラリやデータベースシステムがC++などで作られているから
何の問題も無い。
君の発想は一から全部作る場合の発想。
何らかの理由で世の中に既にある物を置き換えるものを
作ろうとしているのなら話は別だが、
大量のデータを処理する為のライブラリを
C++で作るとかアフォのやること。
0192nobodyさん
2008/08/20(水) 11:58:45ID:???> phpで無理でしたら、JavaとかC++のスレでも聞こうと思っています。
JavaやC++でもPHPと同じように無理だから。
0193nobodyさん
2008/08/20(水) 12:03:06ID:nVxHuE1Qこのセッショントラバーサル脆弱性って
「セッションハンドラを自前で設定して、
しかもそれをファイルシステムに指定している」という状況でないと
発現しないの?
何もいじらずにファイルシステムのセッション使ってる場合は大丈夫?
0194nobodyさん
2008/08/20(水) 12:19:19ID:???'->'とか'=>'は、何と読めば良いのでしょう?。
0195nobodyさん
2008/08/20(水) 12:25:51ID:???高速なライブラリやDBを使うなんてあたりまえの話で、その上でPHPよりC++で
組んだほうが処理は速いんじゃないか、としか読めないんだが
なんでライブラリを作るなんて話になるんだろう
PHPで大規模処理ができるかどうかと言われればできる
けど向いてるかと言われればそうでもないと思う
少なくともデータ処理のバッチをPHPで作ろうとは思わんなあ
バッチ以外の部分がPHPなので保守を考えてとか、なんか理由でもなければね
0197nobodyさん
2008/08/20(水) 12:39:37ID:???セッションIDの文字列チェックが行われないってヤツだな
標準ハンドラではチェックされているから、独自実装の場合だけ脆弱性を帯びる
ファイルシステムだけじゃなくてデータベースに保存している場合でもインジェクションを意識しなきゃダメだろうな
例えばファイルシステム利用の場合でセッションIDに「/../」があれば上位ディレクトリが保存先になるってこと
あぶないあぶない
>>194
読みなんてあったっけ?
「->」 オブジェクトメンバ、オブジェクトメンバメソッドの「参照記号」とでも呼べばいいのか?
「=>」 連想配列の・・・・何?
0198nobodyさん
2008/08/20(水) 12:43:16ID:???自分も人に聞かれて、何にも頭に思い浮かばず困ってしまったんです。
0199nobodyさん
2008/08/20(水) 12:44:45ID:???0200nobodyさん
2008/08/20(水) 13:11:21ID:???内部名。
0201nobodyさん
2008/08/20(水) 13:21:14ID:???-> が T_OBJECT_OPERATOR、=> が T_DOUBLE_ARROW って、作った人も適当に考えてたのね。
=>これ、何とかならなかったのかぁ。
0202nobodyさん
2008/08/20(水) 13:48:35ID:???フレームワークごと渡すの?
それとも設置の時点でインストールしてもらうの?
0203nobodyさん
2008/08/20(水) 13:49:07ID:???T_OBJECT_OPERATORはまだしも、T_DOUBLE_ARROW って、作った人もいい加減だったのね。
何とかならなかったのかなぁ。
0205nobodyさん
2008/08/20(水) 13:58:50ID:???=>は「イコール大なり」
0206nobodyさん
2008/08/20(水) 14:06:54ID:???ナイスオチ
口に出すことがほとんどないから特に意識てなかったんだろうな
>>198
Perlの連想配列も=>を使うぜ
PHPはPerlの拡張から始まったしその名残じゃないかな
0207nobodyさん
2008/08/20(水) 15:46:15ID:1OHJU2Jn<script type="text/javascript">
<!--
<?php
$str = "document.getElementById('test').value";
print("出力結果:$str");
?>
// -->
</script>
<span id=test>hogehoge</span>
例としてtestの値であるhogehogeをJavaScriptを用いてPHP変数に受け渡したいのですが
上記の方法で実行してもできません
いったいどのようにすればできるのでしょうか?
0209nobodyさん
2008/08/20(水) 15:49:45ID:???同時にフォームのinput type="hidden"にセットしてPOSTするとか、
httpRequestのGETパラメタで投げるとか幾らでもやりようあるように思うが。
0211nobodyさん
2008/08/20(水) 15:59:41ID:???':, ', _____,,.. -‐ ''"´ ̄ ̄`"'' ー 、., /
':, ', >' ´ `ヽ. / し バ
':, / ヽ. ,' な カ
':, ,:' / / ,'´ ヽ. ':,/Ti i. い に
. \ ,' / / ,' ! ; ', ヽ__ /::::| | | で
\ / ,' ,'! /! ! ; /! i 「:::|'´::::::::| | .!. く
∠__,! / !メ、」_,,./| /! / ! ハ! |__」<:::::」」 |. れ
`"'' 、..,,_ ! / ,ァ7´, `iヽ| / |ヽ、」ニイ、 | ! |^ヽ、」」 |. る
i,/レイ i┘ i. レ' 'ア´!_」 ハヽ| | | ∠ ! ?
─-- / ! ゝ- ' ! ! ! | | `ヽ.
/ 7/l/l/ 、 `'ー‐ '_ノ! | i | ` ' ー---
,. -──-'、 ,人 `i`ァー-- 、 /l/l/l | !. | |
ヽ.ソ `: 、. レ' ', u ,/| | ! |
そ 知 i /ーナ= 、 '、 ノ ,.イ,カ ! | |
の っ .|ヘ./|/レへ`>-r =ニi´、.,_ | i ハ ! ,'
く て ! _,.イ´ヽ.7 / /:::| /レ' レ'レ'
ら る | /7:::::! ○O'´ /::::::レ'ヽ.
い .わ .| / /:::::::レ'/ムヽ. /::::::::/ ヽ.
! ! よ ! ./ ,':::::::::::!/ ハ:::::`´:::::::::::;
0213nobodyさん
2008/08/20(水) 16:22:25ID:???みんなの本音は>>208と同じだと思うぞ
目的が見えないんだよ
>>208の言いたいことは、testの値を出力するならjavascriptのdocument.writeでいいじゃんってこと
>>209のアドバイスはtestの値をPHPで加工する場合のこと(POSTがページ変移ありで、httpRequestはページ変移なし)
ちなみに>>207の説明でもソースでも、上の2通りのどっちか分からん
どうしたいかは分かる、でも何がしたいか分からんってことだな
0214nobodyさん
2008/08/20(水) 16:28:50ID:???0215nobodyさん
2008/08/20(水) 16:30:53ID:???208だが煽ったつもりはないぜ
>>207がしたいことをそのままソースで読み取ったわけだからPHPでせず
>>213のいうとおりdocument.writeでできるってことを言いたかっただけ
0216nobodyさん
2008/08/20(水) 16:43:45ID:???0218nobodyさん
2008/08/20(水) 16:46:14ID:???少なくてもC++よりも速くならない。
いや、速くならないどころか遅くなる。
変数を割り当てるたびにメモリーを割り当てるから、
ループの中で変数をつくったりすると、
メモリーリークが頻発する。だから、大規模開発には向かない。
そもそも、PHPはJAVAのようなガーベージコレクションが効率よく動作しない。
0219nobodyさん
2008/08/20(水) 16:47:28ID:???0221nobodyさん
2008/08/20(水) 16:54:49ID:???クライアントサイドからサーバサイドに逆に値を受け渡したい場合だってあるだろ。
想像力が貧困すぎ。
もしかして全く予想できない?document.writeするだけしか思いつかない?
初心者が下手に回答すると恥かくからやめとけ、な。
■ このスレッドは過去ログ倉庫に格納されています