【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
0712nobodyさん
2006/02/20(月) 08:17:51ID:???for($i=1;$i<=5;$i++){
if($i<=5){
//特定の動作
continue; //←なしでもいい
}else{
break;
}
}
じゃだめなの?
0713712
2006/02/20(月) 08:23:25ID:???for($i=1;$i<=5;$i++){
//特定の動作
if($i==5){ //最後の処理 }
}
0714nobodyさん
2006/02/20(月) 10:06:25ID:???0715nobodyさん
2006/02/20(月) 10:40:46ID:???while (TRUE) {
if (++$i<=5)
echo '途中';
else {
echo '最後';
break;
}
}
で良さそうな
0716nobodyさん
2006/02/20(月) 10:47:48ID:???0717nobodyさん
2006/02/20(月) 12:03:55ID:???0718nobodyさん
2006/02/20(月) 12:12:10ID:???0719nobodyさん
2006/02/20(月) 13:45:09ID:???0720nobodyさん
2006/02/20(月) 13:52:42ID:???ちょと教えてほしいのですがinputのテキストフィールドなどの値を表示させるとき
<input value='<?=$hoge?>'> だと$hogeに'が入っているとおかしくなるし
<input value="<?=$hoge?>"> だと$hogeに"が入っているとおかしくなるし
<input value=<?=$hoge?> style=〜> だと$hogeが空白だとvalue後のタグが値と認識されて
おかしくなってしまうのですがどうしたらよいのでしょうか?
0721nobodyさん
2006/02/20(月) 13:59:22ID:???変数の宣言を強制する方法はありますか?
0723nobodyさん
2006/02/20(月) 14:08:52ID:???----test.php----
変数aに10を入力し、それを変数bに移し変数bを出力する
====source====
error_reporting(E_ALL);
$a = 10;
$b = $c; // 未宣言としてここは防げる。
$c = 10; // ここは防げない。
echo $d; // 未宣言としてここは防げる
----<test.php>----
0726nobodyさん
2006/02/20(月) 15:27:30ID:???0727697
2006/02/20(月) 15:30:36ID:???>>713
「特定の動作」は、ループの最後の"$i<=5"が真ならば実行し、偽ならば実行せずにループ終了
というようにさせたいのです。
それですと必ず最初に「特定の動作」を行ってしまうので、申し訳ありませんが趣旨とは少し異なります。
>>715
ちょうどその動作です。
綺麗なコードをどうもありがとうございます。
>>716
$i=0と考えていただいて結構です。申し訳ありませんでした。
>>717
最初にdo...whileを使おうと方針を立てただけで、同じ動作が行われるならば特に問題はないです。
do{
//ループ
}while(条件式) ここに条件が真の場合に行われる動作 ;
このような仕様になれば楽なのですけどね。
0728nobodyさん
2006/02/20(月) 15:44:16ID:???$i=0から開始なら
for($i = 0; $i <= 5; $i ++, 特定の動作) {
}
でいいじゃん
0729nobodyさん
2006/02/20(月) 16:05:20ID:???ちょこっとヒント頂けませんかoz
$conn=ocilogon("xxx","yyy","zzz");
$sql = "select id,pass from users";
$stmt = OCIParse($conn, $sql);
OCIDefineByName($stmt, "ID", &$dbid);
OCIDefineByName($stmt, "PASS", &$dbpass);
OCIExecute($stmt);
while(OCIFetch($stmt)){
$idpw[$dbid] = $dbpass;
}
OCIFreeStatement($stmt);
OCILogoff($conn);
0730nobodyさん
2006/02/20(月) 16:19:35ID:???簡単なsql文でデータは持って来れてるのは確認したので
配列に格納するところがおかしいとは思うんですが・・・
0732729
2006/02/20(月) 16:44:05ID:???聞く前にまだ自分にできることあったのに気づかなかったのがセンスなさ過ぎますね(TT
ありがとうございました またしばらく悩んでみます
0735nobodyさん
2006/02/20(月) 18:19:28ID:???0736nobodyさん
2006/02/20(月) 18:41:07ID:???0737nobodyさん
2006/02/20(月) 18:54:32ID:E2kZov7hPHPの最初で header('Content-type: text/plain;'); としてもうまくいきません。
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をつけてそいつの送信の有無を確認する。
■ このスレッドは過去ログ倉庫に格納されています