【PHP】くだらねぇ質問はここに書き込みやがれpart6
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/06/05(日) 13:17:11ID:xiGnsMS4ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
0159nobodyさん
2005/06/15(水) 02:28:05ID:???0160nobodyさん
2005/06/15(水) 03:06:11ID:???グローバル変数なんかめったやたらに使うなドアホ。
バグの原因じゃボケ。
>>159
なにが自己解決したのか言え。ドアホ。
0161nobodyさん
2005/06/15(水) 03:42:55ID:???>>160のいうようにglobalを使うのは避けた方がいい。
関数内で変更する必要のない変数は値渡しをして、変更する変数はリファレンスで渡すようにする。
こうする事で、何が変更されるのかが明確になるし、デバッグ時にも注目する部分が減るというメリットもある。
globalを使うと、極端な話、コードのあらゆる個所で変更される可能性がある事になる。
0162nobodyさん
2005/06/15(水) 08:23:11ID:???たしかにglobalを普段使うのは危険だけどさ、usortとかに指定する比較関数に値を渡したくても渡せないときってどうしてる?漏れはglobalしか思い浮かばなかった。
なんていうか、ソートしている間はずっと値が変わらないけど比較には使う値をどう渡すかってこと。
staticも考えたけど、ソート時に内部で何度も呼び出される関数に、func_get_*()とかで無駄に場合分け増やしたくないってのはわがまま?
0163nobodyさん
2005/06/15(水) 11:27:46ID:???0164nobodyさん
2005/06/15(水) 11:48:13ID:???めったやたらに使うなということで必要なら使ってかまわないでしょう
グローバルな設定値とかを$cfg['hoge']とかの配列に入れて関数内でglobal $cfgとか普通に使ってる
0165nobodyさん
2005/06/15(水) 13:19:32ID:???連想配列として
$item[$_GET['mode']] = '2get';
ってやったときに$itemから連想文字を
取得したいときはどうすればいいの?
0168nobodyさん
2005/06/15(水) 14:02:25ID:???ありがと。
>>166
PHPは昨日から始めたばっかりで・・・かたじけない。
配列の操作に関してはarray_なんたら関数を調べれば
いいのねってことが分ったので・・・ありがと。
0169nobodyさん
2005/06/15(水) 14:05:00ID:???<?php
extract($_POST);
if($jsh<>''){
mysql_connect(localhost,root,pppppp);
mysql_select_db(db01);
$sql = "insert into kojindata values('$jsh', '$sim', $nen, $shk, 0)";
mysql_query($sql);
$jsh = '';
echo "データを登録しました<br />";
echo "登録を続けますか <a href=\"kojin.php\">続行</a>";
exit;
}
?>
以下に続きます。
0170nobodyさん
2005/06/15(水) 14:05:19ID:???<form action="kojin.php" method="post" >
<p>住所:<input type="text" name="jsh" size="40"></p>
<p>氏名:<input type="text" name="sim" size="40"></p>
<p>年齢:<input type="text" name="nen" size="40"></p>
<p>職業:<input type="text" name="shk" size="40"></p>
<input type="submit" value="登録">
<input type="reset" value="リセット">
</form>
「kojin.php」内のスクリプトです。
まず「住所」「氏名」などのフォームが現れ、そこに入力されたデータを
テーブル「kojindata」に送りレコードを追加、その後に登録を続けるかと
メッセージが出ます。
if文の$jsh(冒頭から4行目)は、17行目の"jsh"の事を言っているのでしょうか。
そして意味としては「もし$jshが空白で無かった場合」でいいんですよね?
9行目の「$jsh = '';」は「$jshに空白を代入する」と言う意味でいいんですか?
流れが良く分かりません。度素人なんです。よろしくどうぞ。
0171nobodyさん
2005/06/15(水) 14:28:05ID:???別に配列がらみはarray_なんたら関数だけではない。
マニュアルとかで配列の項をみたら?
あとは、「php 配列」でぐぐればいくらでもでてくるし。
本だっていっぱいあるんだから、入門書を一冊ぐらい買ってみたら?
0173nobodyさん
2005/06/15(水) 15:38:26ID:???暇だから解説しよう
formからmethod post で送られたデータはPHPで$_POST['フォームのネーム']という配列に代入される
$_POST['jsh'} に住所の項目で入力された値が入るってことだね
そのスクリプトは$_POSTをextractで展開している
これで$_POST['jsh'} の値が$jshにもコピーされる。
住所さえ入力してあればデータベースに登録される
9行目の$jsh = '';は無くても問題ないはず
あとデータベースにクエリ投げる前に$jsh = mysql_escape_string($jsh); //他の項目も
0174nobodyさん
2005/06/15(水) 16:55:39ID:???else if (($i >= 10) and ($i < 20)) {...}
else if (($i >= 20) and ($i < 30)) {...}....
のようなのをswitch等で見やすく書くことはできないでしょうか。
switch ($i) {
case 1..9 : ...; break;のような感じだと見やすいと思うのですが…。
0175nobodyさん
2005/06/15(水) 17:10:23ID:???多分こんな感じでいけんじゃね?
switch ($i){
case 1: case 2: case 3: 〜 case 9:
処理;
break;
}
0177nobodyさん
2005/06/15(水) 17:17:19ID:???ありがとうございます。$iが1〜250あるんです。泣。
分岐としては【ほぼ】10番単位でいけるという。号泣。
0178nobodyさん
2005/06/15(水) 17:19:22ID:???0179nobodyさん
2005/06/15(水) 17:20:44ID:???0180nobodyさん
2005/06/15(水) 17:31:10ID:???>>179
【ほぼ】なんで、1例外として何番と何番はこうで
何番と何番はこうなって…で、残りを10で割って…
せめて1から順に、上から並べれば見やすくなるかなという気持ちです。
>>178
ループ処理といいますと?私が思いつくのは結局
for ($i = 1; $i < 251; $i++) {
if ($i < 10) {...}
else if (($i >= 10) and ($i < 20) {...}
else if ......
と結局、なんのためにforしてるのかわかんなくなっちゃいます。
0182nobodyさん
2005/06/15(水) 17:36:32ID:???ただ単にSQL文の組み立てなのですが、その$iに応じて、検索対象の
項目や値が変わってくるというありがちといえばありがちな…
前段と末尾は共通なのですけれど。
0184nobodyさん
2005/06/15(水) 17:57:08ID:???switch (method_for_value($i)) {
case METHOD_A: ...;
case METHOD_B ...;
}
function method_for_value($i){
$result=METHOD_UNDEF;
if (($i > 0) and ($i < 10)) $result=METHOD_A;
else if (($i >= 10) and ($i < 20)) $result=METHOD_B;
else if (($i >= 20) and ($i < 30)) $result=METHOD_C;
return $result;
}
保守性は上がると思ふ
0185nobodyさん
2005/06/15(水) 18:00:16ID:???そう思います。if文の羅列をコメント入りで書いてあります。
見やすくする意味で、switch(もしくはそんなようなの)を使えないかなという質問です。
0186nobodyさん
2005/06/15(水) 18:09:18ID:???なるほど、ループを使って省略というのは、そういうことですか。
確かに流れとして(という言い方でいいのかな)見通しが
よくなりますね。試してみます。ありがとうございます。
0187nobodyさん
2005/06/15(水) 18:41:32ID:???結局、25通りの何かの組み合わせなんでしょ。
だったら、予め配列に25個の項目名でも何でもぶち込んでおいて、
$num = int($i/10ゴニョゴニョ);
$select_table_name[$num];
とかで良いんでねぇの?
0188nobodyさん
2005/06/15(水) 19:32:10ID:???大した量じゃないなら>>187の配列を用意しておく方式もいいと思う。
0190nobodyさん
2005/06/15(水) 23:44:25ID:???おおよそ80通りです。好みといってしまえばそれまでなのですが
配列にするのであれば、ループで省略の方が見やすいように思います。
また、DBは別の方の管理のため、大事になりそうで…。
否定ではないです。アイデアとして当然ありの方法論と思います。
ありがとうございました。
0191nobodyさん
2005/06/16(木) 00:08:15ID:???>おおよそ80通りです。
>>177で言ってることとぜんぜん違うじゃネェか(w
250を【ほぼ】10で割って、どうやったら80になるんだ。
0192nobodyさん
2005/06/16(木) 07:36:20ID:???そのテーブルと同じ構造の(空の)テーブルを生成するためのSQL文を
作ることはphpスクリプトで出来ますでしょうか??
つまり、現在のテーブル構造を解析したいのです。
たとえばnameという名前でvarchar(10)のフィールドが1個、
furiganaという名前でvarchar(20)のフィールドが1個ある・・・みたいな
テーブル情報をスクリプトで取得して、それを元に、同じ構造の別のテーブルを作る
SQL文を自動生成したいのですが…)
0193nobodyさん
2005/06/16(木) 07:47:15ID:???マルチポスト
【PHP】質問スレッドpart28【php】
http://pc8.2ch.net/test/read.cgi/php/1115281031/663
0194nobodyさん
2005/06/16(木) 08:55:37ID:???不快に思ったらごめんなさい。【ほぼ】10で割るというのは
例えば、1-10の内、2と3が例外、11-20の内、15と18が例外という感じで
ほどんど10で割ってですが、例外が(実際はまちまちなんですが)2づつある。
10で割った25+2つづつの例外(25*2)で、これだけで75パタンになりますが。
ぜんぜん違いましたでしょうか。日本語が下手ですみません。
>>192
構造をひっぱってこれる関数があればできそうですが…。
DBによってあったり無かったりしたんじゃないかな。
MySQLとかpostgresならあったと思いますが、使ってないので
うろ覚えです。
0195nobodyさん
2005/06/16(木) 09:36:04ID:???で、結局何が訊きたかったの?
80通りの分岐があって、その処理を個別に記述したいんなら、
if〜elseif〜・・・でも、switch...case...case...でも何でもいいじゃん。
ってか、80パターンを全て記述した時点で、美しく無いと思うがな(w
0196nobodyさん
2005/06/16(木) 11:02:55ID:???微妙な設計のDBに出合った時はずらずら列挙するに限る。
if ($i < 1 || $i > 250) { 値おかしい }
switch ($i) {
// 例外1
case A1:
case A2:
case A3:
例外処理1;
break;
// 例外2
case B1:
例外処理2;
break;
// 通常手続き。ひとつのフィールドにいろんな意味持たせるんじゃねボケ
default:
switch (floor($i / 10)) {
case 0: 通常処理1; break;
case 1: 通常処理2; break;
case 2: 通常処理3; break;
}
}
0197nobodyさん
2005/06/16(木) 12:32:05ID:???$functable = array(
1 => "func_A",
2 => "func_A",
3 => "func_B",
4 => "func_C",
:
:
);
$func = $functable[$i];
$func();
みたいなん。
0198nobodyさん
2005/06/16(木) 12:48:44ID:???まぁそういうことなのでしょうね。
随所に
//ここにもマジックナンバー
とかの遠慮がちな批判コメントを見るとほほえましく思えます。
ありがとうございました。
0199nobodyさん
2005/06/16(木) 13:04:52ID:???0200ドラゴン
2005/06/16(木) 14:06:43ID:???と言う感じで読み込んだら、以下のエラーが出て困っています。
Warning: Cannot modify header information - headers already sent by (output started at ./index.php:11) in ./lib/common.php on line 57
./lib/common.phpの中には
function header()
{
header('Content-Type: text/html; charset=euc-jp');
}
があるんですが、どうすればエラーが出ないようにするのかわかりません。
もしよければご回答お願いします…。
0201nobodyさん
2005/06/16(木) 14:21:14ID:???0202ドラゴン
2005/06/16(木) 14:27:13ID:???ファイル名:test.php
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body>
<table width="200" border="1">
<tr>
<td> <?php include("index.php"); ?> </td>
</tr>
</table>
</body>
</html>
0203nobodyさん
2005/06/16(木) 14:29:27ID:???0204nobodyさん
2005/06/16(木) 14:40:35ID:???ひょっとしたら
test.phpを
<?php include("index.php"); ?>
だけにしたら実行できないか?
0205ドラゴン
2005/06/16(木) 14:49:23ID:???0206ドラゴン
2005/06/16(木) 14:52:29ID:???function header()
{
header();
Warning: header() expects at least 1 parameter, 0 given
と警告が出ました…。
0207nobodyさん
2005/06/16(木) 15:00:59ID:???header関数を実行する前には、何も出力してはいけないのだよ。
だから、index.phpをインクルードした時点では、
すでに
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body>
<table width="200" border="1">
<tr>
までが出力されているから、エラーになる。
index.phpの中身はどうなっているんだ?
0208nobodyさん
2005/06/16(木) 15:20:11ID:???マニュアルのheaderのページを見てごらん。
ttp://jp.php.net/manual/ja/function.header.php
headerを使う前にhtml要素(空白や改行でさえも)を出力してはいけない事や、
その制限を回避する方法(出力のバッファリング)の事が書いてあるから。
なにかの本・サイトに載っていたスクリプトがindex.phpで、
それに手を加えるために第一歩としてtest.phpの中で
そのままindex.phpをincludeしようとしたら、いきなりコケたって所かな?
0209nobodyさん
2005/06/16(木) 16:11:21ID:???{
header('Content-Type: text/html; charset=euc-jp');
}
???
PHPでは関数のオーバーロードはできないはずだが
0212nobodyさん
2005/06/16(木) 16:31:21ID:???mssql_fetch_arrayした時のdatetime型カラムの値が変なんだけど。。。
例えば 2005/06/16 11:12:13 だと 2005 6 16 11 12 と返ってくる。
フォーマットが違うのは対応できるけど、秒が落ちてしまっていて
使いもんになんねぇ。
0213nobodyさん
2005/06/16(木) 16:55:26ID:???header('Content-Type: text/html; charset=euc-jp');
ヘッダーが来る前に、多分どっかでなんかの文字が出力されてる気がする。
0214nobodyさん
2005/06/16(木) 16:55:48ID:???0215ドラゴン
2005/06/16(木) 16:56:41ID:???function header()
{
header('Content-Type: text/html; charset=euc-jp');
}
を消して、表示されるテンプレファイルに直接ヘッダを書いたらOKでした。
実際は、問題から逃げただけなんですが・・・(^^;
PHP難しいッス・・・。
どうもお騒がせしました
0216nobodyさん
2005/06/16(木) 16:57:50ID:???出力されたHTMLソースをみて、先頭の方にテスト残骸の「a」とかBOMとか怪しいものが無いかないかチェック
0217nobodyさん
2005/06/16(木) 16:59:52ID:???エラーメッセージがそういってますから間違いないでしょう
どっかでじゃなくてindex.phpの11行目で出力されてることもわかってます。
0218nobodyさん
2005/06/16(木) 17:03:05ID:???あのさ、index.phpの中でheader出力してて、
それをインクルードしているtest.phpが既にhtmlはいてるんだよ。
0221nobodyさん
2005/06/16(木) 17:12:08ID:???$hoge = hogehoge()[0]とかするやり方ってありませんか?
今は、
$hoge = hogehoge();
$hoge = $hoge[0];
ってやってるのですが、もっと簡単に書くやり方あったら教えてください。
0224nobodyさん
2005/06/16(木) 19:29:59ID:???0225nobodyさん
2005/06/16(木) 23:20:32ID:???ssiでincludeして表示する負荷は同じですか?
0226nobodyさん
2005/06/16(木) 23:55:37ID:???0227nobodyさん
2005/06/17(金) 00:15:38ID:???0228nobodyさん
2005/06/17(金) 00:40:43ID:???ログインページと認証後のメインページがあって
認証後のメインページにはログインページでセッション発行してる人しかこれないようにしたいんです。
URL直打ちとかでメインページに来た人でセッション発行されてなければ
強制的にログインページに飛ばしたいのですが。
ログインページ.php
<?php
session_start();
$_SESSION['user'] = 'お客様';
?>
メインページ.php
<?php
session_start();
if ($_SESSION['user'] = false){
}
if文のところで値のない(ヌル値)人は別ページに飛ばす場合のif文の書き方などがいまいちわかりません。
わかりにくいかもしれないですが、教えてエロイ人!
0229nobodyさん
2005/06/17(金) 00:48:09ID:???if文には条件式を書きます。代入式ではありません。
変数が存在するかどうかを確認するには、isset()を使うとよいでしょう。
0230nobodyさん
2005/06/17(金) 00:57:58ID:x3OuW/uyこれを/index.phpの中にincludeしたとします。
この場合、index.phpが基準になってしまうんですが、
これでは、階層レベルの違うところから/code/funcs.phpを利用すると内部のパスがおかしくなってしまうんですが、なんかうまい方法(関数)はないのでしょうか?
funcs.phpと同一階層にあるdatというディレクトリの中のdata.datを常に参照したいです。
0231nobodyさん
2005/06/17(金) 00:59:41ID:???計ってないけどおそらくSSI。
CGI版PHPとなら間違いなくSSI。
>>228
if($_SESSION['user'] == 'お客様')
header()でRedirectするなり、エラーページをだすなり。
細かいけど、セッションはサーバーとクライアントのやり取りのことだから、「セッションを発行」というのはおかしい。クッキーとごっちゃになってない?
0232nobodyさん
2005/06/17(金) 01:11:27ID:???ありがとうございました。
色々勘違いしてましたが isset にて目的達成できました。
参考までに。
<?php
if (isset($_SESSION['user'])) {
echo '既に認証しています。';
} else {
echo '認証していません。';
}
?>
0233nobodyさん
2005/06/17(金) 01:14:04ID:???言い方がおかしかったですね。
また、セッションとクッキーの違いについても正しく認識してないと思います。
お手数おかけしました。
0235nobodyさん
2005/06/17(金) 04:56:10ID:???1文字ずつ配列に入れていくのは文字が多いので大変です。
なのでアスキー文字から日本語に変換したいのですが、chr()では無理でした。
上手い方法ってありますか?
0236nobodyさん
2005/06/17(金) 05:31:21ID:???上位バイト・下位バイトに分けた時にそれぞれ特定のbit列(いいかえれば数値)しかもたないから、
それぞれにランダムな数値を割り振ってpackあたりで引っ付けて出力すればいいんじゃないかな。
0237nobodyさん
2005/06/17(金) 05:52:56ID:???getのように〜?hoge=hugaと簡単にはいきませんか
0238nobodyさん
2005/06/17(金) 06:22:41ID:???function post($url,$postdata) {
require_once "HTTP/Request.php";
$req =& new HTTP_Request($url);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
foreach ($postdata as $key => $value) {
$req->addPostData($key, $value);
}
if (! PEAR::isError($req->sendRequest())) {
$response = $req->getResponseBody();
} else {
$response = "";
}
return $response;
}
0239238
2005/06/17(金) 08:01:53ID:???どういう方法でやれば書き込めるのかお知恵を拝借したい
0240nobodyさん
2005/06/17(金) 08:09:32ID:???0241nobodyさん
2005/06/17(金) 08:56:22ID:???スクリプトが実行されるのですが、
htmとしたときはスクリプトは実行されず
<?php・・・・・?>のコードごとブラウザに送信されます。
どうも拡張子によって展開できないようなのですが
これはどこの設定により変えることができるのでしょうか?
0245nobodyさん
2005/06/17(金) 12:02:47ID:???よくよんでないけど、ここ参考にならんか?
【p2】PHPでつくった2ch viewer【part26】
http://pc8.2ch.net/test/read.cgi/software/1118476501/
0246192
2005/06/17(金) 13:42:51ID:WoohunCDDBはMySQLですが、スクリプトから操作したいのです。。。
そういう関数って無いですよね? テーブル構造を分析するような関数。。。
0248nobodyさん
2005/06/17(金) 13:49:28ID:???試してないけど、
mysql_list_tables、mysql_field_flags、mysql_field_len、mysql_field_name、mysql_field_type
辺りの関数でなんとかなるんぢゃないの?
0250nobodyさん
2005/06/17(金) 14:15:28ID:???使い方が分からなければ、phpMyAdminのソースでも読むとか
0251nobodyさん
2005/06/17(金) 15:57:01ID:???http://dev.mysql.com/doc/mysql/ja/show-create-table.html
0253nobodyさん
2005/06/17(金) 16:34:15ID:???http://dev.mysql.com/doc/mysql/ja/getting-information.html
構造の分析は自前で汁
0254nobodyさん
2005/06/17(金) 17:14:59ID:???// ランダム表示設定(表示コメント|URL)
$banner = array(
'【コメント(タグ可)】|【URL】',
);
function rnd_banner($banner){
mt_srand((double)microtime()*1000000);
$num = mt_rand(0,(count($banner)-1));
//コメント,URL分割
list($comment,$url) = explode("|",$banner[$num]);
//タグ生成
$display_banner01 = '<a href="'.$url.'">'.$comment.'</a>';
return $display_banner01;
}
$display_banner01 = rnd_banner($banner);
?>
----------------------------------------
これを「コメント|URL」の区切りでなく、「コメント(タグ可)」のみの
ランダム表示スクリプトにしてください。お願いします。
0256nobodyさん
2005/06/17(金) 18:35:55ID:j6Wl64CO0257nobodyさん
2005/06/17(金) 18:45:23ID:???0258nobodyさん
2005/06/17(金) 18:53:46ID:???echo "ああああ {$_POST['hoge']} あああ";
{}で囲ってるのは変数ですよって意味
でもこっちの方が多少速い
echo "ああああ ".$_POST['hoge']." あああ";
まちがいかもしれないっすけど
■ このスレッドは過去ログ倉庫に格納されています