【PHP】下らねぇ質問はID出して書き込みやがれ 111
■ このスレッドは過去ログ倉庫に格納されています
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 110
http://hibari.2ch.net/test/read.cgi/php/1314692611/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0763nobodyさん
2011/10/25(火) 05:37:52.79ID:NHilLcCk【連携ソフトウェア】Apache2.2 【ブラウザ】Firefox3.6.23
WebにあるBBSサンプルをApacheのlocalhostでそのまま動作させたところ
エラーが出て困ってます。
出典: http://1cc.jp/trykis
使ったコード: ttp://phpspot.net/php/html/tutorialbbs.phpss
サイトの通りbbs.phpと名付けて起動したところ
Notice: Undefined index: mode in bbs.php on line 11
と出ました。 対象の行は if ($_POST["mode"] == "write") { です。
この状態で投稿ボタンを押すと
Notice: Undefined variable: lines in bbs.php on line 20
と出ました。 対象の行は for ($i=0;$i<count($lines);$i++) { です。
また「リロード」リンクをクリックすると
Notice: Undefined variable: date in bbs.php on line 57
と出ました。 対象の行は $l_name - $l_message <$date><br> です。
出典ははphpspotという信頼できそうなサイトなんですが、元コードのどこに
問題があるのでしょうか?
0764763
2011/10/25(火) 05:41:48.71ID:???正しくは http://1cc.jp/hgogho です。
0765nobodyさん
2011/10/25(火) 05:55:27.90ID:???phpspotは一見よさそうに見えるけど、すげえだめだから。
理由はくさるほどあるが、省く。
繰り返す。すげえだめだから、見てはいけない。
php関係なく、SEO対策とかを勉強したいなら見てもいい。
0766nobodyさん
2011/10/25(火) 06:32:09.46ID:???安全性の問題
・キーの存在チェックをしていない
・name または message にカンマが含まれると意図しない出力になる
・サニタイジングを行っていない
・排他制御がない
一般的なコーディングと異なることによる速度低下
・ループの外に出せるcountをそのままにしている
・$i++じゃなくて++$i(この辺はまさにそのphpspotでも記載されていたと思うが)
・そもそもforeach
・ファイルの先頭に入れるのではなく、末尾にしたほうがI/O減る。
この場合、forで末尾から出力するか、array_reverse→foreach
少なくとも上記の問題があるコード。
0768nobodyさん
2011/10/25(火) 10:54:10.52ID:???0770nobodyさん
2011/10/25(火) 10:59:06.92ID:???質問するときに短縮URLなんて使うのは頭が狂ってる。
0771nobodyさん
2011/10/25(火) 11:25:44.96ID:???0772nobodyさん
2011/10/25(火) 12:01:54.31ID:iSM6PcDehttp://ja.wikipedia.org/wiki/Phalanger
0773763
2011/10/25(火) 12:38:41.80ID:???有難うございます。
Webで簡単なBBSサンプルを探していたところ、このコードを見つけたので
試しに使ってみました。
かなり駄目要素が含まれているようですが、このレベルの(つまり、名前用1行と
メッセージ複数行と履歴表示の3つ程度を表示の)簡単なサンプルを
探しています。
一応、手元に本は4つありますが、適当なサンプルの記述がありません。
どなたかお薦めのコード(サイト)を教えて下さい。
>>767-770
元のURLは
ttp://phpspot.net/php/pg%E6%8A%95%E7%A8%BF%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E4%BD%9C%E6%88%90.html
と長いと思ったので短縮しました。
今後はこの程度であればそのまま貼っておきます。
0776nobodyさん
2011/10/25(火) 13:53:04.62ID:???え、おかしい?これでしょ
ttp://phpspot.net/php/pg投稿フォームの作成.html
0777nobodyさん
2011/10/25(火) 13:57:49.12ID:???0778nobodyさん
2011/10/25(火) 14:06:35.12ID:???0779nobodyさん
2011/10/25(火) 14:18:08.79ID:???http://ja.wikipedia.org/wiki/URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
文字コードや予約文字の問題があるから、デコードしてしまったURLを張るのはやめたほうがいい
強いて言うなら、デコードは2chブラウザ等の仕事
0780nobodyさん
2011/10/25(火) 14:41:02.14ID:???0781nobodyさん
2011/10/25(火) 17:03:22.62ID:6LnwxfCEfunction insert_data($name, $age, $weight){
//insert data
$sql = "insert into user_info values(NULL, '$name', '$age', '$weight')";
$result_flag = mysql_query($sql);
if(!$result_flag){
die('failed to insert query'.mysql_error());
}
print('<p>insert table succeeded.</p>');
}
insert_data($_POST['name'], $_POST['age'], $_POST['weight']);
この中の$sql = "insert into user_info values(NULL, '$name', '$age', '$weight')";にある
シングルクォーテーションを除くとUnknown column 'なんちゃら' in 'field list' と怒られるのですが、これは何故でしょうか?
ダブルクォーテーションでくくってあると変数は値に変換されてsql文に入ると思ってたのですが違うのでしょうか?
0782nobodyさん
2011/10/25(火) 17:05:40.47ID:???sqlの初歩から勉強しろ
0783781
2011/10/25(火) 17:05:43.36ID:???【OS名】fc14.i686
【PHPのバージョン】5.1
【連携ソフトウェア】apache,mysql
【質問内容】
>>781
0784nobodyさん
2011/10/25(火) 17:06:23.88ID:???0786nobodyさん
2011/10/25(火) 17:43:28.96ID:???0787nobodyさん
2011/10/25(火) 19:45:45.90ID:???0788nobodyさん
2011/10/26(水) 01:25:16.57ID:syv7O+5freturn htmlspecialchars($str);
}
function b($str){
return nl2br(htmlspecialchars($str));
}
という2つの関数があるとします。
a()はinputフィールド、b()はtextareaフィールドを意識したものですが、
inputフィールドはb()でも動作上問題ありません。
できれば出力する関数は統一したいので、b()に統一したいのですが、
inputフィールドにb()を使用した場合nl2brの処理が無駄になります。
こういう時みなさんはどうしますか?
テンプレートエンジンの出力ロジックのような感じなのですが、
実際の処理はb()に相当する部分はa()の3倍ほど遅くなります。
かといって単体では大して変わるわけではないのですが、
1画面に何十個(場合によっては100個を超える)もこの処理を記述することになります。
0789nobodyさん
2011/10/26(水) 01:28:39.88ID:???0790nobodyさん
2011/10/26(水) 01:52:54.91ID:???0791788
2011/10/26(水) 02:02:23.49ID:syv7O+5f言いたいことは使用者に速度を犠牲にしても書式を統一するか、
どういうデータが入ってるかまで把握してもらって使い分けてもらうか、
どちらにするのがいいのかな?という感じです。
0792nobodyさん
2011/10/26(水) 02:26:13.39ID:???0793788
2011/10/26(水) 02:58:21.04ID:syv7O+5fよく耳にはしますが、難しそうな概念ですね。
データ型ということで言えば全てStringなのですが、
例えばある処理が必要な値なのかどうかということですね。(788の例だとnl2br。)
繰り返しになりますが、
ある処理が必要でない値でも、ある処理を入れても影響が出ないので、
全ての値において処理を統一することが可能です。(値によっては不必要な処理も入りますが。)
そこでちょっと悩んでいる感じです。
0794nobodyさん
2011/10/26(水) 03:13:03.09ID:???> ある処理が必要でない値でも、ある処理を入れても影響が出ないので、
> 全ての値において処理を統一することが可能です。(値によっては不必要な処理も入りますが。)
というのが、すべての値において記述を統一することができ、必要な処理のみが行われるってなる。
けど、そういうことしたいなら既存のフレームワークとか当たったほうがいいかもしれないし、勉強がてら作ってみるのもいいかもしれない。
0795788
2011/10/26(水) 03:21:04.46ID:syv7O+5fおかげさまで少し賢くなった気がします。
とりあえず今回の件は統一することにしたいと思います。
アドバイス通りフレームワークも研究してみたいと思います。
夜遅くにお付き合い下さりありがとうございました。
0796nobodyさん
2011/10/26(水) 03:44:48.42ID:???いろいろやってみるといいです。おやすみ
0797nobodyさん
2011/10/26(水) 07:11:12.36ID:???これくらい言語が用意しろと思うんだが。。
0798nobodyさん
2011/10/26(水) 08:11:16.47ID:???0799nobodyさん
2011/10/26(水) 08:49:23.34ID:???http://php.net/manual/ja/function.substr.php
ではダメなのか?
0800nobodyさん
2011/10/26(水) 09:37:36.97ID:FJmcVFvmFreeBSD
【PHPのバージョン】
5.1
【連携ソフトウェア】
Apache2.2
Java+Android-SDKで作ったAndroid携帯用の自作チャットアプリ
【質問内容】
サーバー上のPHPに複数台の携帯に入れた自作アプリで同時にアクセスし、1台が発言したら他の携帯上の自作アプリに更新通知
を送りたいのですが、可能でしょうか?
可能なら詳細なやり方も教えてくださいm(__)m
0802nobodyさん
2011/10/26(水) 10:31:58.32ID:FJmcVFvm「ソケット」をキーワードに調べてみます。
0803nobodyさん
2011/10/26(水) 12:04:03.70ID:???lengthの計算が入るからねえ。
sliceなんてよくある処理だし、実装してない言語なんてPHPくらいだよ。
0804nobodyさん
2011/10/26(水) 12:23:18.37ID:???0806nobodyさん
2011/10/26(水) 12:29:58.41ID:???javascriptの substring(!=substr)の仕様と勘違いしたとみた。
0807nobodyさん
2011/10/26(水) 12:39:08.30ID:???startとendで切り取ることって多いだろ?
解析する時なんかもstrposで絶対的な位置を求めて、それを利用して切り取りたいとか。
>>806
単純になんでPHPには基本的なString.sliceが実装されてないのかな〜って話。
0809nobodyさん
2011/10/26(水) 12:52:24.35ID:???これはまぬあるに書いてある例だが
echo substr("abcdef", -1); // "f" を返す
echo substr("abcdef", -2); // "ef" を返す
echo substr("abcdef", -3, 1); // "d" を返す
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
これじゃ不満なのか
0810nobodyさん
2011/10/26(水) 12:52:49.14ID:tWrq9Ulq【PHPのバージョン】5.3.8
【連携ソフトウェア】MySQL 5.5.16
【質問内容】
WAMPをPCにインストールしてローカルでWordpressのテーマ作成の練習をしています
書籍をもとに早速phpを書き始めたのですがいきなりエラーが出てしまいました
配布されているテーマは普通に動くのでサーバ自体は正常に動いています
一字一句間違えずに打ったので何が原因かわかりません
どなたか原因を教えていただけないでしょうか?
-------home.phpの内容-------
<?php get_header(); ?>
<?php get_footer(); ?>
-------header.phpの内容-------
<!DOCTYPE html>
<html>
<head>
<meta charset="<?php bloginfo ('charset'); ?>" />
<title><?php bloginfo('name'); ?><?php wp_title(); ?></title>
</head>
<body>
<!-- ヘッダー -->
<div id="header">
<h1><a href="<?php echo home_url(); ?>"><?php bloginfo('name'); ?></a></h1>
<p id="desc"><?php bloginfo('description'); ?></p>
</div>
-------エラー内容-------
Fatal error: Call to undefined function bloginfo() in C:\wamp\www\wordpress\wp-content\themes\sample\header.php on line 4 Call Stack #TimeMemoryFunctionLocation 10.0017676576{main}( )..\header.php:0
0811nobodyさん
2011/10/26(水) 12:58:32.18ID:???807の用途で理解出来ないか?言語なんて関係ないだろうに。
構文解析するにしたって正規表現使わない限りはほぼ確実にsliceの需要はある。
>>809
関数定義すればいいが、endからlengthを割り出すのが面倒じゃね?ってこと。
それと個人的にはString.sliceは超基本的な関数だと思うからね。そんだけ。
0813nobodyさん
2011/10/26(水) 13:10:03.67ID:???そもそもなんでlengthを必要とするの?
具体的に言いもせずに分かる訳無いだろ・・・
substrはlengthなくても使えるよ?
0814nobodyさん
2011/10/26(水) 13:12:24.79ID:???2文字目から8文字目までを出したいときに、 substr(1,7)の 7の計算がめんどくさいらしいっすよ。
0815nobodyさん
2011/10/26(水) 13:17:44.37ID:???文字列をstartとendで切り取るって言ってるだろうwなんだよ。。
俺はそうそう!みたいなのを期待してたのにこうも違うかね〜
>>814
だってさ、それをするのに文字列の長さ・引き算が必要なんだよ?実際には関数作れば済む話だが。
他の主要言語はみんな実装してるのに、PHPが実装しないのには訳があるのかなって思ってな。
0816nobodyさん
2011/10/26(水) 13:19:48.62ID:???RubyとJavascriptと?
0817nobodyさん
2011/10/26(水) 13:27:27.36ID:???PHPは豊富な関数が取り柄みたいなとこもあるから、余計になんで?って思うんだよ。
0818nobodyさん
2011/10/26(水) 13:39:06.52ID:???0819nobodyさん
2011/10/26(水) 13:43:41.54ID:???具体的にしたい事を言わないから
やりたい事が理解してもらえないんだろ
startとendで切り取るって言っても
>>814の例だとjavascriptなんかでもやる事は同じだろ
無いとすればlengthプロパティだろ?
"test".slice(2) jsでこの結果はst
これをphpですると
substr("test",2)
こうなるだけだろ
何がしたいの?
"test".slice(1,3) jsでこの結果はes
これをphpですると
substr("test",1,3)
????
0820nobodyさん
2011/10/26(水) 13:49:16.66ID:???pythonやjsでいうsliceはsubstrで出来る
0821nobodyさん
2011/10/26(水) 13:49:27.80ID:???いや、最後の 1,3だとestになるから 1,3-1にしなきゃいけないのがどうにも苦痛みたいなんだよ。
みんなになんでだと同意を求めたくなるほどに。
0822nobodyさん
2011/10/26(水) 13:52:27.40ID:???0823nobodyさん
2011/10/26(水) 13:55:01.43ID:???出来る、出来ないじゃなくて超基本的な処理なんだからPHPが用意しろよってこと。
>>815の文字列の長さはいらないね。カキコの時にミスってる。
>>819
lengthはsubstrの引数名な。
0824nobodyさん
2011/10/26(水) 13:57:29.93ID:???puts "test".slice(1, 2)
print("test"[1:2])
echo substr('test', 1, 3);
おまえさんが求めてるpythonでやれば言いだけの話
rubyとphpに君は向いてないだけだ
0825nobodyさん
2011/10/26(水) 13:58:00.09ID:???言語仕様についてここに答え持ってる奴はいないでしょ。
0826nobodyさん
2011/10/26(水) 14:00:03.33ID:???0827nobodyさん
2011/10/26(水) 14:01:03.91ID:???0828nobodyさん
2011/10/26(水) 14:01:32.26ID:???php: substr(str, start, end-start+1);
上のほうが直感的で読みやすいし、PHPにしても利用する場合は関数にしてしまうと思う。
でも、みんなが独自に関数にするんだったらPHP側で用意しろってのは真っ当な意見だろ?
理解してくれそうにないんでここらへんで解散するわ。
0829nobodyさん
2011/10/26(水) 14:01:46.62ID:???0830nobodyさん
2011/10/26(水) 14:04:54.22ID:???確かにsliceの需要はあって、現状は各々が補っている状態だからね。
0831nobodyさん
2011/10/26(水) 14:07:14.01ID:???0832nobodyさん
2011/10/26(水) 14:11:15.13ID:???0833nobodyさん
2011/10/26(水) 14:21:06.50ID:???しかも俺の思ったことに同意しろ、出来ないやつらばかりだからいやだみたいなのは変だろ。
0834nobodyさん
2011/10/26(水) 14:22:29.14ID:???あれか、JSの場合sliceじゃなくJSのsubstrが欲しいという事だな
始点からn文字抜き出したいと
0835nobodyさん
2011/10/26(水) 14:24:58.96ID:???文字のカウント方式なんて言語間で異なるのが普通
配列のはじめが1からの言語もあれば0からの言語もあるしな
0836nobodyさん
2011/10/26(水) 14:32:11.31ID:???0837nobodyさん
2011/10/26(水) 14:33:28.75ID:???0838nobodyさん
2011/10/26(水) 14:33:52.24ID:oGpVbHsj例えば管理画面から自分一人が使うものなら不必要ですか?
それとも管理画面に不正アクセスされることを考慮するべきでしょうか?
0840nobodyさん
2011/10/26(水) 14:45:28.31ID:???ぽまえがトイレ言っている間に泥棒が侵入したり
ねこがキーボードの上を歩いたり
意図しない結果もあるから黙って考慮しておきたまえ
0841nobodyさん
2011/10/26(水) 14:47:28.42ID:???クレーマー乙
0842nobodyさん
2011/10/26(水) 15:13:02.96ID:/kGweZxN簡単なSNSで招待メールを送るときにどのデータベースに入れたらいいか思いつかなかったんで、なんとなくGETに入れてみたんですが。。
URLみたら違和感たっぷりでセキュリティ的にまずかったりするのかなと。
0843nobodyさん
2011/10/26(水) 15:15:41.24ID:???0844nobodyさん
2011/10/26(水) 15:25:49.87ID:???そうなんですか!ありがとうございます!
新しくテーブル作ってそこに入れようかとおもってたんですが、このままGETに入れることにします。
0845nobodyさん
2011/10/26(水) 15:36:37.52ID:???オープンソースは必要な奴が実装するという事が分からない小学生か
コミッターに成れないコミュ障なんだろ
何の説明もなくsliceやlengthを出してドヤ顔する辺り、後者だと思うが
0846nobodyさん
2011/10/26(水) 15:38:04.48ID:???startからendがほしいっても、こんな感じになって結局計算することにならね?
str.slice(str.strpos(startTag) + startTag.length, str.strpos(endTag))
擬似コードだが。
>>834
始点からn文字抜き出すのはJSのsubstr、PHPもsubstr
JSのsliceがPHPにないことが不満みたい
0848nobodyさん
2011/10/26(水) 15:47:18.59ID:???説明下手すぎ態度悪すぎで答える気になれないわ
0849nobodyさん
2011/10/26(水) 15:48:12.54ID:???難しいかも知れないが、それは start と end の計算であって、slice自体に関わる計算じゃない。
0850nobodyさん
2011/10/26(水) 15:53:05.99ID:???0852nobodyさん
2011/10/26(水) 16:12:58.26ID:???0853781
2011/10/26(水) 17:32:33.76ID:???もうちょいちゃんと調べたら例外処理とsqlインジェクション対策は入れます。
複文使えないみたいだから、簡単には出来ないと思うけど必須ですね。
0854nobodyさん
2011/10/26(水) 17:46:14.09ID:???0855nobodyさん
2011/10/26(水) 18:19:33.34ID:???0856nobodyさん
2011/10/26(水) 19:57:27.03ID:gnsMAu0sうまくいきません
$url= "http://example.com/post/";
$postMsg = urlencode(mb_convert_encoding($postMsg, 'UTF-8'));
$params= array(
'status' =>"写真つきで投稿テスト",
'photo' =>"/path_to/img.jpg"
);
$headers = array('Content-Type: multipart/form-data',);
$requestOptions = array(
'http' => array(
'method' => 'POST',
'header' => implode('\r\n', $headers),
'content' => http_build_query($params)
)
);
//POST送信
$response = file_get_contents($url, false, stream_context_create($requestOptions));
以上のようにやっているんですが、どこが間違ってるんでしょうか
画像無しの文章だけのpostは成功しました
画像ありにするために変更した点は $headersのContent-Typeと、$paramsに'photo'要素を加えただけです
おかしい点があれば教えてもらえると嬉しいです。よろしくお願いします
※実はmixiのapiなんですが、access_tokenとか不要な情報が多いので上の用に書きました
http://developer.mixi.co.jp/connect/mixi_graph_api/mixi_io_spec_top/voice-api/#toc-10
0857856
2011/10/26(水) 20:02:48.31ID:gnsMAu0s↓この部分は
$postMsg = urlencode(mb_convert_encoding($postMsg, 'UTF-8'));
$params= array(
'status' =>"写真つきで投稿テスト",
'photo' =>"/path_to/img.jpg"
);
↓これが正しいです
$postMsg = "写真つきで投稿テスト";
$postMsg = urlencode(mb_convert_encoding($postMsg, 'UTF-8'));
$params= array(
'status' =>$postMsg,
'photo' =>"/path_to/img.jpg"
);
0858nobodyさん
2011/10/26(水) 20:10:19.33ID:???APIの使い方なんて自分で解決するか聞くべきところで聞いてください
APIの仕様は無視して自力で
>対象サーバにメッセージと画像をpost送信したい
を実装するならcURL使うとかアドバイスできるけども
0859nobodyさん
2011/10/26(水) 20:13:36.20ID:???$str = htmlspecialchars($str,ENT_QUOTES);
これだけで普通に対策になりますよね?
mysql_query("INSERT INTO table1 VALUES('$str');
例えばこれで。破れませんよね?
0861nobodyさん
2011/10/26(水) 20:26:49.64ID:+IPZs/bK[foo]=>array(
[2]=>1
[3]=>1
[5]=>0
)
)
のような、中身は1か0といった配列で、
この中の中身が1である配列の[foo][bar]のbarを求めたいんですが、
どうしたらいいですか? よろしくお願いします
barは連番でもないし、順番もばらばらです
よろしくお願いいたします
■ このスレッドは過去ログ倉庫に格納されています