【PHP】下らねぇ質問はここに書き込みやがれ 24
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/07(金) 14:54:53ID:KnVubDvEここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0566560
2006/07/17(月) 16:24:35ID:ab1cz1rXこれらは例ですので気にしないでください。
混乱させてしまったらごめんなさい。
0567nobodyさん
2006/07/17(月) 16:25:43ID:???<input type = "checkbox" name = "type" value = "1" checked>良かった<br>
<input type = "checkbox" name = "type" value = "2" >悪かった<br>
<input type = "checkbox" name = "type" value = "3" >その他
リンク先のページで、
if( $_POST['type']==1){
$a=4;
$b=9;
$c=3;
}elseif(なんたら)
ってかんじがいいと
0568nobodyさん
2006/07/17(月) 16:30:20ID:???<input type = "checkbox" name = "type" value = "a=4,b=3,c=5" checked>良かった<br>
$tmp = explode( ',', $_POST['type']);
foreach( $tmp as $val){
$aaaa = explode( '=', $val);
print_r( $aaaa);
}
0569nobodyさん
2006/07/17(月) 16:31:47ID:???$tmp を無意識に「ドル、ティムポ」って読んじゃうのもれだけ?
0570560
2006/07/17(月) 16:33:53ID:ab1cz1rX速レスありがとうございます。
PHP初心者で、>>567が自分の作ろうとしているものに適しているのかどうか
よくわからないので、localhostで試してからまた来ます。
0571nobodyさん
2006/07/17(月) 16:34:15ID:???再構成できるんだから>>560みたいなやり方も一概に悪いとは言えないと思う。
たとえばaとかbとかのキー自体がiniファイルで外部設定できるような仕組みになってれば、
いちいちプログラムを変えなくても様々なニーズに容易に対応できるようになるだろ?
0573nobodyさん
2006/07/17(月) 16:47:57ID:???name = "type[]"
にして複数のチェックボックスを配列にするといいかも。
0574560
2006/07/17(月) 16:59:52ID:ab1cz1rXすいません。勉強不足で何のことやらさっぱりです。
>>573
>なんとか診断みたいなやつかな? 設問がたくさんあるタイプのやつ。
ズバリそれです。
>name = "type[]"
>にして複数のチェックボックスを配列にするといいかも。
これもよくわかりません。
0575nobodyさん
2006/07/17(月) 17:02:26ID:???0576nobodyさん
2006/07/17(月) 17:03:28ID:???…なんできみわ"a=4,b=7"みたいな変なパラメータを指定できるようにしたいなんて思ったのかね
チェックボックスで複数指定できるようにするならname="type[]"としとかないと
複数のパラメータを受け取れないぞ。最後の1個で上書きされてしまう。
name="type"にして選択できるのはどれか1つ、ってするならtype="radio"だろ。
0577560
2006/07/17(月) 17:05:47ID:ab1cz1rX<?php
if( $_POST['type'] == 1 ){
$a=4;
$b=9;
$c=3;
}elseif( $_POST['type'] == 2 ){
$a=1;
$b=2;
$c=3;
}
echo "$a"
?>
これだと、$aはelseifの値をとってしまいます。
二つの数値を足したいのですが、どうすればいいでしょうか?
0579nobodyさん
2006/07/17(月) 17:13:11ID:???まず複数指定できるようにするなら
<input type = "checkbox" name = "type[]" value = "a=4,b=7" checked>良かった<br>
<input type = "checkbox" name = "type[]" value = "b=2,c=3" >悪かった<br>
<input type = "checkbox" name = "type[]" value = "c=3" >その他
とnameのとこに[]をつけてパラメータを配列で受け取れるようにせんと。
すると複数にチェックした場合
$_POST['type'][0] = "a=4,b=7"
$_POST['type'][1] = "b=2,c=3"
のようにセットされるようになる。
name="type"にしちゃうと2つ選択しても
$_POST['type'] = "a=4,b=7"
という値が、後ろに続いた
$_POST['type'] = "b=2,c=3"
で上書きされてしまって、結果として
$_POST['type'] = "b=2,c=3"
しかデータ自体が残らないんだから、プログラム上で足そうと思っても足しようがない。
あとは配列を順番に処理するだけだから、ちょっと考えてみれ。
0580nobodyさん
2006/07/17(月) 17:13:35ID:???たとえばhtmlのフォームのところで
<input type="checkbox" name="type[]" value="1">回答1<br>
<input type="checkbox" name="type[]" value="2">回答2<br>
<input type="checkbox" name="type[]" value="4">回答3<br>
<input type="checkbox" name="type[]" value="8">回答4<br>
ってやっておくと、submitで飛んだ先のphpで
foreach($_POST['type'] as $cb){
echo "$cb<br>" ;
}
とか出来るので便利。
あとは>>562と組み合わせるといいよ。
0582560
2006/07/17(月) 17:21:58ID:ab1cz1rXありがとうございます。
読んだだけでは、なかなか理解できなかったので
じっくり考えて見ます。
>>581
すいません。
どうやって説明すればいいのかわからなくて。
0583nobodyさん
2006/07/17(月) 17:28:32ID:???phpでrequireするのと変わらない場合もあるけどな。
htmlだけを直す、っていう方がいい場合もある。
もちろん、そうじゃない場合もある。
0584nobodyさん
2006/07/17(月) 17:50:56ID:???0586nobodyさん
2006/07/17(月) 18:27:47ID:???とりあえず複数の値をフォームで持たせるというやり方は
「間違っている」と言わざるを得ない。あるいは「良いやり方ではない」。
それでも出来るかもしれないけど、もっとシンプルでスマートで
応用の利くやり方は他にいくつかある。
「それを教えてよ」というのは無しだ。それを考えるのがプログラミングだ。
0587560
2006/07/17(月) 19:54:17ID:ab1cz1rXなかなかうまくいきません。
まだ少しプログラムを組むのは早かったかもしれません。
>>596
聞こうと思ったら先に釘を刺されてしまいましたか。
でも頑張ってみます。
0588nobodyさん
2006/07/17(月) 19:58:36ID:???0591nobodyさん
2006/07/17(月) 22:00:01ID:???フォームからは1個の値を渡す。
それをphp側で複数に切り替える。
if(answer=='1'){a=4;B=7;}
elseif(answer=='2'){b=2;c=3;}・・・
という感じで。
一般化すると。
「本当にそこで処理しなければいけないかを考えろ。」
0592nobodyさん
2006/07/17(月) 22:44:25ID:Vse0CV740593nobodyさん
2006/07/17(月) 22:46:02ID:???0594nobodyさん
2006/07/17(月) 22:53:34ID:Vse0CV74恐縮ですが、削除というのはどうすれば出来るのですか?
$_POST['msg'] = preg_replace ('^$', '', $_POST['msg']);
これじゃダメですよねぇ?
0595nobodyさん
2006/07/17(月) 23:08:01ID:???連続した改行を1つの改行に置き換えれば空行=削除に値するんじゃない?
0596nobodyさん
2006/07/17(月) 23:27:12ID:???「2個の改行」ではなく「2個以上連続した改行」な。
「空白+改行」を空行と扱うかを考える必要があるけどね。
0598nobodyさん
2006/07/18(火) 02:57:48ID:???左のバーや上部を表示させるにはどのようにすればいいのでしょうか?
0601nobodyさん
2006/07/18(火) 03:35:07ID:RAKThs0C$ENV{'HTTP_COOKIE'}で何も取得できません!
作成直後ではなくて、ブラウザでリクエストを再送しても取得できません。
どんな原因が考えられましょうか!
0602nobodyさん
2006/07/18(火) 03:47:13ID:???HTMLをテンプレとして別ファイルにしてinclude。
別ファイルにする際、左のバーだの上部だの、いつも同じ部分を
別個にすればよい。
ちなみにテンプレと言っても、いわゆる「テンプレート・エンジン」なんて使わなくても
自作テンプレで十分。
0603nobodyさん
2006/07/18(火) 03:47:50ID:???0604nobodyさん
2006/07/18(火) 04:02:26ID:???ありがとうございます。
それだと、同レベルのディレクトリ以外は難しくないですかね?
./../等として読みに行くとすると、ディレクトリ配置を変更するとなると
全てのファイルを書き直さなければいけなくなると思います。
また、include元のHTMLが<img src="./hoge.jpg">等とやっていた場合は
違うレベルのディレクトリのファイルから呼び出されたりすると
そのイメージのリンクは違うファイルを対象としてしまうと思うんですけど。
結構大きなサイトになると、同レベルのディレクトリに全て置くっていうのは
現実的じゃない気がするんですけど、そういうものなんですかね?
0607nobodyさん
2006/07/18(火) 09:02:10ID:???0608nobodyさん
2006/07/18(火) 09:28:49ID:???この程度の日本語が通じないヤツは、ほんとにどうでもいい
0609nobodyさん
2006/07/18(火) 09:29:55ID:WFdfnqCG>>453です。
本日、文字化けが起きたマシンを調べてみた結果、php.iniは
;mbstring.language = Japanese
となっており、mbstring.language はコメントアウト(neutralでUTF-8?)
されていました。
ただ、文字化けが起きなかった他のPCも、mbstring.language はコメント
アウトされており、mbstring.language が文字化けの原因ではないような
気がします。
どなたか、この文字化けの原因はお分かりでしょうか?教えて頂ければ、
幸いです。
0610nobodyさん
2006/07/18(火) 09:48:56ID:???とりあえず、それがコメントアウトされてたら文字化けしない方がおかしいので直せ。
そこは通常、Japaneseで設定されてないといけない。
ただ、ここがJapaneseじゃなくてもdetect_orderに特定の文字コードが設定されてれば
文字化けは回避できるかもしれない。
通常、これはautoに設定されてて、autoはlanguageの設定に合わせて自動設定されるので。
0612nobodyさん
2006/07/18(火) 11:33:37ID:WFdfnqCG>>610様。
先程、コメントを外し、mbstring.language = Japanese
にしてApacheを再起動しました。
>>611様。
アップロードされたファイル自体を目視確認しました。アップロード
されたファイル自体は、確かに文字化けしていないことを、目で確認
しました。
けれども、文字化け(最初の文字だけが「??」になってしまう)は
変わりません。アップロードされたファイルを「system(nkf -w 〜);」
とやってもやらなくても、同じ文字化けが起きてしまいます。
if ($_FILES['csvfile']['name'] != "") {
$tempfile = $_FILES['csvfile']['tmp_name'];
$tempfile_utf = $_FILES['csvfile']['tmp_name']."utf";
system("nkf -w ".$tempfile." > ".$tempfile_utf); // これをやらなくても文字化けする。
$file = fopen($tempfile_utf, 'r');
list($field1,$field2,$field3)=fgetcsv($file,20000);
print("1番目".$field1."2番目".$field2."3番目".$field3);
}
なのですが、何が原因かお分かりでしょうか?
0614nobodyさん
2006/07/18(火) 11:55:52ID:???実際にphpinfo();を表示させているサイトがありました。
サーバの環境から、Win鯖なのでユーザー名まで全て晒しています。
phpinfo();が表示する情報程度のものは
別に誰に見られても困るほどの事は無いのでしょうか?
0617nobodyさん
2006/07/18(火) 12:40:04ID:???> けれども、文字化け(最初の文字だけが「??」になってしまう)は
その最初の文字って何て文字さ。
> list($field1,$field2,$field3)=fgetcsv($file,20000);
> print("1番目".$field1."2番目".$field2."3番目".$field3);
化ける内容ってこの出力なのか?
fgetcsvは日本語を含むCSVデータでは使えないぞ?
0619nobodyさん
2006/07/18(火) 12:42:36ID:???0620560
2006/07/18(火) 13:13:09ID:n2ZEUTcJname="type[]" value="1"のようにしたほうが良いと言うことまでは
わかりましたが、どうやって複数の数値を持たせるのかがわかりません。
なんどもすいませんが、よろしくお願いします。
0622nobodyさん
2006/07/18(火) 13:16:46ID:???safemode の on/off が見えていたら困る場合、
on/off が見えなくても、
on か off のどちらかなのだから、safemodeが見えなくても、1/2で困ることになる。
0623nobodyさん
2006/07/18(火) 13:20:08ID:???onを予想して困る要因を作成し、1/2にハズレてだめだったとしても、
次にoffの場合の困る要因を作ればいいのだから、
どのみち困らせることができることになる。
0624nobodyさん
2006/07/18(火) 13:21:27ID:???safemodeがばれて困るような場合では、
safemodeが見えていようが見えていまいが、困るということだ。
0626nobodyさん
2006/07/18(火) 13:32:24ID:???value="a=1,b=2,c=3"
にする場合に必要なパーツはほぼ出揃ってるんだから、そっちでやっていいんじゃねーの?
(複数の値ってより、"a=1,b=2,c=3"っていう1つの文字列だな)
0628614
2006/07/18(火) 13:34:05ID:???やっぱドラゴンボールに例えるとわかりやすいな
0630nobodyさん
2006/07/18(火) 13:40:06ID:???仙豆が無い事がわかって困るなら、仙豆なんて物が初めから無くても困る
ってことだ
0632nobodyさん
2006/07/18(火) 14:22:42ID:???0633nobodyさん
2006/07/18(火) 15:28:52ID:WFdfnqCG> list($field1,$field2,$field3)=fgetcsv($file,20000);
> print("1番目".$field1."2番目".$field2."3番目".$field3);
> 化ける内容ってこの出力なのか?
> fgetcsvは日本語を含むCSVデータでは使えないぞ?
>>612 です。ありがとうございます。>>617様のアドバイスを元に、
「fgetcsv 日本語」で調べてみました。PHP5でfgetcsvを使った場合、
日本語が不安定のようです。ただ、CSVファイルの中身を全てダブル
クォーテーションで囲んで試したところ、文字化けしないで済みま
した。
どうも、ありがとうございました。
0634nobodyさん
2006/07/18(火) 15:35:22ID:qPB2Cam5で、メールを送信しようとしたのですが、エラーが返ってきます。
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
; For Win32 only.
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
なんですけど、どう設定すれば良いのでしょうか?
WindowsXP、Apache2.0.58、PHP5です。
本当にくだらない質問ですが、お願いします。
0636nobodyさん
2006/07/18(火) 15:43:28ID:???UTF-8でマルチバイト文字列の長さを、日本語=2、英数字=1として
カウントしたいのですが、strlenはひらがな、カタカナ、漢字を
全て3バイトとカウントすると仮定しても大丈夫でしょうか?
<?php
$str = "日本1234語";
$n = mb_strlen($str);
$m = strlen($str);
for ($i = 0; $i <= $n; $i++) {
$t = $i * 3 + $n - $i;
if ($t == $m) {
echo $i * 2 + ($n - $i);
break;
}
}
?>
0637634
2006/07/18(火) 15:53:15ID:qPB2Cam5シングルクォートにしてみましたが、変わりないです。
0640nobodyさん
2006/07/18(火) 15:57:59ID:???英数字のみを取り出して足し算、でした。
0642nobodyさん
2006/07/18(火) 15:59:31ID:???君はもう少し基本的なプログラムからゆっくり勉強した方がいいと思うぞ。
なんでそんな基本的なことで詰まってるのよ。
0644nobodyさん
2006/07/18(火) 16:02:10ID:???$m = strlen($str);
$a = ($n + $m) / 2
0645634
2006/07/18(火) 16:02:53ID:qPB2Cam5すいません
Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\Web\test.php on line 9
です。
0646nobodyさん
2006/07/18(火) 16:03:57ID:???で、それでなんで mb_send_mail でエラーが起きたと思ったの?
404ってApacheのエラーコードじゃなくて?
0648646
2006/07/18(火) 16:06:26ID:???0650nobodyさん
2006/07/18(火) 16:16:34ID:???エラーメッセージってのはその名の通り、エラーの内容が表示されているんだよ。
中高生が読めるレベルの英語なんだから、ちゃんと読めばエラーの理由が分かる。
0652nobodyさん
2006/07/18(火) 16:37:26ID:???実働サンプルを拾ってきた方が早いよ
0654nobodyさん
2006/07/18(火) 17:22:21ID:???もうちょっと頭を使いましょう。
ディレクトリを後から変更する予定があるのなら、
includeパスに含めるディレクトリ部分の文字列を変数なり定数なりにすれば良い。
●例:
define ("_DIR",'http://example.com/hoge/'); //ディクレトリ変更ならhogeを書き換える
include (_DIR."template.php");
0655nobodyさん
2006/07/18(火) 17:25:59ID:???0656654
2006/07/18(火) 17:29:01ID:???定数の定義自体も別ファイルにしてincludeすれば、
複数のファイルから同じテンプレを読み込んでいても
一箇所のみ変更するだけでディレクトリ名を全て変更できる。
●例;
config.phpにて以下を記述
define ("_DIR",'http://example.com/hoge/'); //ディクレトリ変更ならhogeを書き換える
HTML表示スクリプト(たとえばindex.php)にて、
include ("config.php");
include (_DIR."template_header.php");
include (_DIR."template_left.php");
include (_DIR."template_main.php");
これでキミのやりたいことが実現できるでしょう。>>604=>>598くん。
0657560
2006/07/18(火) 17:35:22ID:n2ZEUTcJ<input type="checkbox" name="type[]" value="a">
<input type="checkbox" name="type[]" value="b">
<input type="checkbox" name="type[]" value="c">
でPHPは
if( in_array( "a" , $ty ) ){
$a1 = 3;
$b1 = 1;
}
if( in_array( "b" , $ty ) ){
$a2 = 4;
$b2 = 32;
}
if( in_array( "c" , $ty ) ){
$a3 = 31;
$b3 = 12;
}
$a = $a1 + $a2 + $a3;
$b = $b1 + $b2 + $b3;
echo "$a";
echo "$b";
こんな感じです。
3個とも選択すればerrorが出ないのですが、それ以外は全部errorです。
また方向が間違っているでしょうか?
0658nobodyさん
2006/07/18(火) 17:35:50ID:???それでも、そのファイルとconfig.phpのファイルの位置関係が変わったら
意味内よね。 って言い出したらきりないけども…。
僕の場合、ディレクトリ構造が変更されることはないと割り切って、
../ だとか ../../ だとかそれぞれに書いてますよ。
0660nobodyさん
2006/07/18(火) 17:41:09ID:???<input type="checkbox" name="type[]" value="1">
<input type="checkbox" name="type[]" value="2">
<input type="checkbox" name="type[]" value="3">
PHP
foreach ($type as $v) {
echo $v."<br>";
}
これをやってごらん。
0661660
2006/07/18(火) 17:44:43ID:???0664nobodyさん
2006/07/18(火) 17:49:38ID:???どうせなら、そういう具体的な数値はイッコの配列に入れたほうがいい
$arrayA = array (3, 4, 31);
$arrayB = array (1, 32, 12);
foreach ($_GET['type'] as $key => $val) {
if ($val) {
$a += $arrayA[$key];
$b += $arrayB[$key];
}
}
方向性ちがったらゴメン
0665nobodyさん
2006/07/18(火) 18:08:08ID:???■ このスレッドは過去ログ倉庫に格納されています