【PHP】下らねぇ質問はここに書き込みやがれ 40
■ このスレッドは過去ログ倉庫に格納されています
00011様
2007/02/22(木) 22:37:41ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 39
http://pc10.2ch.net/test/read.cgi/php/1171280039/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0232nobodyさん
2007/02/25(日) 21:08:21ID:???マジッククォートはoffだし、onでもフォーム内にバックスラッシュが表示されるだけでしたが。
そうではなくて、例えばユーザーがフォーム内に「Arcator"bar"Baalouse」と入力したら、まったく
同じものが修正要求のメッセージと共に表示されないと困るのです。
0233nobodyさん
2007/02/25(日) 21:10:16ID:???0234nobodyさん
2007/02/25(日) 21:11:51ID:???0235nobodyさん
2007/02/25(日) 21:13:59ID:???何をどうしたくて現状どうなってるのかサッパリわかんねえ
0236nobodyさん
2007/02/25(日) 21:20:20ID:IYDfC2eT$val = ""e;";
<input type="text" name="test" value="{$val}">
↑これでは変換前の実体参照がそのまま表示されるだけですね
$val = '"';
<input type="text" name="test" value="{$val}">
↑これでもフォームが途中で途切れてしまいますね
フォームのデフォルトバリュー内に " や ' が混在するとき、どうすれば正常な
表示が可能なのか、というのが質問の趣旨です。マジッククォートやhtmlspecialchars
では、この問題を解決できないと思うのですが。
0237nobodyさん
2007/02/25(日) 21:26:20ID:???\/ ● 、_ `ヽ ======
/ \( ● ● |つ
| X_入__ノ ミ
、 (_/ ノ /⌒l
/\___ノ゙_/ / =====
〈 __ノ ====
\ \_ \
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
0239nobodyさん
2007/02/25(日) 21:30:57ID:???\ ∩─ー、 ====
\/ ● 、_ `ヽ ======
/ \( ● ● |つ
| X_入__ノ ミ
、 (_/ ノ /⌒l
/\___ノ゙_/ / =====
〈 __ノ ====
\ \_ \
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
0240nobodyさん
2007/02/25(日) 21:33:14ID:???quotって事か?
何言ってるのか本当に意味わからん
0241nobodyさん
2007/02/25(日) 21:39:37ID:CDvbRnfg戻り値がオブジェクト(http://jp2.php.net/manual/ja/language.types.object.php)の
型名はどうなるのでしょうか?
それから、PHPの標準関数はどこに定義されているのでしょうか?
見てみたいのですが、見られますか?
0242nobodyさん
2007/02/25(日) 21:44:55ID:???じゃ引数じゃないか?
@return foo
だと思うが
0243nobodyさん
2007/02/25(日) 21:47:23ID:???PEARの書式でもながめてみたら?
関数はPHPのソースにあるでひょ
Cで書かれてるはずだけど
0244nobodyさん
2007/02/25(日) 21:56:00ID:???http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.return.pkg.html
0245241
2007/02/25(日) 21:57:24ID:???@returnでした。
>>243
なるほど。素直に'object'ですね。
参考にPEARを覗いてみます。
>関数はPHPのソースにあるでひょ
>Cで書かれてるはずだけど
grepで検索して覗いてみます。
ありがとうございました。
0246nobodyさん
2007/02/26(月) 01:29:31ID:MqypCXgAテーブル名:list_table
-----------
id | name |
-----------
1 | tato |
-----------
2 | hanako|
-----------
これをWEBフォームよりnameを一括変更するのが目的です。
やり方としては全レコードをmysql_fetch_assocで抽出し、
フォーム部分<input name="name" type="text">のvalue部分に表示させ、
そのフォーム部分の名前を変えて送信すれば、データベースのレコードも変わる、という感じです。
各個人を一人ずつ変える事なら出来たのですが、
一括変更がなかなか出来ません・・・。
どなたかお知恵をお貸し下さい。
宜しくお願いします。
次に現在の内容を晒します。
0247246
2007/02/26(月) 01:30:02ID:MqypCXgA//php該当部分抜粋
$editFormAction = $_SERVER['PHP_SELF'];
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "edit")) {
$updateSQL = sprintf("UPDATE list_table SET name=%s WHERE id=%s",
GetSQLValueString($_POST['name'], "text"),
GetSQLValueString($_POST['id'], "int"));
mysql_select_db($database_MyDB, $MyDB);
$Result1 = mysql_query($updateSQL, $MyDB) or die(mysql_error());
}
//フォーム部分抜粋
<form method="post" name="edit" action="<?php echo $editFormAction; ?>">
<?php do { ?>
<?php echo $row_Recordset['id']; ?>
<input type="text" name="name" value="<?php echo $row_Recordset['name']; ?>">
<input type="hidden" name="id" value="<?php echo $row_Recordset['id']; ?>">
<?php } while ($row_Recordset = mysql_fetch_assoc($Recordset)); ?>
<input type="submit" value="送信"><input type="hidden" name="MM_update" value="edit">
</form>
如何でしょうか?
宜しくお願いします。
0248nobodyさん
2007/02/26(月) 01:37:37ID:???0250nobodyさん
2007/02/26(月) 03:32:17ID:???include "hogehoge.php"; ってことか。
0251nobodyさん
2007/02/26(月) 03:33:57ID:???0253nobodyさん
2007/02/26(月) 04:15:31ID:???Received:の経路情報だけ?
他にも詐称が不可能なヘッダ情報ってある??
0254nobodyさん
2007/02/26(月) 04:58:19ID:7mBYKw3Tたとえば、
$var = "abc";
preg_match('/^aaa{$var}zzz/', $str, $result);
のように、$varを正規表現の中に入れて中身を展開させたいのですが・・・
0255nobodyさん
2007/02/26(月) 05:02:33ID:???0256nobodyさん
2007/02/26(月) 05:02:35ID:???アホだろ
0258nobodyさん
2007/02/26(月) 05:49:25ID:???0259nobodyさん
2007/02/26(月) 05:58:24ID:???それがここの仕様
0260254
2007/02/26(月) 05:59:13ID:7mBYKw3T254で記載したコードで試したうえで出来ないので質問いたしました。
>>257
あっ、すいません、ここには手打ちで書いたのでうっかりシングルにしちゃいましたが、
実際のソースのほうではダブルで括ってます。
でも正規表現では{}は意味を持つので、変数を囲うのに使えないし・・・
0261nobodyさん
2007/02/26(月) 06:04:57ID:???使えるって。先に変数展開されてから関数に渡されるんだから。
試してもいないで言ってるだろう、お前。
つか、正規表現の「{}」って何?
0262261
2007/02/26(月) 06:12:37ID:???でも問題ないよ。たとえば
$s = "aaaabbbcccddd";
$x = "bbb";
print preg_replace("/a{3}{$x}c{2}/", "ZZZ", $s);
というコードで結果は
aZZZcddd
ってなるから。
0263nobodyさん
2007/02/26(月) 06:43:34ID:xTDxI0kc$name = "a'b";
select * from table where name = '$name';
PHPでこれを実行するとちゃんとname = a'bが取得できます。
しかしこれは
select * from table where name = 'a'b';なわけで、危険なのでは?と思い質問しました。
magic_quotes_gpc は Offです。
問題なしでしょうか?
0264263
2007/02/26(月) 06:46:01ID:xTDxI0kc↑半角&#39bです。
0265nobodyさん
2007/02/26(月) 07:09:31ID:???0268nobodyさん
2007/02/26(月) 07:33:25ID:???> PHPでこれを実行するとちゃんとname = a'bが取得できます。
どう実行したのか具体的に書いてよ。
単にライブラリの方で自動エスケープしてくれただけじゃないの?
0269nobodyさん
2007/02/26(月) 07:38:00ID:???そしたら、速攻でSQLインジェクションやってあげるから。
0270nobodyさん
2007/02/26(月) 07:40:24ID:???> select * from table where name = 'a'b';なわけで、危険なのでは?と思い質問しました。
危ない以前にSQLシンタックスエラーで実行できない。
0271263
2007/02/26(月) 07:47:26ID:xTDxI0kc正確には
$name = "a'b"; ではなく
$nameはPOSTまたはGETで送られたa'bです
0272263
2007/02/26(月) 07:52:29ID:xTDxI0kc↑GET
0273263
2007/02/26(月) 07:59:42ID:xTDxI0kc間違いです。勘違いしてました。
忘れてください。
0275nobodyさん
2007/02/26(月) 08:55:20ID:???htmlspecialchars($変数, ENT_COMPAT, EUC-JP);
第二引数をつけないと脆弱性がある。 190が悩んでるような"や'を入力された場合のことね。
http://au.php.net/manual/ja/function.htmlspecialchars.php
0277nobodyさん
2007/02/26(月) 09:11:49ID:???<input type="text" name="name" value="<?php echo $row_Recordset['name']; ?>">
を
<input type="text" name="name[<?php echo $row_Recordset['id']; ?>]" value="<?php echo $row_Recordset['name']; ?>">
にする。
で、$_POST['name'][1]〜$_POST['name'][最後]までループで回して、毎回UPDATEする必要がある。
246のソースのままじゃ、1人分しか対応できない。
<input type="hidden" name="id">は消す。
mysql_select_db($database_MyDB, $MyDB);
foreach ($_POST['name'] as $key => $value) {
$updateSQL = "UPDATE list_table SET name = '" . $_POST['name'] . "' WHERE id = " . ($key + 1);
$Result1 = mysql_query($updateSQL, $MyDB) or die(mysql_error());
unset($updateSQL);
}
でいいんじゃないかな。
一括で変換したい場合は、フォーム1つの中で、idとnameの組み合わせをレコード数分見つけられないといけないから、作り方に工夫が必要。 1フォーム1レコードだったらhiddenでidとか埋め込めるけどね。
0278275
2007/02/26(月) 09:13:50ID:???ENT_QUOTESだ。
0279nobodyさん
2007/02/26(月) 10:53:00ID:???普通に考えたらGETだろうとPOSTだろうと「a'b」は「a'b」のままなんだが、
ひょっとしてテーブルに格納されてるのも検索で使った入力値も
「a'b」じゃなく「a&#39b」だって話か?
画面で見ると where name='a'b' に「見える」というだけで実は where name='a&#39b' ?
じゃあ一体何の問題が言うんだね、君は。
0280nobodyさん
2007/02/26(月) 11:11:07ID:???0281nobodyさん
2007/02/26(月) 11:59:30ID:???HTMLの書き方についてはネットでも自動チェックできるところがあるけど、
PHPについては、どういう書き方が正しいのか?処理がスムーズに行われるのか?
について、いつも悩む。書き方によってパフォーマンスも違うだろうし。
0282nobodyさん
2007/02/26(月) 12:18:42ID:???プログラムとHTMLは違う。
PHPは構文エラーがあれば教えてくれるんだし。
コーディングなら、他人が書いたソースでも読んでみて
参考になるところがあれば、どんどん真似をして自分のものにしなさい。
コーディング規約を読んでみるのもよし。
0284nobodyさん
2007/02/26(月) 12:19:19ID:???ttp://www.e777.co.jp/perlcw/perlcw.html
まあIDE使ったほうが良さげ
0285284
2007/02/26(月) 12:20:51ID:???昼休み暇だからって被りすぎだろ コラー!
0287nobodyさん
2007/02/26(月) 12:44:43ID:eLbz34G20288nobodyさん
2007/02/26(月) 12:59:51ID:???0289nobodyさん
2007/02/26(月) 13:04:35ID:???これをそのまま?と表示させたいときどうしたらいいでしょうか?
0290nobodyさん
2007/02/26(月) 13:06:58ID:???関数でべた書きしてました・・
出直してきます。
0291289
2007/02/26(月) 13:07:28ID:???これをそのまま♥と表示させるにはどうしたらいいですか?
0293nobodyさん
2007/02/26(月) 13:15:59ID:blVK8UOLそれぞれの用途に合わせたテンプレートを読み込む仕様にしたいと思っています。
例えば、最初にアクセスした時にform.phpというテンプレートを読み込むとします。
必須項目をすべて入力したら、次のconfirm.phpを読み込む。
入力してなかったら、form.phpを再度読み込んでエラーをフォームの上に表示する。
ここまではよくあるパターンだと思うのですが、入力エラーの場合
最初に入力した内容もリセットされます。
form.php内のフォームを
<input name="test" type="text" value="<?=$_POST["test"]?>">
とすれば元の入力値も表示されますが、ラジオボタンやチェックボックスの場合は
このような方法は使えません。
そこで質問ですが、確認を入力フォーム上で行う場合、どのような
構築の仕方・ソースの書き方をすればいいのでしょうか?
0297289
2007/02/26(月) 13:27:51ID:???これをそのまま♥と表示させるにはどうしたらいいですか?
<?php
$keyword = $_GET['keyword'];
echo $keyword;
?>
これだとうまくいきませんでした
0298nobodyさん
2007/02/26(月) 13:29:24ID:???0299nobodyさん
2007/02/26(月) 13:29:55ID:???0300293
2007/02/26(月) 13:33:31ID:???テキストボックスやテキストエリアの場合、それでもいいのですが、
チェックボックスやラジオボタンの場合は、どうするのでしょうか?
if ($_POST["items"]=="あああ") {
echo <input name="items" type="radio" value="あああ" checked="checked" />
} else {
echo <input name="items" type="radio" value="あああ" />
}
みたいなのを数だけ用意するのでしょうか?
でも、それだとソースが増えすぎる気が。。
0301289
2007/02/26(月) 13:42:03ID:???if ($_POST["items"]=="あああ") {
$aaa = "checked";
}
echo <input name="items" type="radio" value="あああ" $aaa />
0302293
2007/02/26(月) 13:53:37ID:???じゃ、テキストボックスが10個あったら
if ($_POST["items"]=="あああ") {
$aaa = "checked";
}
を数だけ用意する事になりますよね?それだとソースが増えすぎる気が・・。
(それが普通の書き方なら、分かるのですが・・・
0303293
2007/02/26(月) 13:54:11ID:???↓
じゃ、チェックボックスが10個あったら
すみません、書き間違いです。
0304289
2007/02/26(月) 14:06:39ID:???case "あああ" : $aaa = " checked"; break;
case "いいい" : $iii = " checked"; break;
case "ううう" : $uuu = " checked"; break;
・
・
・
}
増えすぎますね でもこれしかわかりません ごめん
詳しい人いたらよろしくです
>>297の質問もよろしくです
0305nobodyさん
2007/02/26(月) 14:17:13ID:???投稿された、及びセッションからの値を
デフォルト設定arrayに流してるなあ
0306nobodyさん
2007/02/26(月) 14:28:15ID:???そのHTML自体をPHPで生成して、checkedにしたい項目だけ置換して使うとか?
0307293
2007/02/26(月) 14:35:58ID:???ありがとうございます。
自分でも色々考えたりググったりしているのですが、
どうしても問題が解決しません。
今回のケースでは「登録時」ですが、「編集時」はどうなるのか?
とか考えると、SESSIONで保持する方法は合わないと思うんです。
フルコントローラぽっく、ひとつのファイル上でテンプレートを読み込む
形を考えてるのですが、現状では難しそうなので、個々のファイルに
アクセスする方法に変えた方がいいかもしれませんね。
0309289
2007/02/26(月) 14:58:22ID:???$keyword = $_GET['keyword'];
$keyword = rawurlencode( "$keyword" );
echo $keyword;
?>
>>308
ありがとうございます だめでした・・・
0310nobodyさん
2007/02/26(月) 15:03:13ID:???ちがうよ。元のURLをエンコードしないと。
http://localhost/test.php?keyword=%26hearts%3b
0312nobodyさん
2007/02/26(月) 15:22:45ID:???($_get[type]==form){$tpl='form.php'}
白紙表示 :セッション[formdata]が在ればセッションから表示
↓
ポスト->セッションへ格納
xxx.php?mode=regist&type=confirm (確認画面表示
($_get[type]==confirm){$tpl='confirm.php'}
エラー戻りはエラーメッセをセッション[error等]へ格納してformへ、 OKで完了はcomplateへ
xxx.php?mode=regist&type=complate (完了
保存処理&リダイレクト等
編集は
xxx.php?mode=modify&type=
(略
こんな感じじゃないのかねえ
なんとでもできそうな・・
<文法適当です
0313289
2007/02/26(月) 15:24:13ID:???違います 説明が下手でごめんなさい 元のURLは
http://localhost/test.php?keyword=♥
で ♥と表示させたい です
0317nobodyさん
2007/02/26(月) 16:00:25ID:???RFC1738を参照: http://www.faqs.org/rfcs/rfc1738
URIに含むことが許されていない文字は、全てRFC1738に基づいて
URLエンコードしなければならない。
もちろん「?」もそのままではURIに含むことができないので、URLエンコード
する必要がある。rawurlencode("?") の結果をパラメータに指定するだけ。
0318317
2007/02/26(月) 16:01:37ID:???脳内変換しておいてくれ。
0319nobodyさん
2007/02/26(月) 16:05:19ID:???>>293=>>297かよ
checkboxの話はどうなったんだ
ったく手当たり次第に思いつくまま質問しやがって
0320293
2007/02/26(月) 16:08:21ID:???ありがとうございます。セッションに関してですが、
if (isset($_POST["name"])) {
$_SESSION["name"]=$_POST["name"]; //フォームの数だけ用意
}
みたいな感じになるのでしょうか?
それとも一括でポストをセッションに格納するのでしょうか?
>>315
自分で検討してみたところ、チェックボックスやラジオボタンについては
if (isset($_POST["name"]) {
$checked = "checked=checked";
}else{
$checked="";
}
みたいなのでいけました。(チェックボックスなら配列に入れてarray_search)
ただ、あまりスマートじゃありませんね。求める方法としては
312さんが書かれているような方法が最適だと思っています。
}
0321293
2007/02/26(月) 16:09:32ID:blVK8UOLいえ。自分はひとつの事しか質問してません。
それにパラメーターにハートは無理だと思いますし・・。
0322nobodyさん
2007/02/26(月) 16:10:05ID:Sd3D9dFcと思ったのですが、「Fatal error: Call to undefined function」が返ってきます。
どうすればできるのでしょうか? PHPのバージョンは PHP 4.4.4 です。
class MyClass
{
function foo()
{
return "にゅるぽ";
}
function bar()
{
echo $this->foo()
}
}
0323nobodyさん
2007/02/26(月) 16:11:52ID:???そりゃ、QueryStringから抽出すればできるけど
そういう質問じゃないだろ。だったらURLエンコードするべき。
そんなURLが来るようなら元のURLを作ってる部分のバグ。
ためしに&heartsでググったらURLがどうなるかやってみろ。
0324291
2007/02/26(月) 16:22:03ID:???>そういう質問じゃないだろ。
最初からそういう質問ですけど・・・
URLはエンコードされてることくらいわかってるつもりですごめんなさい
0325nobodyさん
2007/02/26(月) 16:27:21ID:???>最初からそういう質問ですけど・・・
自分で書いた>>297のソース見てみろよ。
普通にGETパラメータから取得しようとしてるじゃんか。
あれでやるならURLエンコードするしかないし
QueryStringから抽出するなら正規表現なり、substrなりご自由に。
>URLはエンコードされてることくらいわかってるつもりですごめんなさい
わかってるやつが書く文章とは思えない。「されてる」んじゃなくて「する」んだから。
0326nobodyさん
2007/02/26(月) 16:37:08ID:???0327291
2007/02/26(月) 16:42:02ID:???QueryStringで取得してもGETで取得してもrawurlencodeするでしょ
>ためしに&heartsでググったらURLがどうなるかやってみろ。
URLはエンコードされてることくらいわかってるつもりですごめんなさい
googleに「されてる」と言う意味です
0328nobodyさん
2007/02/26(月) 16:48:37ID:???何度も言うけど、URIに含まれてはいけない文字は、URLエンコード
する必要があるんだってば。
パラメータで指定する際に、
http: //localhost/test.php?keyword=%3F (Shift-JISの場合)
0329291
2007/02/26(月) 16:53:57ID:???わかってます 何度も言うけどそれはわかってます
しかしもし特殊文字を入れられたときそれをちゃんと表示させたいのです
完璧を求めちゃいけませんか?
0330nobodyさん
2007/02/26(月) 16:54:01ID:???>QueryStringで取得してもGETで取得してもrawurlencodeするでしょ
この文章も意味がわからないし・・・
1.$_GET["target"]で取得する
元のテキストをrawurlencodeしてください
2.QueryStringから取得する
$_SERVER["QUERY_STRING"]を使って
正規表現、strpos、substrなどで抽出してください。
これのどちらかです。好きなほうを選んでください。
個人的にはrawurlencodeするのをそこまで渋る理由がわからない。
0331291
2007/02/26(月) 17:06:08ID:???違います URLに特殊文字を直接入力されたとき
置換するとそのまま表示できるので
特殊文字全部を置換しなければいけないのでしょうか?
特殊文字全部を置換するとできますが、他に簡単な方法はないのでしょうあk?
■ このスレッドは過去ログ倉庫に格納されています