【PHP】下らねぇ質問はID出して書き込みやがれ 82
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/09(月) 02:14:28ID:HyrthkeE過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 81
http://pc11.2ch.net/test/read.cgi/php/1234958956/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0783nobodyさん
2009/04/01(水) 11:04:49ID:???こっちのほうおすすめ
function errorMysql() {
エラー処理
exit;
}
if (!接続) errorMysql
0784nobodyさん
2009/04/01(水) 11:49:45ID:???0785nobodyさん
2009/04/01(水) 17:33:12ID:???貴様らなにしてんのかね
0786nobodyさん
2009/04/01(水) 18:09:20ID:???0790nobodyさん
2009/04/01(水) 23:06:31ID:???絶対言われると思った。俺もそれは考えたが、5.3.0より前のPHPでは無理。
親クラスで定義された静的メソッドで、子クラスのインスタンスは生成できない。つまり
class Parent{
static function getInstance(){
//do something
}
}
class Child extends Parent{}
とあった場合、Parent::getInstance()の実装がどんなだろうと、Child::getInstance()がChildのインスタンスを返すのは不可能。
Childというクラス名すら取得できない。
>780
{ new UrlString("http://pc11.2ch.net/test/read.cgi/php/1236532468/") }->domain();
コンストラクタによる依存性注入をしてる場合も、newしてすぐメソッドを呼ぶだけでじゅうぶんな事がある。
引数なしのコンストラクタならばたいていの場合不要ってのは同意。
0791nobodyさん
2009/04/02(木) 09:51:30ID:ij3728ylこれって日本語は対応してないの?
0792nobodyさん
2009/04/02(木) 10:31:00ID:???0793nobodyさん
2009/04/02(木) 10:35:42ID:ij3728ylいやいや、、、
まだそこまでレベルいってないですよ
だからあなたが代わりに見て判断してください
0794nobodyさん
2009/04/02(木) 10:44:44ID:???0795nobodyさん
2009/04/02(木) 10:56:23ID:???原理的には日本語でも計算は可能だろうけど、日本語ではMecabとかないと大変だし、
多分計算式に定義されてる係数は日本語の場合を考慮していないので、
信頼出来る結果のためには自分で文献にあたるとか実地調査して決定する必要があるべ。
0796nobodyさん
2009/04/02(木) 11:12:51ID:CfxT7le3【PHPのバージョン】php5ぐらい
【連携ソフトウェア】mysql
【質問内容】
フォームのセレクト項目で悩んでいます。
form.phpを表示させるとき、セレクト項目を
mysqlから取り出して表示させているのですが
(idとその名前)
セレクト項目が4つもあるので、何か一気に取り出す方法が
あったりするのですか?それとも、一個一個4つのセレクト用に
select genre_id,genre_name from genre;
(genreはジャンル)
というふうにするしかないですか?
0797nobodyさん
2009/04/02(木) 11:30:18ID:4VqTVZ/0以下のようなデータをデータベースに登録してます
id,name,age
1,田中,20
2,木村,31
3,坂下,43
このデータをテーブルに書きだしたいのですが
pearなどのライブラリを使用しない場合、どのようなコードを書くのが効率いいでしょうか?
mysql以外のデータベースは使用しないのでmysqlに特化した書き方をどなたかご教示お願いいたします
0798796
2009/04/02(木) 11:40:45ID:???$link = mysql_connect('localhost','ユーザ名','パスワード名');
mysql_select_db('データベース名');
$sql = "select * from テーブル名";
$result = mysql_query ( $sql );
while ( $data = mysql_fetch_array ( $result ) ) {
$data['id'];
$data['name'];
$data['age'];
}
じゃないの?
0799nobodyさん
2009/04/02(木) 11:48:45ID:e2MYzFKZ>>797さんのデータで
id,name,age
1,田中,20
2,木村,31
3,坂下,43
とありますが、たとえばID2の木村さんの行だけを取得する場合、
while ( $data = mysql_fetch_array ( $result ) ) {
if (2==$data['id']) {
$id = $data['id'];
$name = $data['name'];
$age = $data['age'];
break;
}
}
とやってきたのですが、MYSQLではピンポイントで取得することができないってことでしょうか?
0800796
2009/04/02(木) 11:59:21ID:???嘘だよね? select * from テーブル名 where id=2;
あるいは、 where name='木村';
0803nobodyさん
2009/04/02(木) 12:29:08ID:???MySQLにパスワードを設定しようとphpmyAdminでuser テーブルを表示させましたが
Hostが%のレコードがありません。localhost と127.0.0.1というのだけです。
パスワードを設定するのはlocalhost と127.0.0.1でいいのでしょうか?
0804796
2009/04/02(木) 12:40:16ID:???$xxx[1] = "property";
$xxx[2] = "actress";
$i=0;
$g=0;
while ( $i < count($xxx) ) {
$sql = "select $xxx[$i]_id,$xxx[$i]_name from $xxx[$i]";
$result = mysql_query ( $sql );
while ( $data = mysql_fetch_array ( $result ) ) {
$xxb[$g][$xxx[$i]]['id'] = $data[0];
$xxb[$g][$xxx[$i]]['name'] = $data[1];
$g++;
}
$i++;
}
これでいい?
0805nobodyさん
2009/04/02(木) 12:56:43ID:???0807nobodyさん
2009/04/02(木) 13:01:43ID:vfSwYPOW【PHPのバージョン】php5.26
smarty使用
【連携ソフトウェア】mysql
【質問内容】
初めての質問です。
よろしくお願いします。
登録フォームが都合上ページの下部にあるのですが
PHPで入力エラーを同じページの同じ登録フォームのある部分に表示しております。
ページ上部に登録フォームのアンカーへ移動するリンクはありますが
PHPではいたエラー文言付画面の表示時に下部のアンカーへ移動して表示するには
javascript以外に方法はないでしょうか?
要はhttp://www.etc.com/touroku.php#a
みたいにやるにはどうすればいいのか、よろしくお願いいたします。
0808796
2009/04/02(木) 13:05:48ID:???かな
for($i=0;$i<count($xxb['genre']); $i++)
で各セレクト分でしよう
0810nobodyさん
2009/04/02(木) 13:51:13ID:???0812nobodyさん
2009/04/02(木) 19:09:54ID:vfSwYPOWありがとうございます、できました!!
0813nobodyさん
2009/04/02(木) 21:54:38ID:SbciSXr8pukiwikiとかの既存ソースを使ってるのですが
PHPがサバの設定でポート指定されていて
既存ソースだと、リンク先がPHPの場合、ポート指定が外されてしまうのです
TOPページが :7070 で実行してたら
遷移先が :7070 が外れてしまうという状態です
解決方法とかご教授願えますか。
質問場所が悪ければ、聴ける場所なども教えていただけると助かります
0814nobodyさん
2009/04/02(木) 21:56:16ID:???0815nobodyさん
2009/04/02(木) 22:33:32ID:SbciSXr8ちょっと探してみます。
ただ、pukiwikiに限らず、他のPHPでも
同じ状況になってしまうので根本解決するための方法など
ご存知でしたらお願いします。
0816nobodyさん
2009/04/02(木) 22:33:55ID:???0817nobodyさん
2009/04/02(木) 23:10:28ID:???コールバック関数を指定して出力内容を全部受け取り、URLを全部置換する。
0819nobodyさん
2009/04/03(金) 01:14:27ID:QmVSt/Vd【PHPのバージョン】php5.29
【連携ソフトウェア】mysql
【質問内容】
$val = NULL;
$query = "insert into test (id, comment) value ($val, 'test')";
上記のSQLをダンプしてみると
NULLを代入した変数$valがNULLとして展開されていません。
もぬけの殻となってしまっています。
※ダンプしたクエリ
insert into test (id, comment) value (, 'test')
なのでクエリーを投げるとエラーとなってしまいます。
NULLをinsertしたい場合は変数にいれず、
直接クエリの文に記述しないといけないのでしょうか?
0820nobodyさん
2009/04/03(金) 01:28:48ID:???現代人ならプリペアドステートメントを使え。プレースホルダ使える状況でクエリを直接組み立てる奴は原始人。
PDOStatement::bindValue()の第3引数にPDO::PARAM_NULLを指定すれば、NULLをDBに入力できる。
つうか、何もinsertしなければ、デフォルト値であるNULLが入るけどな。
(カラムにnullが許可されており、他のデフォルト値を指定していない場合に限る)
0821nobodyさん
2009/04/03(金) 01:33:38ID:???0822nobodyさん
2009/04/03(金) 01:33:52ID:???$val = 'NULL';
0823nobodyさん
2009/04/03(金) 01:34:01ID:???でNULLをDBに入力できる
0824819
2009/04/03(金) 01:37:29ID:???>プリペアドステートメント
はじめて聞きました。
>何もinsertしなければ、デフォルト値であるNULLが入る
これは理解していたのですが、インサート項目が非常に多く、
そのほとんどが必須ではないので、クエリを組み立てるのがめんどくさく
値がわたってこようがこなかろうがすべての項目をインサートさせてしまう感じで作ってしまいました。
プリペアドステートメント勉強します。
ありがとうございました。
0825819
2009/04/03(金) 01:39:55ID:???>>823
それだと文字列のNULLが入ってしまいました。
間違えてるかもしれないのでまた確認してみます。
ありがとうございます。
0826nobodyさん
2009/04/03(金) 01:44:23ID:???insert into test (id, comment) value (NULL, 'test')
0827nobodyさん
2009/04/03(金) 02:04:33ID:7RHF46qiform1.phpにて記述されたformの内容をPOSTで
form2.phpという確認画面で受け取るような
プログラムを作ってるんですが、
確認画面にて前に戻るボタンと送信ボタン2つを作りたい場合は
それぞれに同じ内容のhiddenを設定するしか方法はないんですかね?
もしスマートな方法がありましたらアドバイスよろしくお願いします。
0828nobodyさん
2009/04/03(金) 02:07:57ID:???0829827
2009/04/03(金) 02:11:24ID:???返信ありがとうございます。
やっぱりsessionがいいですよね。
もしPOSTでスマートに出来るならと思い聞いてみました。
0830nobodyさん
2009/04/03(金) 02:26:52ID:???0831nobodyさん
2009/04/03(金) 02:29:07ID:???試してないけど、javascriptでformのactionを変更できるんじゃないの。
http://msdn.microsoft.com/ja-jp/library/cc409726.aspx
このへんは趣味の問題かもしれんが、セッションに値を保持するのは、
同じセッションで複数タブ開かれた場合に動作がおかしくなりやすいから、
あんまりお勧めはできん。
0833nobodyさん
2009/04/03(金) 02:38:12ID:???0834nobodyさん
2009/04/03(金) 03:42:37ID:???0835nobodyさん
2009/04/03(金) 04:07:02ID:???php.iniに書いたmb_string系の設定って反映されてますか?
あと何故かapcも動かない、、、
いくら設定を見直してもなにが悪いのかわかりません。
解決策をご存知の方いましたら、教えてください。
0836835
2009/04/03(金) 06:55:01ID:???0838nobodyさん
2009/04/03(金) 07:28:49ID:b3GlDVd8一応本では読んだんですがいまいちよくわかりません 簡単に説明お願いします
0839nobodyさん
2009/04/03(金) 08:01:16ID:???繰り返し使われる場合はパフォーマンスが上がることもあるみたいだけど、一番大きいのは
SQLインジェクションみたいな攻撃を受けにくくなることじゃないの。
0840nobodyさん
2009/04/03(金) 08:43:25ID:???0841nobodyさん
2009/04/03(金) 08:45:48ID:???もうプリペアでやってるかもしれないけど
$a = "";
$var = "'".$a."'";
$query = "insert into test (id, comment) value ($val, 'test')";
0842nobodyさん
2009/04/03(金) 10:01:31ID:???0843nobodyさん
2009/04/03(金) 10:05:52ID:???0844nobodyさん
2009/04/03(金) 11:18:56ID:???http://neta.ywcafe.net/000974.html
0845nobodyさん
2009/04/03(金) 11:26:15ID:???サンプルコードにこれ見よがしにつっこむ奴なんなの
ある側面から切り取ってるんだから瑕疵がないほうがおかしいだろ
0846nobodyさん
2009/04/03(金) 11:29:51ID:???0848827
2009/04/03(金) 15:07:28ID:???フォームの件ですが色々試しましてSESSIONでいくようにしました。
色々とアドバイス本当にありがとうございます。
それでもう一つ質問なんですが、
フォームのチェックボックスの内容をhtmlに直に書かず、
config.phpなどに$val=array("aaa","bbb","ccc");
みたいな感じで記述しhtmlでforeachを使い
全て書き出すみたいな事をしたいんですが、参考書などを確認したら
配列で記述するのではなくfunctionで
function val(){
$val = array("aaa","bbb","ccc");
return $val;
}
という書かれ方がされてました。
関数にせず配列だけが記述すると何かマズイんですか?
質問が少しわかりにくいですがもしよければ
アドバイスよろしくお願いします。
0849nobodyさん
2009/04/03(金) 15:17:48ID:???$valの中身を将来的にコードからいじる可能性があるならfunction、
可能性がないなら定数のままでいい
0850nobodyさん
2009/04/03(金) 15:40:20ID:???0851827
2009/04/03(金) 15:41:11ID:???返信ありがとうございます。
例えばこれから先チェックボックスの値dddが増えた場合、
$val=array("aaa","bbb","ccc","ddd");
でも
function val(){
$val = array("aaa","bbb","ccc","ddd");
return $val;
}
でも変わらない気がするんですが・・・
素人質問本当にすいません。
今から考えてみます。
0852nobodyさん
2009/04/03(金) 15:48:11ID:???いい例が思いつかないのだけどこんな感じ。条件によって変わる場合だな
function val(){
$val = array("aaa","bbb","ccc","ddd");
// 天気が雪の場合のみ配列にeeeを追加する
if( $this->weather == "snow" ){
array_push( $val, "eee" );
}
return $val;
}
0854827
2009/04/03(金) 16:12:12ID:???>>853
返信ありがとうございます。
今後、配列を元に何か条件をつけるなどの機会がある場合は
関数にしておく方が好ましいという事ですね。
例文まで書いていただき本当にありがとうございました!
0855nobodyさん
2009/04/03(金) 18:24:43ID:ZpjcrZDPエンティティに変換したいのですが、どうすればいいのでしょうか?
htmlspecialcharsはダブルクォーテーションも変換しますし・・。
0856nobodyさん
2009/04/03(金) 18:32:47ID:???次のエラーが出てしまいます。
何が原因なのでしょうか?
Fatal error: Unknown: Failed opening required 'C:/Documents and Settings/繧イ繧ケ繝育畑縺ョ繝ヲ繝シ繧カ/My Documents/Visual Studio 2005/Projects/PHP_TEST/PHP_TEST/index.php' (include_path='.;C:\php5\pear') in Unknown on line 0
文字化けしちゃってますが
C:\Documents and Settings\ゲスト用のユーザ\My Documents\Visual Studio 2005\Projects\PHP_TEST\PHP_TEST\index.php
のところで何かエラーが発生している様です。
※phpのコード
<?php
/* TODO: Add code here */
print("テスト");
?>
0858nobodyさん
2009/04/03(金) 19:44:58ID:2mI6CRy6【PHPのバージョン】5.2.0
参照渡しで変数を送り
変数が未定義なら空の文字列を返し
変数が定義済みならそのまま返す関数を考えました。
$test = hoge_variable($v);
function hoge_variable(&$v) {
if(! isset($v) ) {
return '';
}
return $v;
}
テストに入る内容は望みのものですが、
変数$vが未定義だった場合、定義されて(?)NULLが入るようです。
この挙動について、どういった理由でそうなるのか、
また$vを未定義のままにする方法はあるのかご教示いただけませんでしょうか。
0859nobodyさん
2009/04/03(金) 20:02:31ID:???&$vのとき、参照を張るには、参照される側のアドレスが必要だから、そこで定義される。値はNULL
&$vにしなければよい。
0860nobodyさん
2009/04/03(金) 20:14:47ID:???定義されてないからNULLだぜ?
0861nobodyさん
2009/04/03(金) 20:15:15ID:2mI6CRy6やはりそんな感じだったんですね。
関数はエラーレベルによっては出るNotice: Undefined variable
の対策だったんですけど、&$vでなく$vにするとそこでUndefined variable
がでてしまう感じで…。
定義されたくない時は直接issetをしていくしかないということですかね。
というかそもそもUndefined variable回避に対するアプローチが違っているでしょうか…?
0862nobodyさん
2009/04/03(金) 20:18:37ID:???0863nobodyさん
2009/04/03(金) 20:35:14ID:2mI6CRy6$flag = $_POST['flag'];
そういう意味で先の
$flag = hoge_variable($_POST['flag']);
だったんですけど、
例えNULLでも配列に定義されてしまうと、
foreachとかする時に邪魔になったりとかそういう感じのことでした。
やはり基本的には
$flag = '';
if (isset($_POST['flag'])) {
$flag = $_POST['flag'];
}
みたいなことで行くのがいいのですかね。
0864nobodyさん
2009/04/03(金) 20:46:30ID:???0866nobodyさん
2009/04/03(金) 22:53:01ID:???> $flag = '';
> if (isset($_POST['flag'])) {
> $flag = $_POST['flag'];
> }
自分はそうしてる
変数が増えてくるとコードがのびがちなので
三項演算子使って
$flag = isset($_POST['flag'])?$_POST['flag']:null;
といった感じにしてる
0867nobodyさん
2009/04/03(金) 23:35:31ID:???クォートで処理していると、インジェクションが無いか処理を注視しないといけない。
プリペアドステートメントは、インジェクションが無い事が一目で分かる。
SQLの構文と変数が分離されるので見やすくなるって利点もある。
>863
functon getPostedVariable($key){
return isset($_POST[$key])?$_POST[$key]:null;
}
とかやると楽なのでオススメ。
プログラムの開始時に$_GETと$_POSTとかを丸ごとメンバに持つクラスのインスタンスを生成して、そいつにこの関数を定義する手もある。
メリットが思いつかないレベルならとりあえず忘れておいてもいいけどな。テストが非常にしやすくなる。
$request = new Request($_POST, $_GET);
echo $request->post('flag');
0868nobodyさん
2009/04/03(金) 23:36:22ID:???0869nobodyさん
2009/04/03(金) 23:49:57ID:???0870nobodyさん
2009/04/04(土) 01:03:53ID:???public private とかって宣言する事は出来ないのでしょうか?
public class Test
{
public function TestMessage()
{
print("あいうえお");
}
}
0873nobodyさん
2009/04/04(土) 02:00:30ID:???0874870
2009/04/04(土) 02:00:58ID:???サンクス
>>872
.Net(C# / VB.net) & C++とかでこれまで開発をして来ましたが何かばれちゃいましたか。
マニュアルをちょっと読む事にします。
というより一つ疑問なんですけどC#とかC++とかだと次のパターンAでみんな記述しているのに
PHPとかだとパターンAの書き方をする人が多いのはなぜでしょうか?
C#だと今まで私が関わって来たプロジェクトは100%パターンAで記述されています。
【パターン@】
if( 1 == 1)
{
}
【パターンA】
if(1 == 1{
}
0876nobodyさん
2009/04/04(土) 02:05:23ID:???両方ともパターン2かよ
0877nobodyさん
2009/04/04(土) 02:08:21ID:???JavaやPHP使いはMSみたいに無駄に行数消費するのを嫌うよ
0878nobodyさん
2009/04/04(土) 02:09:00ID:???てかA括弧閉じてないけど、スペースのことを言ってるのか・・・?
0879874
2009/04/04(土) 02:11:43ID:???>>874がどちらのこと言ってるのか良く分からないけど
俺は@はメソッドの時に使う。
一応Zendのコーディング規約に則ってやってるけど
個人の作業なら別にそんなの君の価値観でやればいいだろ
0880878
2009/04/04(土) 02:13:15ID:???0881nobodyさん
2009/04/04(土) 02:14:37ID:???PHPの「標準」なコーディング規約には2つの流儀がある。ひとつはZend、ひとつはPEAR。
で、どっちも1番の括弧スタイルを採用してるんだ。
C++で言えば、MSDNの規約とGNUの標準スタイルが一致しているような状況をイメージすればいいかな。そりゃ合わせるだろ?
PHPが初めての言語です、って奴が多いのも影響していると思う。
勿論、PHP以前に他の言語を学んでいた奴の中には別のスタイルで書く奴もいる。
俺も2番のK&Rスタイルで書くしな。
■ このスレッドは過去ログ倉庫に格納されています