【PHP】ID出さなくても質問OKなスレ【初心者歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/02/03(火) 01:09:36ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0653nobodyさん
2009/07/09(木) 18:48:35ID:???>>650
ありがとう。
iframeは考えたんですけど、XHTML1.1で非サポートになり、策定中のHTML5.0でも
廃止になるということで、使わない方向を考えてました。
>>651
ありがとう。
JavaScriptも必須ですか。
まったくの初心者なので、PHPの公式マニュアルを読むだけで苦労してます。
0654nobodyさん
2009/07/09(木) 21:36:35ID:???0655age
2009/07/09(木) 22:48:26ID:DwSsHHgt強制的にサーバとPCとのコネクションを切断する事は可能ですか?
0657nobodyさん
2009/07/10(金) 12:50:37ID:???iframeは、XHTML1.1ではすでに無いです。
W3Cの勧告でもHTML5.0で無くす方向で進めているようです。
0658ユキ
2009/07/12(日) 04:36:26ID:au+P+rHJPHPど素人です。
インターネットで調べながらPHPの問題に取り組んでいますが、
2週間以上掛けても全く分かりません。
どのように書くのか教えていただけないでしょうか。
『EmEditor Free Version 6.00.4』とザンプを使っています。
問題は以下のとおりです。
『数値1〜9があります。全て4桁です。
9つの数字の中の最大値と最小値を出力しなさい。
負の数と5桁以上の数値が入力された場合エラーと出力する。
さらに数値1〜9のどの数値が最大値、最小値か出力しなさい。』
ループとfunctionを使うそうなんですが、どう使えばいいのか分からず、
ゼロの状態です。
皆様、お忙しいと思いますが、助けていただきたいです。
お願い致します。
0659nobodyさん
2009/07/12(日) 05:09:19ID:???0660nobodyさん
2009/07/12(日) 08:09:56ID:???数値1を入力する
数値2を入力する
数値3を入力する
数値4を入力する
数値5を入力する
数値6を入力する
数値7を入力する
数値8を入力する
数値9を入力する
↓
数値1に入れられた数値を、$aに入れる
、、、、
数値9に入れられた数値を、$iに入れる
0661nobodyさん
2009/07/12(日) 08:11:34ID:???もし5桁以上なら、エラーを吐いて死ぬ。
4桁なら、こんどは、$aが負の数かどうかを調べる。
0以上なら、おk。
もし負の数なら、エラーを吐いて死ぬ。
$aのチェックが終わったら、$b、そして
、、、、$i。
0662nobodyさん
2009/07/12(日) 08:14:51ID:???そんで、その中の最大値を調べる(専用関数あり)
そして、こんどはその配列の、最小値を調べる(専用関数あり)
そんで、最大値のvalueに一致するkeyを調べて、
「この数値○が最大でした」って表示
次に、最小値がでたところのvalueのkeyを調べて、
「この数値のときに最小でした」って表示。
以上。あとは上記の仕様書をプログラマーに食わせれば
ソースコードを吐く。
0663nobodyさん
2009/07/12(日) 08:24:10ID:???それだと「さらに数値1〜9のどの数値が最大値、最小値か出力しなさい」
の設問には答えられないので、もう一工夫が必要。
0664nobodyさん
2009/07/12(日) 08:51:58ID:???0665ユキ
2009/07/12(日) 14:48:56ID:tG558Uf0ご親切にありがとうございます!!!!!
おかげさまで$aの桁を調べるまで出来ました!
書いていただいた内容をヒントにもう少し自分で頑張ってみます!
0666ユキ
2009/07/12(日) 22:27:20ID:tG558Uf0これからどのようにfunctionとループを使えばいいのかどうしても分かりません。
解答、あるいはヒントを頂けないでしょうか?
度々すみません。
if($a > 9999 or $a < 0){
echo "<div>エラー</div>";
} else { echo "<div>$a</div>";
}
if($b > 9999 or $b < 0){
echo "<div>エラー</div>";
} else { echo "<div>$b</div>";
}
if($c > 9999 or $c < 0){
echo "<div>エラー</div>";
} else { echo "<div>$c</div>";
}
if($d > 9999 or $d < 0){
echo "<div>エラー</div>";
} else { echo "<div>$d</div>";
}
if($e > 9999 or $e < 0){
echo "<div>エラー</div>";
} else { echo "<div>$e</div>";
}
0667ユキ
2009/07/12(日) 22:28:07ID:tG558Uf0if($f > 9999 or $f < 0){
echo "<div>エラー</div>";
} else { echo "<div>$f</div>";
}
if($g > 9999 or $g < 0){
echo "<div>エラー</div>";
} else { echo "<div>$g</div>";
}
if($h > 9999 or $h < 0){
echo "<div>エラー</div>";
} else { echo "<div>$h</div>";
}
if($i > 9999 or $i < 0){
echo "<div>エラー</div>";
} else { echo "<div>$i</div>";
}
$x = array( $a , $b , $c , $d , $e , $f , $g , $h ,$i );
echo " 最大値: " .max($x). "<br />\n";
echo " 最小値: " .min($x). "<br />\n";
0668nobodyさん
2009/07/12(日) 23:06:46ID:???0669nobodyさん
2009/07/13(月) 02:32:15ID:???受けてたとしたらこの段階でこんな問題出した教師が悪い
0670nobodyさん
2009/07/13(月) 11:10:34ID:???function は 一部の値だけを変えて同じ処理が続く場合に使います。
>>666-667を良く見てみると、同じ記述が見つかりますね。
まずは、共通化できる処理をfunction化してみましょう。
ループ(for while fareach)は、
一部の値を変化させながら同じ処理を繰り返すときに使います。
同じような命令が繰り返している箇所をループ化してみましょう。
0671nobodyさん
2009/07/13(月) 18:25:41ID:???実際のフルパスを書き換えないでテストできる
フリーの開発ツールを前に何かで見つけたのですが
ご存じないでしょうか?
0672nobodyさん
2009/07/13(月) 18:29:50ID:???どうすればいいの?
0673nobodyさん
2009/07/13(月) 19:15:29ID:???パスは設定ファイルに入れておけばいいじゃない。
完全一致を期待してるとカスタマイズとかのときにも
パスの全チェックをしなきゃいけなくなるから面倒だよ。
または、Windows/OSXにもそれぞれ仮想環境ツール
が出ているから、仮想環境ツールに、お目当てのOS
を入れて、Explorer/Finderからコードを更新できるよう、
Sambaあたりを入れて動かしておけばいいかと。
0675nobodyさん
2009/07/13(月) 21:11:07ID:???php.iniで簡単に出来ました。
ただすべてのページにbase hrefを入れているので階層めぐりは無理でしたorz
どこかにコールバック関数と連携させてうまく開発出来る海外のツールがあったと思うんだけどなぁ。。
もう一度探してみます。ありがとうございました。
0676nobodyさん
2009/07/15(水) 03:07:14ID:???[質問] メンバ関数をメンバ変数の連想配列にぶち込みたい。
※2が通るような使い方をしたいのですが、やりかたをご教授いただけませんでしょうか、、、。
----------------------------
※1 OK
function HogeFunc {
echo "Called HogeFunc1";
}
class HogeClass1{
public function Action() {
foreaech( $m_Array as $key => $value ) {
$value();
}
}
$m_Array = array( "HOGE_TAG", "HogeFunc1" ); //! 呼び出しOK
};
----------------------------
※2 こいつはNG
class HogeClass2 {
public function Action() {
foreaech( $m_Array as $key => $value ) {
$value();
}
}
public static function HogeFunc2 {
echo "Called HogeFunc2";
}
$m_Array = array( "HOGE_TAG", "HogeClass2::HogeFunc2" ); //! 呼び出すとエラー
}
※※エラー内容※※
Fatal error: Call to undefined function HogeClass2::HogeFunc2() in ....省略
----------------------------
0677nobodyさん
2009/07/15(水) 03:15:04ID:???0678nobodyさん
2009/07/15(水) 03:16:29ID:???色々ひどい。HOGE_TAG関数もないし
0679nobodyさん
2009/07/15(水) 05:17:03ID:???0681nobodyさん
2009/07/15(水) 15:59:14ID:???0682nobodyさん
2009/07/16(木) 17:37:24ID:???全く繋がらないんだが俺だけかな?
0683nobodyさん
2009/07/16(木) 18:39:37ID:???jp.php.net jp2.php.netとかはつながった
0685質問です
2009/07/22(水) 01:15:02ID:???他ページにおいてるphpを読み込むには
どうしたらいいですか?
いまはとりあえず、インラインとかobjectタグで
呼び出しています
ほかに良い方法があればお教えください
0687nobodyさん
2009/07/22(水) 16:32:04ID:???$ar = array(1,2); とすると
Array ( [0] => 1 [1] => 2 ) と表示されるのですが、
$date = "1,2";
$ar = array($date); とすると
Array ( [0] => 1,2 ) と表示されてしまいます。
$dateにはテキストボックスから自分で数字とコンマを入力して代入するようになっているのですが、
これらを配列として扱うようにするには、どのように記述すればよいのでしょうか。
申し訳ありませんがよろしくお願いします。
0688nobodyさん
2009/07/22(水) 17:05:38ID:???while ($i == 0){
$date1 = mt_rand(0,1000);
$date2 = mt_rand(0,1000);
if ($date1 == $date[0]){
if ($date2 == $date[1]){
break;
}
}
}
$ar = array($date1,$date2);
0689687
2009/07/22(水) 17:05:52ID:???$ar = array($date); を
$ar = explode(",", $date); とすることでうまく動きました。
お手を煩わせて申し訳ありませんでした。
0692nobodyさん
2009/07/23(木) 15:34:36ID:???$this->mail = "メアド";
$this->tel = "電話";
などとあった場合、$thisの配列の中身を全部一括出力したい場合どうすればよいでしょうか
0693nobodyさん
2009/07/23(木) 15:39:20ID:???ちなみに配列じゃないけどね
0695nobodyさん
2009/07/23(木) 16:51:40ID:???入力画面に戻って修正箇所を再入力、というような普通のフォームを作っているのですが、
修正入力のときにフォームのリセットボタンが動作しません(全消去ではなくセッションで渡された内容に戻ってしまう)
スクリプトの挙動としては作った通りなので当然なんですが、機能としてどうも違うような気がします
何か解決方法はないでしょうか
0696nobodyさん
2009/07/23(木) 17:44:36ID:???0697nobodyさん
2009/07/23(木) 17:57:10ID:???0698695
2009/07/23(木) 18:08:13ID:???0699nobodyさん
2009/07/23(木) 22:50:23ID:???Apacheを入れたPCでは現在使えています。
0700nobodyさん
2009/07/23(木) 23:04:04ID:???0701nobodyさん
2009/07/23(木) 23:49:44ID:???パスphp.exe -l "%1"
これでダメなのです。
Apacheを入れてるときは動いてたのですが
0702nobodyさん
2009/07/24(金) 10:45:01ID:???0703nobodyさん
2009/07/24(金) 18:48:34ID:???としてフォームからPOSTされた中身を一括して$_SESSION["input"]に放り込んでるんですが、
さらにそれを一括してhtmlspecialcharsする方法はないでしょうか
現状べた書きでずらずらっと書いてるんですがどうも美しくなく・・・
PHP5
0704nobodyさん
2009/07/24(金) 18:57:24ID:???0705nobodyさん
2009/07/24(金) 19:15:54ID:???if (is_array($data)) {
return array_map('h', $data);
}
else {
return htmlspecialchars($data, ENT_QUOTES);
}
}
0706nobodyさん
2009/07/24(金) 19:49:53ID:???0707nobodyさん
2009/07/24(金) 20:12:12ID:???ありがとうございます
勉強がてら意味を追いながら似たような関数も合わせて調べてるんですが、
addslashes($data);
とするとフォームに"が入力されたとき\\\"と\が3つ増える怪現象にはまって脱線中ですw
ググろうにも\がGoogleにエスケープされるというw
>>706
本当にやりたいのはそれなんですが、出力用データがHTMLを含んでるので表示がおかしくなってしまうんです
0710nobodyさん
2009/07/25(土) 03:07:01ID:???function h($data){
if(is_array($data)){
return array_map('h', $data);
}else{
return stripslashes(preg_replace("/&/i", "&", htmlspecialchars($data ,ENT_QUOTES, "SJIS")));
}
}
呼び出し箇所
if(get_magic_quotes_gpc()){ $_SESSION["input"] = h($_SESSION["input"]); }
動いてはいるものの正直自信全くナシですw
>>709
こっちもできるようになりたくて試行錯誤3時間
今日はできませんでしたorz
明日また粘ります
出力したいデータを詰め込んだ変数の中身はこんなかんじです
$output = "
<table><tr>
<td>名前</td>
<td><input type=\"text\" name=\"name\" value=\"".$_SESSION["input"]["name"]."\" /></td>
</tr></table>
";
0712nobodyさん
2009/07/25(土) 06:09:00ID:???<?php
/* 〜前処理〜 */
$data['name'] = htmlspecialchars($_SESSION["input"]["name"]);
?>
<table><tr>
<td>名前</td>
<td><input type="text" name="name" value="<?php echo $data['name']; ?>"/></td>
</tr></table>
0713nobodyさん
2009/07/25(土) 09:38:50ID:njtiSjD4htmlspecialcharsの仕様
0714nobodyさん
2009/07/25(土) 17:11:32ID:???おかげさまでできました
$_SESSIONの中身を一度別の配列に放り込むのは
$_SESSIONの中身をいじるべきではないから
と解釈しましたがよいでしょうか
>>713
ググってさっそく調べました
「そういうもの」と考えるしかないみたいですね・・・
ところで、>>710で書いたfunctionなんですが、
フォームに\を記入するとstripslashesの作用で\が消えてしまうというトラブルに見舞われてます
該当部分の処理を順番に並べると下のようになるのですが
$data = htmlspecialchars($data ,ENT_QUOTES);
$data = preg_replace("/&amp;/i", "&", $data);
//*//
$data = stripslashes($data);
これだと\が消えてしまうので、上の//*//の部分に
$str = preg_replace("/\\\\/i", "\\", $str);
を入れてstripslashesをだまして強引に解決している状況です
なんか違和感があるのですがこれでよいものでしょうか
0715nobodyさん
2009/07/25(土) 17:16:16ID:???0716nobodyさん
2009/07/25(土) 17:35:20ID:???0717nobodyさん
2009/07/25(土) 17:48:38ID:???0718nobodyさん
2009/07/25(土) 17:49:57ID:???あと野村監督じゃないけどバグに不思議のバグなしなので
「なぜかこうなる」はちゃんと原因探ったほうがいい
0719nobodyさん
2009/07/25(土) 17:58:30ID:???なってます・・・
支障のないところまで組み上げて1度実装用のサーバーでこの部分必ずテストしてみます
とりあえず保留にして内容送信の機能先に作っちゃいますね
セッションすら閉じてない状況なのでw
0720nobodyさん
2009/07/25(土) 19:12:06ID:y2BFJd1Aどうしても配列の深さだけ処理を繰り返す必要があります。再帰的に繰り返すにはどうしたらいいのでしょうか。
この例だと配列を2階層しか整形出来ない
function makejson($array){
$return = "{\n";
foreach($array as $key => $value){
$return .= "\t".$key.":";
if(is_array($value)==true){
$return .= "{\n";
foreach($value as $key => $value_2){
$return .= "\t\t".$key.":";
$return .= "\"".$value_2."\",\n";
}
$return .= "\t},\n";
}else{
$return .= "\"".$value."\",\n";
}
}
$return .= "}";
echo $return;
exit;
}
0721nobodyさん
2009/07/25(土) 19:12:30ID:y2BFJd1A$array = array{
'example' => array{
'test1' => 'value1',
},
'example1' => 'value3',
}
makejson($array);
出力例
{
example : {
test1 : "value1",
},
example1 : "value3",
}
よろしくお願いします。
0722nobodyさん
2009/07/25(土) 19:25:21ID:???http://www.php.net/manual/ja/function.json-encode.php
0723nobodyさん
2009/07/25(土) 19:48:52ID:y2BFJd1A0724719
2009/07/26(日) 17:13:42ID:???その後メール送信機能はすったもんだありつつなんとかなって、
実装サーバーで>>715,717について実装サーバーでテストしたら
stripslashesがなくても問題ない(php.iniの設定が鯖とローカルで違った)ことが判明しました
おかげさまで機能は全部完成しトラブルも起きてません
ところで、ソースを最終チェックしてるうちに、
セッションを使ってるのにもかかわらずセッションIDを何にも利用してないことに気づいたんですがいいんでしょうかw
具体的にはhiddenで各画面にセッションネームとセッションIDを渡してはいるものの、ただ渡してるだけなんです
URLの後に付加してるわけでもなく、セッションIDを評価する条件分岐があるわけでもなく・・・
クッキーオフにしても普通に動いてるんですが、なんか根本的なところでおかしかったりしないでしょうか
0725nobodyさん
2009/07/27(月) 11:41:33ID:???0726nobodyさん
2009/07/28(火) 18:19:31ID:???spam扱いをなるべく避けるため第5引数で-fパラメータのReturn-Pathを設定したいのですが、
$r_path ='-f [email protected]';
mb_send_mail($to,$sub,$body,$header,$r_path);
としてもエラーが出て送信できません
第5引数を外せば送信できるので第5引数が原因だと思うのですが、
対策はないでしょうか
php.iniの設定は以下の通りです
sendmail_from → no value
sendmail_path → /usr/sbin/sendmail -t -i
0728nobodyさん
2009/07/28(火) 21:42:53ID:???$password = sha1(md5(md5(sha1(md5(sha1(sha1(md5($_POST[password]))))))));
0729nobodyさん
2009/07/28(火) 21:45:07ID:???0730728
2009/07/29(水) 00:14:01ID:???0731nobodyさん
2009/07/29(水) 00:18:36ID:???パスワードを推測されにくくしてからDBとかファイルとかに記録して
おきたいんじゃないかな。パスワード文字列そのものは保存しない。
で、MD5とsha1で滅茶苦茶にした文字列をファイルとかDBに保持し
ておく。
次にパスワードが合致しているかどうかを確認する場合、同じよう
に、入力した内容をMD5とsha1で滅茶苦茶にした文字列と合致する
かどうかをチェックする。これなら、DBやファイルに保存された文字列
を盗まれても、本物のパスワードは推測しにくいわけで。
0732nobodyさん
2009/07/29(水) 00:30:42ID:???0733nobodyさん
2009/07/29(水) 00:34:01ID:???0734nobodyさん
2009/07/29(水) 00:52:28ID:???0735nobodyさん
2009/07/29(水) 00:55:37ID:???ハッシュのように、曖昧な記憶が残っているだけさ
0738nobodyさん
2009/07/29(水) 09:39:56ID:???0739nobodyさん
2009/07/29(水) 13:45:36ID:???0740nobodyさん
2009/07/29(水) 14:02:50ID:???ローカル環境で送信フォームをテストすると、
同一ページ内にある全てのリンクのURL末尾に自動的に
セッション名とセッションIDが付加されてしまいます
レンタル鯖上では起こらない現象なのですが、
どうしてローカルでだけ起こるのでしょうか
0741nobodyさん
2009/07/29(水) 14:11:35ID:???session.use_cookies
session.use_only_cookies
session.use_trans_sid
これらの値をphpinfoで比較してみて。
session.use_trans_sidが有効だと、
coockieが使えない時に、URLの末尾に自動的にセッションIDを付加する。
0743nobodyさん
2009/07/29(水) 14:57:52ID:YfqDSQPl!preg_match("/^$type\.\w+\.php$/", $entry)
0744nobodyさん
2009/07/29(水) 16:59:17ID:???$typeで始まって、そのあとピリオド、そのあとに英数字が1文字以上続いて.phpで終わる
ちょっと質問なんだけど、オブジェクトのデストラクタ中で__getとか__setとかのマジックメゾットが正常に機能しない挙動があるんだけど、これってマジックメゾットだけなのか、他のメゾットも正常に機能しない可能性があるのか・・・
一応テストした限りでは正常な機能を失ったのは__getと__setだけなんだけど・・・
0747nobodyさん
2009/07/31(金) 09:32:14ID:???0748nobodyさん
2009/07/31(金) 18:48:49ID:???0749nobodyさん
2009/07/31(金) 19:11:43ID:???ADVゲームの画面切り替えに使っているのなら、
それほど負荷はかからない。
リアルタイムの多人数同時プレイゲームのデータ
を常に送信しつづけるサーバーとしてPHPを使って
いるのなら、負荷はかなりのものになる。
0750nobodyさん
2009/07/31(金) 20:55:23ID:???ありがとうございます
0751nobodyさん
2009/08/01(土) 23:44:33ID:FfAyQxIrやっと表示できたソースがあったんですが、↓のやりかただと更新時間順に表示されなくて、
URL順になってしまいます。
$rss = array('http://○○','http://○○','http://○○');
これ以上ぐぐっても答えが出そうにないのでお知恵をお貸しください
■ このスレッドは過去ログ倉庫に格納されています