【PHP】下らねぇ質問はここに書き込みやがれpart16
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/02/05(日) 22:35:34ID:sf8bx52Dここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
過去スレは>>2
0738nobodyさん
2006/02/20(月) 18:56:12ID:???header前でechoとかprintとか使ってない?
0739nobodyさん
2006/02/20(月) 18:56:36ID:???なことはできますか?
例)
preg_match_all('([0-9]+?)', '1,2,3,4,5,6,7,8,9', $matches);
この例では5までマッチしたら正規表現による検索を中止したい。
0740737
2006/02/20(月) 19:02:18ID:???> headerの前で何か出力をすると意味ないよ。
> header前でechoとかprintとか使ってない?
使ってないです。
ちなみにheader()の前でheaders_sent()してみるとFalseでした。
php.iniの設定の問題ですかね…
0743nobodyさん
2006/02/20(月) 19:06:55ID:???カンマ刻みの「要素,キー」が複数行あるデータをtxtファイルから読み込みasortしたいのですが。
読み込んだファイルから一気に連想配列を作成のしかたを教えてください。
自分では、
$lines = file("test.txt");
で読み込んだあとに、
$i = 0;
foreach ($lines as $value) {
list($a => $b) = explode(",",$lines[$i]);
echo "$a => $b";
$i++;
}
でできるかな…とかおもったんですが無理でした。
勉強中なんですさまじく頭悪い質問だとおもいますがよろしくお願いします。
0744nobodyさん
2006/02/20(月) 19:58:21ID:???allでは無理。つーかallって言わないだろそれ。
preg_matchはそれを実現するために4.3.3以降でoffset指定ができるようになってるから
ループで回せ。
0745nobodyさん
2006/02/20(月) 20:00:30ID:???条件にあるループにして途中で
break
die
return
continue
あたりで出来るんじゃね
preg_match_all使ったこと無いけどさ
0746739
2006/02/20(月) 20:04:30ID:???>allでは無理。つーかallって言わないだろそれ。
うーm、確かに
それでは、ループで回してみます。
0748nobodyさん
2006/02/20(月) 20:58:35ID:???> list($a => $b) = explode(",",$lines[$i]);
ここで無理せずに
list($a, $b) = explode(〜);
$array[$a] = $b;
にしときなよ。
0749nobodyさん
2006/02/20(月) 21:08:16ID:???レスありがとうございます。
やっぱ、それしかないんですかねぇ。
問題ないしやっぱりそれでいこうかとおもいます。
回答ありがとうございました。
0750nobodyさん
2006/02/20(月) 22:01:47ID:???一発でインストールできるコマンドは無いんですか?
落としたパッケージを一つ一つ入れる方法しか見つかりません。
Fedora core4です。
0751nobodyさん
2006/02/20(月) 22:04:06ID:???見やすいコードを書くんだ。
0752nobodyさん
2006/02/20(月) 22:08:30ID:???それを言うなら「かっこいいコードなんて書かなくていい。分かりやすいコードを書くんだ」だと思う。
バグを生まない鉄則だよね。
0754nobodyさん
2006/02/20(月) 22:58:13ID:???例
hoge.csv の2行目,6列目の文字列を表示
<?echo
0755nobodyさん
2006/02/20(月) 22:59:20ID:???r' ,v^v^v^v^v^il / ヽ
l / jニニコ iニニ!. / ジ き ぼ l
i~^' fエ:エi fエエ)Fi ! ャ れ く l
ヽr > V ! イ い は l
l !ー―‐r l <. ア な l
__,.r-‐人 `ー―' ノ_ ヽ ン /
ノ ! ! ゙ー‐-- ̄--‐'"ハ ~^i \_ _ノ
ヽ ! ヽ、_ _.ノ i \  ̄ ̄ ̄ ̄
ヾV / ! /.入
0757nobodyさん
2006/02/20(月) 23:05:58ID:???$fl = file ("hoge.csv");
$sp = split ("\t", $fl[1]);
$target = $sp[6];
かな。
0759nobodyさん
2006/02/21(火) 00:26:57ID:???0761nobodyさん
2006/02/21(火) 01:46:35ID:???0763nobodyさん
2006/02/21(火) 01:55:32ID:???fgetcsvなんて運頼みの関数使っちゃああああああああ
0764nobodyさん
2006/02/21(火) 01:56:44ID:???これ試してみ
"ソ","あああ"
0765nobodyさん
2006/02/21(火) 02:49:36ID:???タブ区切りだけのものとかにこう使うと問題無く使えて便利だよ。
$line = fgetcsv($fp, 1024, "\t", '');
0766nobodyさん
2006/02/21(火) 05:12:01ID:???ZIP解凍関数ならあるのですが…
0770nobodyさん
2006/02/21(火) 10:26:49ID:9X8UKVFdショッピングカートの原型を作っているのですが、
$nameにtestが入っていて送信すると、$_SESSION['test']=$testになるようにし、
header('Location')で次のページで表示します。
再び前のページに戻って今度は$nameにtest2が入っているデータを選択して
送信します。しかし、次のページではtestしか表示されません。
次のページではforを使って、$_SESSION['test']に入っているデータをすべて
出すようにしたのですが、1つしか入らないみたいです。
説明が下手で済みませんが、セッション変数に次々とデータを入れて
すべて表示させるような事はできるのでしょうか?
0771nobodyさん
2006/02/21(火) 10:27:36ID:???$nameにtestが入っていて送信すると、$_SESSION['test']=$testになるようにし、
↓
$nameにtestが入っていて送信すると、$_SESSION['name']=$nameになるようにし、
0772nobodyさん
2006/02/21(火) 10:34:45ID:???>$nameにtestが入っていて送信すると、$_SESSION['test']=$testになるようにし、
>header('Location')で次のページで表示します。
現在の$_SESSION['test']=="test1";
>再び前のページに戻って今度は$nameにtest2が入っているデータを選択して
>送信します。しかし、次のページではtestしか表示されません。
現在の$_SESSION['test']=="test2";
$_SESSION['item'] .= "test1,";
$_SESSION['item'] .= "test2,";
のように買い物籠のリストを作成してみては?
そんで$_SESSION['test1']が買い物かごの内容にすればいいんじゃないかな。
0773nobodyさん
2006/02/21(火) 12:25:16ID:???両者の違いは引数を羅列して渡すか、配列にして渡すかだけですか?
例えば、
function test($var1, $var2, $var3) {
return $var1 + $var2 + $var3;
}
関数testを呼び出して引数を渡したい場合、
$result = call_user_func('test', $a, $b, $c);
と、
$result = call_user_func_array('test', array($a, $b, $c));
は等しいという認識であってますか?
0774nobodyさん
2006/02/21(火) 12:27:14ID:nnE5DkIVその時に文字列のみをハイライトしようと思い、曖昧検索のため大文字,小文字は両方ハイライトしてもらいたいため
mb_eregi_replace
でやろうとしましたが、特定の文字列では正規表現されないのでエラーになります。(当たり前ですけど)
どうすれば英数小文字,大文字でも正確にハイライトできるでしょうか??
PHP4.4.2を使用しています。
0775nobodyさん
2006/02/21(火) 12:49:03ID:???call_user_func_arrayの方は引数は必ず二つでなくてはならない。
'function name'と'parameter(mixed)'
call_user_func はいくつでも引数を指定できる。
例えば
function hoge($a, $b)と
function hogehoge($a)
を使い分けたい場合は
call_user_funcでは引数の数が合わなくなってしまいますが、
call_user_func_arrayを使えば
call_user_func_array ('hoge', array('a_var', 'b_var'));
call_user_func_array ('hogehoge, array('a_var'));
とできるので、call_user_func_arrayの方が柔軟性があると言えるでしょう。
0776nobodyさん
2006/02/21(火) 12:53:23ID:???preg_match_all使ってみては?
例文としては。
<?php
$a = "abcdefg/hijklmn/opqrstu/vwxyz";
preg_match_all ("<[^/]*>i", $a, $b);
print_r ($b);
?>
0777773
2006/02/21(火) 13:09:52ID:???丁寧にありがd
call_user_func_array()の方が見栄えが良くていいな。書き換えるか。
レスサンクス。
0778774
2006/02/21(火) 13:24:41ID:???preg_match_allは始めてみましたがいまいち使い方がよくわかりませんでした。
とりあえずquotemeta()で一時的に対処しました。
0780nobodyさん
2006/02/21(火) 15:18:51ID:???0781nobodyさん
2006/02/21(火) 15:26:29ID:???0783774
2006/02/21(火) 17:39:23ID:nnE5DkIVエラーログには
PHP Warning: mb_eregi_replace(): mbregex compile err: premature end of regular expression in...
という記録が残されているのですが、どのような文字列が投稿されてるのかも解らず困ってます。。
0785nobodyさん
2006/02/21(火) 17:48:24ID:???入力された時刻を合わせて記録しとけばエラーログと突合せもできるだろ。
0786nobodyさん
2006/02/21(火) 17:55:50ID:???0787774
2006/02/21(火) 18:01:28ID:nnE5DkIVで使用しています。php.iniは
mbstring
Multibyte Support enabled
Japanese support enabled
Simplified chinese support enabled
Traditional chinese support enabled
Korean support enabled
Russian support enabled
Multibyte (japanese) regex support enabled
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding SJIS SJIS
mbstring.language neutral neutral
mbstring.substitute_character no value no value
となっていて、imodeでも使えるようにしているのでSJISコードです。
とりあえずログ吐かせてみます。
0788774
2006/02/21(火) 18:14:39ID:nnE5DkIV"ー"
でした。
0789nobodyさん
2006/02/21(火) 18:21:15ID:???「ゼ」とかどうよ
0790774
2006/02/21(火) 18:24:02ID:nnE5DkIVおっしゃるとおりです。
0791nobodyさん
2006/02/21(火) 18:31:24ID:???0792774
2006/02/21(火) 18:42:15ID:???ただこうなるとは思わず、ちょっとやっかいです・・
0793nobodyさん
2006/02/21(火) 18:43:04ID:???> mbstring.language neutral neutral
これJapaneseに設定してみて
0794nobodyさん
2006/02/21(火) 18:49:01ID:???となりましたが、やはりエラーです。。
んー困った。。。
0795nobodyさん
2006/02/21(火) 19:02:01ID:???$result = mb_ereg_replace ($replace_str, "<Font Color=\"#FF0000\">\\0</Font>", $input, "ip");
と後ろに"p"をつけてみて。
mb_ereg_replace(x,y,z,"i");と
mb_eregi_replace(x,y,z);は同じ動作するから。
0796nobodyさん
2006/02/21(火) 19:05:29ID:???ここの情報がもしかしたら有用かもしれない。
ttp://ns1.php.gr.jp/pipermail/php-users/2002-November/011727.html
ttp://fjsk.s39.xrea.com/item_340.html
正規表現が停止する文字が入ってるからかもね。
[などは\でエスケープしてあげるといいかも。
0797774
2006/02/21(火) 19:10:25ID:???かわんないです。。
>>796
読んでみました。pもつけてるのにな。
あと、mbでやると"ゾ"を代入しても変換されないことに気づきました。
str_replaceで英大小文字も変換できるだけでいいのに・・・
0798nobodyさん
2006/02/21(火) 19:11:23ID:???このサイトのソースを見ながら、フォームからアクションで動作するプログラムを作っていたのですが
ttp://www.komonet.ne.jp/~php/program/bbs/chap1.htm
Array
(
[action] => regist
)
$_POSTではこのように返ってきているのですが、if文の後の処理がされません。
実際は、掲示板を作りたいわけでなくラジオボタンが全て選択されているときにだけ、次のページor次の処理へというようにしたいのですが。
よろしくお願いします。
ファイル名test.php
<FORM ACTION="test.php" method="POST">
・
・
・
<INPUT TYPE="SUBMIT" VALUE="書き込み/更新">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="regist">
・
・
if($action == "regist"){
〜
}
0799nobodyさん
2006/02/21(火) 19:15:14ID:???スーパーグローバル変数を調べてごらん。
$action = $_POST['action'];
で$action埋めてなくちゃif文は実行できないよ。
0800nobodyさん
2006/02/21(火) 19:17:43ID:???おまえ途中の話を全然読んでないだろ…
>>794
mbstringの問題じゃなく、quotemetaがマルチバイトに非対応なせい。
mb_ereg_replace使ってマルチバイト対応のquote処理を自前でやるか
SJISやめてEUCに変換してから検索するとかしないとダメかもな。
0801nobodyさん
2006/02/21(火) 19:24:36ID:???そこのサイトのプログラムは古くて、ほとんどの場合、そのままでは動作しない。
というか$_POSTの存在まで気付いときながら何故そんな旧時代のサイトを参考にしてるんだ。
0802nobodyさん
2006/02/21(火) 19:55:48ID:???返信ありがとうございます。
そうなのですか。
アクションリスナーでnullが返ってきたらページを移動させない。
みたいなニュアンスで作れるのかなと前途記述したサイトをみてやってみたのですが。
$_POSTはすでに使用していて、別ページにとんだときにラジオボタンの状態に応じた処理をつくりました。
その前のページでのラジオボタンのチェックミスがあったときの処理についてアドバイスをください。
0805nobodyさん
2006/02/21(火) 20:13:21ID:???すいません。
ラジオボタンによる選択肢を2つ用意したとして、1つに記入ミスがあったとする。
実行ボタンを押しても次のページに飛ばず再入力を求めるようなものを作りたい。
if(入力ミスがあったら?){
}
をどのように記述すればいいかがわかりませんでした。
javaの場合だと
アクションリスナーでアクションをキャッチできるのですが。
phpの場合だとformの実行ボタンを押した、という状態をどのように感知するのかがわかりません。
調べてたら、
if(count($_POST) > 0){
でできるかもっぽいことがわかったのでためしてみます。
>>804
なるほど…
でも、勉強を含めて覚えてる最中なのでできれば妥協はしたくなかったんです。
見苦しい質問ですいません。
0806nobodyさん
2006/02/21(火) 20:24:28ID:???勉強も十分必要だが、適材適所を見極める目も養ったほうがいいよ。
コードを組めるようになったのに、汚いコーディングしかできなくなると自分で大変だから。
0808nobodyさん
2006/02/21(火) 20:38:14ID:???PHPがどこで実行されるのかつーと、鯖で動くんだなこれが。
鯖側で動くJavaのJSPやServletなんかも鯖で動くんだな。
一方、JavaScriptやAppletなんかは、ブラウザ側で動くことになる。
普通はこんな感じになるんじゃないかな。
1. JavaScriptで入力チェック、okであれば 2.へ。(JSが嫌いな人は 1.は無し。ブラウザ側)
2. PHPで入力チェック後、エラーメッセージなり既入力値なり何なりを付け足したHTMLを出力。(鯖側)
ちょいと変わり物だと、Ajaxを使うのもありかな。
0809nobodyさん
2006/02/21(火) 21:10:40ID:???mbを使わない
preg_quote
など。ただしこれを使ってもまた別な問題が発生する。
特に理由がなければEUCで書いて出力だけSJISにする方が早い。
0810nobodyさん
2006/02/21(火) 21:36:24ID:???など、というかその組み合わせだな。
>>797
1.mb_eregを使うならエスケープは自力でやる
2.quotemetaやpreg_quoteを使うならeregかpregを使ってmb_eregは使わない
mb_eregじゃなければquotemetaやpreg_quoteでSJISが相手でも正しくクオートできるが、
その代わり1文字のSJISコードなどを正常にマッチできる保障はなくなる。
ま、元々がstr_replaceを使ってたって言うんならeregi_replaceでいいんじゃないの?
0811nobodyさん
2006/02/21(火) 21:38:41ID:???> phpの場合だとformの実行ボタンを押した、という状態をどのように感知するのかがわかりません。
type=hiddenで特定のデータを埋め込んでおいてそのデータが送信されたかどうかをチェックするか、
type=submitにnameをつけてそいつの送信の有無を確認する。
0812798
2006/02/21(火) 22:02:00ID:???なるほど、ということは。
ファイル名test.php
<FORM ACTION="test.php" method="POST">
・
・
・
<INPUT TYPE="SUBMIT" VALUE="実行">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="regist">
・
・
if($action == "regist"){
〜
}
というプログラムで$_POSTが
Array
(
[action] => regist
)
と返ってきていてif文内の処理がされないのは、別の部分の記述ミスということなのかな。
あと、>>805さんの2個目のやり方だと。
<INPUT TYPE="SUBMIT" VALUE="実行" NAME="id">
if($id == "実行"){〜}
という感じですかね?もう少し勉強してから出直してきます。
0813nobodyさん
2006/02/21(火) 22:05:32ID:???〜
}
0814nobodyさん
2006/02/21(火) 22:06:17ID:???ここはお前のメモ帳じゃないんだ。
ちゃんとAN HTTPDやApacheとPHPを入れて自分で実践してくれ。
0815nobodyさん
2006/02/21(火) 22:06:37ID:???そんなに $_POST['action'] や $_POST['id'] を嫌ってあげなくてもいいと思うのよ
0816nobodyさん
2006/02/21(火) 22:07:53ID:y3MPaFDb0817nobodyさん
2006/02/21(火) 22:07:59ID:???0818nobodyさん
2006/02/21(火) 22:14:50ID:???ごめん
何度か自鯖でためしてたんですが、参考にしてたサイトのやりかたが古かったようで。
いまいち使い方がわかってなかったようです。
>>813
thx
0819nobodyさん
2006/02/21(火) 22:37:20ID:???0820nobodyさん
2006/02/21(火) 22:44:30ID:???0821nobodyさん
2006/02/21(火) 23:28:23ID:???0822nobodyさん
2006/02/21(火) 23:29:02ID:???それもありますけど
$user_id = $_POST['id']
みたいなかんじで別の変数に入れてたり。
0823nobodyさん
2006/02/21(火) 23:30:08ID:???0826nobodyさん
2006/02/21(火) 23:59:45ID:???例えば、
hoge.php?_SESSION[user_pw]=hogehoge
って形で送られてきたとします。これを
extract($_GET)
しちゃうと、$_SESSION['user_pw']の値が、
"hogehoge"に変更されてしまいます。
もし事前にユーザのパスワードを、$_SESSION['user_pw']に
保持してたとしたら、勝手に書き換えられてしまうことになります。
それを避けるために
extract($_GET, EXTR_SKIP)
ってやって上書きを避けたとしても、
このままでは変数の初期化を忘れる危険性があります。
extract($_GET, EXTR_PREFIX_ALL, "get")
と、接頭辞をつけるのが一番安全な気はしますが、
それなら最初から
$hoge = $_GET['hoge'];
ってやるのと手間が変わらないと思いますし、可読性も増します。
確かにextractするのは楽だと思いますけど。
0829nobodyさん
2006/02/22(水) 03:10:45ID:???みんな分かってるくせに。
どんな時でも値チェックは基本。
時には正規表現も使う。これでいいか?
0830nobodyさん
2006/02/22(水) 06:28:29ID:???htmlspecialcharsに通すだけにしてるんですけど、
それだけじゃ足りないでしょうか?
0833nobodyさん
2006/02/22(水) 09:13:49ID:???やってて当たり前っつーか。
0834nobodyさん
2006/02/22(水) 09:40:06ID:???どういうことを入力されたらXSSやSQLインジェクションに繋がるかがわからない・・・
赤マンモス本しか読んでないから、セキュリティ関係の本も読んだほうがいいのかな。
0835nobodyさん
2006/02/22(水) 10:39:33ID:???ttp://64.233.179.104/search?q=cache:LgahQDd3smIJ:www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.html+sql+%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&hl=ja&gl=jp&ct=clnk&cd=1
ググればいくらでもあるだろ
0836nobodyさん
2006/02/22(水) 10:40:13ID:OxTvy2cr0837nobodyさん
2006/02/22(水) 10:49:53ID:/RILhY7o個人的に携帯専用の求人情報サイトを作りたいと
思っていますが、
PHPの知識は皆無ですので、
システムが構築できません。
システムの参考HPはhttp://www.jwpc.jp/
です。
どなたか、安く作成してくれる方、
または安く作成してもらえるところはないでしょうか?
メールを記載しますので
onm_2006@mail.goo.ne.jp
お返事ください。
システムの機能に関しては詳しくお返事しますので
どうかよろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています