【PHP】下らねぇ質問はここに書き込みやがれ 59
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/11/16(金) 18:09:05ID:kurqBmt1PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 58
http://pc11.2ch.net/test/read.cgi/php/1194084457/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0196nobodyさん
2007/11/19(月) 22:07:27ID:EHezjkQLサーバーの仕様が原因なのか、echoやprintで記述すると2行目に宣言が記述されてしまいます。
コードの見栄えが悪いしリントで怒られるので、なんとか1行目に記述できないかと探していました。
php_flag short_open_tag Offをhtaccessに記述すれば良いという文章を散見したので実行してみましたが、
それを.htaccessに書き足すと500エラーになってしまいます。
1行目にXML宣言を記述する良い方法は他にないのでしょうか?
サーバーはland.to、PHPのバージョンは 5.2です。
どのスレに書き込んで良いかがわからなかったのですが、似たような拘りを持っていらっしゃる方が1番いそうなこちらで質問させて頂きました。
スレ違いでしたらお手数ですが誘導お願い致します。
0198nobodyさん
2007/11/19(月) 22:18:01ID:???おそらく自動広告挿入のせいだろう。
land.toなんて使ったことないがxreaで似たような経験をしたことがある。
htaccessが使えて、手動広告が許されているなら、
LayoutIgnoreURI *
というコードをいれて、手動広告を挿入すればいい。
0199192
2007/11/19(月) 22:58:58ID:???5万くらいなら深く考えずに外注でもいいかとおもったのですが
数十万となるとちょっと真剣に考えなくては…。
要は自動か手動かで違いが出るのですよね。
先にあげたものは自動更新っぽいから、見た目の安っぽさとは裏腹に
案外高くつくシステムかも?
0201nobodyさん
2007/11/19(月) 23:03:15ID:???自力がきつくなってきたらスクリプトをちとかじればおk
0202192
2007/11/19(月) 23:18:15ID:???数秒で自動更新されるってなっていたのでてっきり自動受付かと思い込んでました。
でもよく見てみれば(よく見なくても)確かにメールで受け付けて
それを誰かサイト管理者側の人が手動更新してるだけっぽいですね。
何となく自作できそうな気がしてきました。
というか、これってCGIつかわず、まさに全部手動っぽいでしょうか…。
何か雛形になっていて、少しいじれば近い物を作れそうなCGI(多少有料でも可能)
はないでしょうか?
0203nobodyさん
2007/11/19(月) 23:21:33ID:???まぁ、どうでもいいけど。
祝日とかも表示できる細かいカレンダーとなると難しいけど、192のような単純なものならググれば出ると思う。
CGI探しは別スレにあった気がする。
0204nobodyさん
2007/11/19(月) 23:25:03ID:???DBに格納して、動的にデータをロードするのが普通。
DBに登録するのは当然手動になるだろうけど、
航空券のように料金先払いのシステムならその作業も自動化できるだろう。
カード決済とかはいると諸費用がかさむけど。
0205192
2007/11/20(火) 00:17:26ID:???>>203さん、そうなんですよね。なぜそんな頻繁に自動更新なのか謎です。
因みにCGI探しの別スレってこの板にありましたでしょうか…。
>>204さん、CGIのカレンダーに手動でデータを書き込んでいくという感じでしょうか?
0206nobodyさん
2007/11/20(火) 03:05:02ID:???ちょっとあなたには難しいかもしれない。
データベースってなんのことかわからないでしょ?
データベースのイメージとして
日付と営業フラグ(1で営業日0で休業日)と最大予約可能数と現時点での予約数が書いた
テキストファイルをイメージしてほしい(データの区切りはカンマとする)
2007/11/20,1,100,100 ←2007/11/20は営業日で既に満員ということを示すデータ
2007/11/21,1,100,90 ←2007/11/21は営業日であと10人予約可能ということを示すデータ
2007/11/22,1,100,50 ←2007/11/22は営業日であと50人予約可能ということを示すデータ
2007/11/23,0,0,0 ←2007/11/23は休業日ということを示すデータ
このテキストファイルをphpで読み込んでうまく整形して表示する。
カレンダーに手動でデータを書き込む必要はなく、
このデータをいじればいい。
これはテキストだけどデータベースの概念はこれに近い。
0207nobodyさん
2007/11/20(火) 03:15:51ID:???0209nobodyさん
2007/11/20(火) 03:23:54ID:???別に間違ってない
csvだってデータには変わりないしな
0210nobodyさん
2007/11/20(火) 03:29:08ID:???が、RDBでは無いな
0211nobodyさん
2007/11/20(火) 03:33:06ID:???一人で手動でできる範疇なんだろ
だったら手動でやればいいじゃん
それともなにか是が非でもフォームからスクリプトに送って表示させたいってか
0212nobodyさん
2007/11/20(火) 03:35:21ID:???0213nobodyさん
2007/11/20(火) 03:39:39ID:???そういう話をしてるんじゃないんだけどね。
RDBMSでできることではなく、データベースそのものの概念。
データを格納して取り出すという基本的な話。
0214nobodyさん
2007/11/20(火) 03:42:11ID:???するんだっけと迷うことがある。
が、CSV程度ならテキストファイルに書き出した方が手っ取り早いな。
0216nobodyさん
2007/11/20(火) 03:57:54ID:???0217nobodyさん
2007/11/20(火) 04:00:52ID:???それを明確にしてから話進めろ。
0218nobodyさん
2007/11/20(火) 04:03:17ID:???http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
0219nobodyさん
2007/11/20(火) 04:12:57ID:???PHPを使ってテキストからデータの抽出検索なんていうのはできる
そういうことを言ってるんじゃないかと
0220nobodyさん
2007/11/20(火) 04:20:28ID:???何が違うかというとそれを誰か説明してくれるはずなんだ
つずき↓
0221nobodyさん
2007/11/20(火) 04:26:53ID:???sprintf('\u%04s', bin2hex(mb_convert_encoding($char, 'UTF-16', 'UTF-8')));
で変換された文字列があるですけど、これを戻すにはどうすればいいでしょうか。
0222nobodyさん
2007/11/20(火) 04:35:57ID:???0223192
2007/11/20(火) 08:07:51ID:???めっちゃわかりやすい説明ありがとうございます。
概念がわかってきました。
>>211
是が非でもフォームから自動で、とは思っていません。
例と同じような感じで予約をとる仕事なのですが(本業は受付ですが、受付の片手間に予約をとるということです)
予約状況をWEBで示せたらと思っています。
自作するにせよ、外注するにせよ、予約状況を書き込むのはど素人の受付の子なので
簡単に更新できるものがほしいです。
0224nobodyさん
2007/11/20(火) 08:11:43ID:???0225221
2007/11/20(火) 09:10:30ID:???221ですが、文字列16進数配列ってどうやるのでしょうか。
下記のような、文字列をデコードしたいです。
\u307b\u3052\u307b\u3052
0226nobodyさん
2007/11/20(火) 09:32:14ID:6/Z3yWhF>>198
日付が変わっていますが、196です。
そうなんですよね、xeraの質問掲示板みたいなのばかりが検索でヒットしますorz
似たようなものだと思って試してみたのですが、ダメみたいでした。
とりあえず手動広告に切替えてみます。
アドバイスありがとうございました。
0227nobodyさん
2007/11/20(火) 12:29:15ID:???$hoge['a'] = 'aa';
isset($hoge['b']) <- falseを返す
is_null($hoge['b']) <- undefined index: bとなる
これは、issetは実際は関数じゃなくてキーワードだからうまくいって
is_nullは関数だから失敗するという認識で合ってるかな?
$_GETとかでフォームに値が入ってくるかどうかわからないときも、
if (isset($_GET['hoge'])) {
}
で判断するのが良いかな?
array_key_exists()は長ったらしいので使いたくなかったり・・・
0228nobodyさん
2007/11/20(火) 12:41:33ID:uBto/nCBDB使い始めたころってまさにそんな感じだった。もうfopen解らないよママン。
今ならSQLiteっていう手もあるが。
0229nobodyさん
2007/11/20(火) 12:48:13ID:???>>227
>array_key_exists()は長ったらしいので使いたくなかったり・・・
つ function ake($key,$search) {
return array_key_exists($key,$search);
}
本当にこんなこと教える本を見たことがある。
関数名を短くして見通しを良くするらしい。
0230nobodyさん
2007/11/20(火) 12:55:37ID:???>もうfopen解らないよ
やっぱ使ってないとそうなるか〜
漏れはPerlやらCやらで小物を作る機会が多いから一応覚えてるお
0231nobodyさん
2007/11/20(火) 13:03:23ID:???C言語で
#define { BEGIN
#define } END
・
・
・
って見通しをよくした例を思い出したw
0232nobodyさん
2007/11/20(火) 13:11:30ID:???0233nobodyさん
2007/11/20(火) 14:42:12ID:???isset()は変数がセットされているかどうか。
is_null()は変数がセットされている前提で値がnullかどうか。
もちろんステートメントか関数かの違いもあるけど。
ユーザー入力のチェックはisset()の方がポピュラーかな?
array_key_exists()との違いはセットされていてもnullの場合falseを返す所くらいかな。
0234nobodyさん
2007/11/20(火) 15:19:48ID:???file_put_contentsなんていう便利な関数があるぜ
0235nobodyさん
2007/11/20(火) 15:20:22ID:???0236nobodyさん
2007/11/20(火) 15:27:36ID:???0237nobodyさん
2007/11/20(火) 15:38:27ID:???0238227
2007/11/20(火) 16:25:09ID:???そんな標準関数か亀田用語か何か分からんようになる略は嫌です・・・
Arrayクラス作って配列系関数全部メソッドにしちゃおうかと考えてる最中。
>>233
なるほど〜。じゃあissetでいきます。
Zend Studioでもissetはキーワード色になりますね。is_nullはならない。
0239nobodyさん
2007/11/20(火) 17:34:49ID:???$sql = "UPDATE database名 SET data_a='$a_data2' , data_b='$b_data2'............where no = 1"
$sql2="UPDATE database名 SET data_a='$a_data2' , data_b='$b_data2'............where no = 2"
.
.
.
.
$sql200="UPDATE database名 SET data_a='$a_data200' , data_b='$b_data200'............where no = 200"
上のようなSQL文を簡単に書くにはどうすればいいでしょうか。
0240nobodyさん
2007/11/20(火) 17:35:37ID:???0241239
2007/11/20(火) 17:36:29ID:???↓
訂正)
○ $sql = "UPDATE database名 SET data_a='$a_data1' , data_b='$b_data1'............where no = 1"
でした。
どなたかご教授下さい。
0242nobodyさん
2007/11/20(火) 17:39:15ID:???0244nobodyさん
2007/11/20(火) 17:48:14ID:DPtN+/Mb$table_name = "access_logs";
$fields_values = array(
"id" => $id,
"mobile" => $ip,
"date" => date("Y-m-d H:i:s"),
);
$res = $db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_INSERT);
if (PEAR::isError($res)) {
die($res->getMessage());
}
PEARを使ってデータベースにアクセスログを書き込みたいのですが、
上記のようにすると、「DB Error: constraint violation」と表示されます。
翻訳してみたところ「規約違反」と出たのですが・・・。
id,mobile,dateのフィールドは既に作成してあります。
他に原因が思いつかないのですが、なんでこのようになってしまうのでしょうか?
0245nobodyさん
2007/11/20(火) 17:49:13ID:???0246nobodyさん
2007/11/20(火) 17:54:48ID:???おまえらほんとアホばっかだな
0247nobodyさん
2007/11/20(火) 17:56:45ID:???0248nobodyさん
2007/11/20(火) 18:03:23ID:???0251244
2007/11/20(火) 18:10:14ID:DPtN+/Mb記述箇所は「$ip = $_SERVER['REMORD_ADDR']; 」だったのでどう見てもPHPの問題でした。
0254nobodyさん
2007/11/20(火) 18:13:00ID:???0255nobodyさん
2007/11/20(火) 18:14:41ID:???0257nobodyさん
2007/11/20(火) 18:20:56ID:???基本はどれもいっしょなのにね
仕方ないね、MySQLをちょっとかじったことしかないやつが多いから
少なくとも>>254や>>256が良い例
0259nobodyさん
2007/11/20(火) 18:25:55ID:???/ \ ?
/ ─ ─\ 何で喧嘩
/ (●) (●) \ してるんだろぅ・・・。
| (__人__) | ________
/ ∩ノ ⊃ / .| | |
( \ / _ノ | | .| | . |
.\ “ /__| | .| | .. |
. \ /___ / | | ..|
| |___LeVie ___|
.lニニニニニ_| OO=======□□l
0260nobodyさん
2007/11/20(火) 18:32:58ID:???もっと なかよく しよう
0261nobodyさん
2007/11/20(火) 18:43:38ID:???$data_a=array('',$a_data1,$a_data2,・・・・・);
$data_b=array('',$b_data1,$b_data2,・・・・・);
$x=1;
while($x<201){
$sql = "UPDATE database名 SET data_a='$data_a[$x]' , data_b='$data_b[$x]'............where no = $x" ;
mysql_query($sql);
$x++;
}
これでSQL文を200回ループできるけど、arrayで中身を200個も書くのは面倒だな。
これじゃ解答にならないか。もっと簡単な方法があるかもしれない。
0263nobodyさん
2007/11/20(火) 19:16:43ID:M+R97rrgmysql_select_db("textdata") or die("データベースセレクトエラー");
$sql = "SELECT name FROM table";
$res = mysql_query($sql, $con) or die("データ抽出エラー");
while($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
$row["name"]."<br />";
}
0264263
2007/11/20(火) 19:18:22ID:M+R97rrgどなたかご指摘ください。
データベースには以下のデータが入ってます
id-name-age
1-たなか-22
2-さいとう-33
3-きむら-11
4-たしろ-55
0265nobodyさん
2007/11/20(火) 19:20:39ID:???echo
0266nobodyさん
2007/11/20(火) 19:25:02ID:???うっかり^^;
0267nobodyさん
2007/11/20(火) 19:36:09ID:???0268nobodyさん
2007/11/20(火) 19:51:06ID:M+R97rrgデータベースははじめてなのですが、
>>263にもhtmlspecialcharsはつかうべきでしょうか?
データベースを使う点で気をつけるべきことってありますか?
0269nobodyさん
2007/11/20(火) 20:05:03ID:???0270nobodyさん
2007/11/20(火) 20:10:42ID:???学校では「わからなかったらせんせいかおともだちにきくんだよ」って教えられたんだろうけど
マの間では通用しないルールです。
0271nobodyさん
2007/11/20(火) 20:25:04ID:???SELECT * FROM table WHERE delete="1"
みたいな使い方をした方が良いよ。
って誰かが言ってた。
0272nobodyさん
2007/11/20(火) 20:29:27ID:???0275nobodyさん
2007/11/20(火) 20:41:07ID:M+R97rrgifでフラグついたとこは読み飛ばすってことですかね!?
その場合、消してないデータは一括で消せばいいってことですか?
0276nobodyさん
2007/11/20(火) 20:46:57ID:???それ、負荷がかかるからじゃなくて、別の意味が大きいだろ。
追記型だとあまり関係ないと思うし。
誰が何を消したか記録しておくとか、間違って消しても復活できるようにとか。
よっぽど大量に発行しない限りは影響ないと思うけどね。
0277nobodyさん
2007/11/20(火) 21:14:19ID:???0278nobodyさん
2007/11/20(火) 21:15:21ID:???0279nobodyさん
2007/11/20(火) 21:17:40ID:2OU8ocC/$conn = mysql_connect('localhost', 'user', 'passwd');
mysql_select_db('database');
$result = mysql_query('select * from table1');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
var_dump($row);
}
mysql_close($conn);
を実行すると、integerやfloatのデータが文字列になっています。
PHPでは数値型のデータを整数や小数に変換してくれないのでしょうか。
またもしそうだとすると、変換するにはどうしたらいいでしょうか。
0281nobodyさん
2007/11/20(火) 21:36:25ID:iGmLsQsaフォームでチェックボックスの内容を前頁より以下のようにもらいます。
<?php
$checkbox = $_REQUEST["chk"];
for($i=0; $i<sizeof($checkbox); $i++){
print "${checkbox[$i]}<br>";}
?>
こうすると前頁で選んだチェックボックスの内容が確認画面として表示されるのですが、
この内容をメールで送信したい場合どのようにすればよいのでしょうか?
お願いします。
0282nobodyさん
2007/11/20(火) 21:43:31ID:???メール関数
もしくは一歩進んだやり方がいいならhttp://pear.php.net/package/Mail
0283nobodyさん
2007/11/20(火) 21:56:07ID:M+R97rrgデータベースに格納するデータはhtmlspecialcharsをしてから格納するべきでしょうか?
0284nobodyさん
2007/11/20(火) 21:58:24ID:???0286nobodyさん
2007/11/20(火) 22:27:09ID:M+R97rrg0287nobodyさん
2007/11/20(火) 22:33:09ID:M+R97rrgたいへん恐縮でございますが最後の質問させてください。
insertでデータを追加したいのですがデータが追加できません。
どなたかご指摘お願いいたします。
$sql = "insert into {$db_table} "
. "(text1, text2, text3, text4) "
. "values "
. "({$data[0]},{$data[1]},{$data[2]},{$data[3]});";←これを下のコメントアウトの部分と置き換えると追加できました。
# ."("頭部", "身長", "腕", "足");";
mysql_query($sql, $con);
echo "データを追加しました";
0288nobodyさん
2007/11/20(火) 22:36:33ID:???0289nobodyさん
2007/11/20(火) 22:45:17ID:???0290nobodyさん
2007/11/20(火) 23:04:05ID:???はい次
0291nobodyさん
2007/11/20(火) 23:07:11ID:aCUMaMm7ネタじゃなくてマジなんだけど、アパッチとPHPでサーバーやってるんだけど
今までずーっと数ヶ月放置してたのね。だから気が付かなかったんだけど、
ふと自分のサイトを外からアクセスしてみたら、セッションが有効になってないことに気が付いたの。
PHPプログラムを書いた時点では何度も実験したし、プログラムには問題ないと思って
きっとphp.iniだろうと思ったの。でも特に記述のミスはなかったし、そもそもPHPのプログラムを書いた時点で有効になってたんだから
php.iniも問題ないだろうと考えて、冷静に考えたわけよ。
セッションの保存されるフォルダにデータが入るかどうか実験しようと。
するとそれが無くなってたの。これ隠しフォルダにあるじゃん。
で、それ見たらtempの中にphpのフォルダが無かったんだ。
俺は消した覚えもないし、そもそもこれは隠しフォルダだから自分でもアクセスなんかしないし。
スパイウェア駆除ソフトとかで一緒に消えちゃうのかな。
謎だ。いや、それだけなんだけどね。スレ汚しすまん。
でもセッションが突然効かなくなった人はフォルダ探してみるよいいよ。
0292nobodyさん
2007/11/20(火) 23:24:39ID:???Linuxでも勉強してろ
0293nobodyさん
2007/11/20(火) 23:41:32ID:aCUMaMm7OSはwinだけどな。
っていうかLinuxにも隠しフォルダあるの?
0294nobodyさん
2007/11/20(火) 23:42:25ID:???■ このスレッドは過去ログ倉庫に格納されています