くだすれPHP(超初心者用)
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/12(月) 14:06:01ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。
PHP Home Page
http://www.php.net/
0115nobodyさん
2006/07/27(木) 13:43:06ID:???$str = implode('","', $allArray);
この後$strの前後から2文字づつ切ればいい。
0116115
2006/07/27(木) 13:44:20ID:???$str = '"' . implode('","', $allArray) . '"';
でいいな。
011799
2006/07/28(金) 18:31:34ID:???PDO使ったら普通にいけましたコレ。
PHPソース:EUC、HTTP出力:SJIS、ORACLE:SJIS
$dsn = 'oci:dbname=hoge;charset=JA16EUC';
$user = 'hoge';
$pass = 'hoge';
$db = new PDO($dsn,$user,$pass);
$stmt = $db->prepare("SELECT empid,empname FROM emp");
$stmt->bindColumn('empid',$ret_arr['id'],PDO::PARAM_STR);
$stmt->bindColumn('empname',$ret_arr['name'],PDO::PARAM_STR);
$stmt->execute();
while($stmt->fetch(PDO::FETCH_BOUND)){
$ret_arr['id'] = $ret_arr['id'];
$ret_arr['name'] = $ret_arr['name'];
}
$stmt = null;
0119nobodyさん
2006/08/01(火) 00:31:28ID:???0120nobodyさん
2006/08/01(火) 00:32:05ID:???0121nobodyさん
2006/08/01(火) 00:43:07ID:???0122nobodyさん
2006/08/01(火) 01:32:13ID:???本当にありがとうございます。
0124nobodyさん
2006/08/01(火) 08:56:49ID:W3yf98Bx0125nobodyさん
2006/08/01(火) 16:06:50ID:E6FJ2WAYグローバル配列変数みたいなものを探しています。
0126nobodyさん
2006/08/01(火) 16:25:00ID:???0127nobodyさん
2006/08/01(火) 16:34:43ID:???グラフ表示のサンプルを見ると
<img src='graphtest.php'>
のようにグラフを表示する為に専用のPhpファイルをリンクしてありますので
本体phpからグラフphpにデータを渡す必要があると思うのですが。
0128nobodyさん
2006/08/01(火) 17:18:31ID:???メインスクリプトからPHPファイルにデータを渡すのではない。
メインスクリプトからPHPスクリプトを利用してやるのだと
0131nobodyさん
2006/08/02(水) 22:03:52ID:B9yKSglg<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
内容を書き込み送信 <br>
<form method="post" action="post.php">
<input type"text" name="contents" value="" size="50" maxlength="256">
<br><br>
<input type="submit" name="submit" value="送信">
</form>
<br>
0132nobodyさん
2006/08/02(水) 22:05:24ID:B9yKSglg$filename = "test.txt";
if(isset($_POST['submit'])){
print("投稿内容: ".$_POST['contents']);
$file = fopen($filename, "w");
flock($file, 2);
fwrite($file, $_POST['contents']);
flock($file, 3);
fclose($file);
}
?>
</body>
</html>
0133nobodyさん
2006/08/02(水) 22:42:33ID:???0136nobodyさん
2006/08/03(木) 01:07:12ID:???0137131
2006/08/03(木) 02:32:59ID:N4ArK+AW$filename = "test.txt";
['contents'] = mb_convert_encoding(['contents'], "JIS", "UTF-8")
if(isset($_POST['submit'])){
print("投稿内容: ".$_POST['contents']);
$file = fopen($filename, "w");
flock($file, 2);
fwrite($file, $_POST['contents']);
flock($file, 3);
fclose($file);
}
?>
としてみたのですが、できません。。。。。
どうしたらいいの・・・・・??
0138nobodyさん
2006/08/03(木) 03:09:36ID:???PHP勉強しようとして
apache_2.2.3-win32-x86-no_ssl.msi
でまずApache入れようとしたら
インストールウィザードにPlease wait.とか言われたまんま進まないんですけど。
何が問題なんでしょう。
WinXP SP2, Celeron D 341。
これじゃせっかくPHPで何か書いても動作チェックしようがない…
0139nobodyさん
2006/08/03(木) 03:40:23ID:???手元のバージョンも合わせたほうがいいですか?
普通に最新の5.1.4入れようとしてますけど。
0140nobodyさん
2006/08/03(木) 06:52:33ID:???0142nobodyさん
2006/08/03(木) 08:07:08ID:???0143138
2006/08/03(木) 11:55:57ID:???Apache HTTP Server 2.0.59 Setup is preparing the Installation
Wizard which will guide you through the program setup
process. Please wait.
でいつまで経ってもNextが押せません。
0144131
2006/08/03(木) 12:12:14ID:???ini_set("mbstring.internal_encoding","UTF-8");
って入れたらできました♪
0145nobodyさん
2006/08/03(木) 15:53:48ID:???0146nobodyさん
2006/08/03(木) 16:00:51ID:???アップローダ以外の普通の掲示板とかのスクリプトはわかるのか?
だったらフリーなPHPソースであぷろだ置いてるところあるから
そのソースを読め
0147nobodyさん
2006/08/04(金) 15:52:28ID:v3M2GCi5フォームで入力した文字を送信すると文字がHTTPプロトコルに則って
送信されるでしょ。アップローダの場合のファイルはその仕組みと同様に
ファイルを半角文字に変換して送信して受け側でもとのファイルに戻して
やるのが仕組みだ。
0148nobodyさん
2006/08/04(金) 16:18:39ID:???ファイルアップロードの処理
http://coronado.s8.xrea.com/php/features.file-upload.php
0149nobodyさん
2006/08/04(金) 17:11:46ID:???0151nobodyさん
2006/08/04(金) 17:46:53ID:???IE 使ってない?
文字コードを UTF とかにすると見れるね。
先月かな、WindowsUpdate してから IE の
文字コード判定がおかしくなってない?
0152nobodyさん
2006/08/04(金) 19:19:20ID:IwZUdvMW0153nobodyさん
2006/08/05(土) 00:30:49ID:???最後を1にしる
携帯ではセッションの「SID」は使用できないんでしょうか?
1・ログインフォーム(login.php)でIDとパス入力
↓
2・フォームの値を同ファイル(login.php)に送信、検証
↓
3・OKならセッション値に代入、別ファイルに飛ばす
header("Location:./nextfail.php?SID");
↓
4・以降、セッションでID・パス持ち回し。
ウェブサーバに載せて、パソコンからなら問題なく動作するのですが、
携帯(FOMA)からだとセッション値が持ち運べていないようです。
上記の2の同一ファイルへの送信は
・フォームアクションでSID付加
$login = "./login.php?SID";
<FORM ACTION="<?=$login?>" METHOD=POST>
・HIDDENでセッションID送信
$ssna = session_name();
$ssid = session_id();
<INPUT TYPE=hidden NAME="<?=$ssna?>" value="<?=$ssid?>">
の両方を試してみましたがダメでした。
セッションを使用する場合は全てのファイルでセッションIDを
GET(POST)受け取りをするしかないんでしょうか?
尚、クッキー・register_global共にOffでも、パソコンからは動作しました。
0155nobodyさん
2006/08/05(土) 04:28:33ID:???use_trans_sid でぐぐって吉。
use_cookieはon、
use_only_cookieの欄はなし。
なのに
header("Location:./nextfail.php?SID");
の文末SIDを受け取ってくれない・・・。
echo SID;
で表示するとちゃんとPHPSESSID=IDの形で収まってるし、
HIDDEN属性のは受け取ってくれてる。
どうやらSIDが展開されないのが問題みたいです・・・。
0157nobodyさん
2006/08/05(土) 06:08:06ID:???因みにLocationは絶対パスを指定するのがHTTPのスペック
)ヽ、_,,,..._ ヽ、_, げえッ───────!!!
iー-、::_: `、ゝ_,,- ノ ( ) 、 )
ノ::`ー_-_ノ ノ ノ_,-"イ / ` 、ノ `i ( l
,-、 |::::.ヽ _。ヽ:: /_。フ' |ノ ヽ、 i、 ノ
|6`i/:::. ,,-.―'' /i|.ー-、. |
ヽ ::: i :: ⌒ : |
ヽ`l | :: /ニ`i /
`|:. ヽ、 i_,,,、/ / ,へ___
,|:::._ヽ___/ _//`ー--、ニ=--―,
| ̄ ̄ ̄ ̄||| ̄| / / / __  ̄ ̄`¬
 ̄ ̄ ̄ ̄ ̄○ ̄ ̄ヽ | // / /「""の中で定数が展開されるわけないだろ 」
6時間悩んだ結果が・・・。
>>155様
>>157様
大変お世話になりました。
PHPファイル計300個全修正してきます・・・。
0159nobodyさん
2006/08/05(土) 10:29:32ID:hzy3ErJp今度からは関数化しとけよ
0160nobodyさん
2006/08/05(土) 11:03:07ID:???$hoge = ""; とやっても、($hoge == null) はtrueとなるようですが。
0161nobodyさん
2006/08/05(土) 11:24:09ID:???0163160
2006/08/05(土) 12:17:40ID:???is_null()をつかって、nullか空文字どっちでも条件trueで良い場合は
if ($hoge == null) もしくは if ($hoge == "")
で判定しちゃって大丈夫ですか?
0165nobodyさん
2006/08/05(土) 13:53:22ID:???0166nobodyさん
2006/08/05(土) 14:31:27ID:???さすがに標準ではないぞ
$_SEVER['HTTP_USER_AGENT'] の文字列を解析するのがいいのではないだろうか
半角文字以外すべて「?」になる文字化けしてしまいます。
phpファイル自体はsift_jisです。
mb_convert_variablesでsift_jis()
で変換しても同じ文字化けでした。
日本語化する
mb_language("ja");
を外すと「・」に変換されます。
何が原因なのでしょう?
0170161
2006/08/07(月) 08:19:36ID:???(「210.153.84.12」なら最後の「.12」を削って210.153.84という値を取得したい)
場合によって1〜3桁になるので桁指定で削れません。
$end_ip = strrchr($_SERVER["REMOTE_ADDR"],".");
$end_ip_num = strlen($end_ip);
$ip3 = substr_replace($_SERVER["REMOTE_ADDR"],"",-1,$end_ip_num);
こんな感じで、非常に周りくどいですが
strrchrで文字列を抜き出し、桁を数えてから削ろうとしてみました。
しかしstrrchrの戻り値が、echoなどで表示は出来るのですが変数に収めることがでいません。
何かいい方法はありませんか?
0172nobodyさん
2006/08/07(月) 12:27:36ID:???正規表現は?
正規表現 IP - Google 検索
http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-18,GGGL:ja&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+IP
0175nobodyさん
2006/08/07(月) 13:41:46ID:???0176nobodyさん
2006/08/07(月) 13:46:33ID:???ちなみにそういうのをやるときは、関数を作った方が便利だぞ。
function my_addr_cut ($addr){
$ar = explode('.' $addr);
if (count($ar) > 3){
return $ar[0].'.'.$ar[1].'.'.$ar[2];
}
}
とやっておいて、
$ip3 = my_addr_cut( $_SERVER['REMOTE_ADDR'] );
0177nobodyさん
2006/08/07(月) 20:38:09ID:OuBXfFXq0179nobodyさん
2006/08/08(火) 02:03:26ID:???0180nobodyさん
2006/08/08(火) 23:54:31ID:???0182nobodyさん
2006/08/09(水) 09:58:34ID:???0184nobodyさん
2006/08/09(水) 10:40:30ID:???0185nobodyさん
2006/08/09(水) 10:50:53ID:???わかりやすく説明してください。
0186nobodyさん
2006/08/09(水) 10:54:11ID:???0187nobodyさん
2006/08/09(水) 11:02:15ID:???よほど、テクニカルなことをしない限りは違いはあまりない
ただ、ある状態になった後の処理を一箇所にまとめられるという
利点が try catch にはある
if (!$this->foo()) {
$this->printError();
return false;
}
if (!$this->bar()) {
$this->printError();
return false;
}
こんなのが、
try {
$this->foo();
$this->bar();
} catch (Exception $e) {
$this->printError();
return false;
}
になる
これ以上の使い方をしたいなら、自分で使って慣れるほうがいい
0188185
2006/08/09(水) 11:10:53ID:???そんなに褒められると照れますよ。
>>187
if文で書くよりもすっきりした感じになりますね。でも、それ以外には
例外処理の利点がいまいちはっきりしないので、慣れるまでもっと自分
で使ってみることにします。
レスありがとうございました。
0189nobodyさん
2006/08/10(木) 16:02:56ID:???例えば実数のルート(平方根)を求める関数を作ることを考えてみろ。
引数はdouble, 返値もdoubleにしたいはずだ。
しかしその関数に-5とか入れたらどうなる?エラーを起こしたことを知らせるしかない。
下手にdoubleで答えも返せないし、しょうがなく投げるのが例外で、
それを捉えるのがtry catchだ。
つまり、if elseとtry catchはまったくの別物。
0190nobodyさん
2006/08/10(木) 16:14:34ID:???float sqrt ( float arg )
なんてのがあったな。
if ($foo >= 0){
$bar = sqrt($foo);
}else{
$bar = 0;
echo "error";
}
とするか
try{
$bar = sqrt($foo);
}catch(Exception $e){
$bar = 0;
echo "error";
}
だな。見た目は似てるけどtry catchの方は一回2行目でエラーが発生してて
それを無理矢理正常なふりをしようってのがcatch文。
0191185
2006/08/10(木) 23:24:47ID:???つまりは、あらかじめ値を検査して値が正しい場合に実行するとき
に用いるのがif文。値が正しいかはわからないけど、とりあえず実
行して、うまくいかないときの処理を用意しておくのが例外処理。
・・・というように理解しました。多分これでいいはず。
おふたりとも、レスありがとうございました。
0192nobodyさん
2006/08/11(金) 10:09:32ID:???>とりあえず実行して、うまくいかないときの処理を用意しておくのが例外処理
ちょっと補足。
例外はあくまで例外が起きたときに使うもの。 異常が発生したときに起きるのが例外。
ファイルやらネットワーク関係の処理では、機械やユーザや相手の都合次第で
正常終了したり異常終了になったりするわけで、そういった異常を拾うもの。
書きやすいからって多用してると、想定内のエラーなのか、予期しないエラーなのか
判別できなくなるから止めたほうがいい。 普通、例外の復帰って重いし。 (phpの実装はしらんが)
まーphpだったらそんなに気にする必要は出てこないだろうが、他人にソース見られたときに
「うわーこいつアホだな」 と思われないように、頭の片隅に入れといて。
0193_
2006/08/11(金) 18:12:39ID:abMDzR7z×時間後にプログラムを実行したり
×時から×時間ごとにプログラムを実行する方法
ってあるでしょうか?
Imageタグを呼び出す方法が良いかと思うのですが
その先が分かりません
0194nobodyさん
2006/08/11(金) 18:40:15ID:???それは、phpの範疇ではありません。
それぞれの環境が持っている、スケジューラーやデーモンを利用するしか
ありません。
linux 系の場合は crontab というデーモンでできます。
0195_
2006/08/11(金) 19:10:07ID:abMDzR7z一応
http://www.bitfolge.de/pseudocron-en.html
という所にあるのが使えるかなと思ったんですが
PHPに関して初心者中の初心者でどのように利用するかわかりません
英語なので翻訳ソフト使ってり読んだりしましたが
具体的に書いてなかったような気がします。
もしこれがcronと同じ役割を果たせるのであれば使い方
大まかでもいいので教えて欲しいです。
0196nobodyさん
2006/08/11(金) 19:15:30ID:???crontab 自体は設定にそって実行ファイルを動かすだけ
まずは、crontab 自体の設定の仕方を覚えた方がいい
そのサイトにあるようなものは別にいらない
普通に crontab を使えばいい
0197_
2006/08/11(金) 19:19:46ID:abMDzR7z良くわからないのですが
contrab の使用を禁止しているレンタルサーバーも結構あるようなので
できれば使いたくなかったのですが
現実としてどうなんでしょうか?
教えてください
0198_
2006/08/11(金) 19:21:28ID:abMDzR7z良くわからないのですが
contrab の使用を禁止しているレンタルサーバーも結構あるようなので
できれば使いたくなかったのですが
現実としてどうなんでしょうか?
教えてください
0199_
2006/08/11(金) 19:22:52ID:abMDzR7z表示がでて二重投稿になってしまいました
すみません
0200nobodyさん
2006/08/11(金) 19:32:10ID:???現実としては、PHP単体では無理
>>195 のやつは、誰かがアクセスするたびに実行されるだけなので
特定の時間後にきっちに動かすというのは無理
かなり、アバウトでいいなら pseudo-cron でもいいけど
0201nobodyさん
2006/08/11(金) 19:36:58ID:???簡単な使い方ならここに乗っている
とりあえず、使ってみろ
このサイトに書かれていることも分からないのなら、
もっとはじめから学んだほうが良い
http://phpspot.org/blog/archives/2005/11/croncronphp_pse.html
0202_
2006/08/11(金) 20:01:50ID:abMDzR7z>>200
イメージタグで呼び出してやるので実際に時間のずれがあるのはわかります
>>201
PHPSPOTにも載ってたんですね
そこに書いてある流れはだいたい分かるんですが
/*config section*/
以外の部分で何を設定すればいいのかなどわかりません
もしかしたら具体的な内容になってきたかもしれません。すみませn
0204_
2006/08/12(土) 23:27:19ID:wVHES/N8そこのサイトに書かれてる事はわかっても、
そこのサイトに書かれてる内容だけで
全部理解できなかったと言うことです
0205nobodyさん
2006/08/16(水) 23:13:07ID:???ちょっとパニクってきました。
アドバイスいただければ嬉しいです。
・流れ
入力画面→確認画面→完了画面と遷移します。
入力画面で入力したデータをPOSTで確認画面に、確認画面から完了画面へは
hiddenフィールドで渡します。(完了画面でDB登録)
入力修正のときは、確認画面のhiddenフィールドに入力データを入れ、入力画面にデータを戻します。
(入力画面では、そのデータを受け、初期表示に利用)
良く分からないのは、
・hiddenフィールドにもhtmlspecialcharsをかました方が良いんでしょうか?
例えば、<input type="hidden" name="memo" value="<?=htmlspecialchars($memo)?>">
phpのマニュアルでは、セキュリティ上、hiddenにかましているようなのですが。。。
・その場合、hiddenから受け取ったデータはhtmlエンティティ化されますが、
そのデータをそのままDBに登録するのはどうなんでしょうか?
例えば、&などは「&」の形で登録されちゃいますが。。。
いろいろ調べてみましたが、DB登録時には、なるべく素のデータを登録するのが、
望ましいという記事もあり、迷っています。
それとも、hiddenでデータ受け渡しするんでなく、セッションを使うべきなのでしょうか?
0206205
2006/08/16(水) 23:20:10ID:???&などは「&」の形で登録されちゃいます・・・のところは、
&などは「アンド記号amp;」
という意味です。
0208205
2006/08/17(木) 00:44:43ID:???どうもありがとございます。
簡単なプログラムで確認したところ、何事もなく復元されていました。
どうも、頭の中でごちゃごちゃ考えすぎていたようです。
恥ずかしい。。。
ありがとうございました。
しかし、PHPマニュアルのそれらしいところを見たのですが
POST送信時に復号される話は見つかりませんでした。
私の探し方が悪いのでしょうか?
0210nobodyさん
2006/08/17(木) 21:15:19ID:???PHP+MySQLを使用し、登録者以外からの書込み拒否する為
名前とパスワードが一致すれば、書込みできるようにしたいのですが、
名前とパスが正しくても、書込みできません。
現在の設定は
MySQLのテーブルに、投稿者の名前を記録するフィールド名=name
投稿者のパスワードを記録するフィールド名=pass と設定した状態で
投稿者の名前=NAME、投稿者のパスワード=PASS、としてPOST属性で送信し
以下を受取側のファイルの一部にしてパスワード確認しています。
//↓から
extract($_POST);
mysql_connect('localhost','root','HOSTPASS');
mysql_select_db('TABLE');
$sql= "select * from FIELD where name = $NAME";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$PASS = $row[pass];
if($pass != $PASS){
echo "パスワードが違います。";
}
else{
以下書込みプログラムが続く
//ここまでが受取側の一部
どこがが間違っているのでしょうか?
ご指導宜しくお願いします <(_ _)>
0211nobodyさん
2006/08/17(木) 22:18:29ID:???すばらしく、ザルなスクリプトだが、サンプルという好意的に解釈しよう
まずは、問題を切り分けろ
1.$PASS には期待している文字列が入っているか
2.$row['pass'] には本当に期待している文字列が格納されているか?
3.仮に $row['pass'] = $PASS; として書き込みプログラムが動くか
1.が駄目なときは前の入力画面がおかしい
パラメータ名などを確認
2.DB に本当にレコードが存在するか確認
ない場合は SQL 文が間違っている可能性がある
直接 MySQL のクライアントを立ち上げて試してみる
3.分岐がちゃんと動いているか確認
動いているときは、書き込みプログラムがおかしい
このどれもが期待通りに動いているのなら
もう一度書き込んで見てくれ
そのときは、本当に使っているソースを貼って
DB の接続に必要なパラメータは消していいから
0212nobodyさん
2006/08/17(木) 22:20:04ID:U0Bacn/nあ、悪い。間違えた
誤)
3.仮に $row['pass'] = $PASS; として書き込みプログラムが動くか
正)
3.仮に $row['pass'] = $pass; として書き込みプログラムが動くか
0213nobodyさん
2006/08/18(金) 06:54:21ID:???nameって予約語じゃなかったっけ、予約語ならバッククォート
あと値もクォートしましょう
where `name` = '$NAME'
■ このスレッドは過去ログ倉庫に格納されています