【PHP】下らねぇ質問はここに書き込みやがれ 4 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/03/12(土) 23:25:33.88ID:j4grSBgsまず読むこと【PHPマニュアル】
http://www.php.net/manual/ja/
前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 3
http://echo.2ch.net/test/read.cgi/tech/1447495088/
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0002デフォルトの名無しさん
2016/03/12(土) 23:27:11.25ID:j4grSBgs【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・ 解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・ 誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・ SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0003デフォルトの名無しさん
2016/03/13(日) 18:01:24.11ID:9dwDTtH+■本家マニュアル http://www.php.net/manual/ja/
■日本PHPユーザ会 http://www.php.gr.jp/
■PHPNG https://wiki.php.net/phpng
■PEARマニュアル http://pear.php.net/manual/ja/
■メーリングリスト http://ml.php.gr.jp/mailman/listinfo/
■ZFマニュアル http://framework.zend.com/manual/ja/
■Smartyマニュアル http://www.smarty.net/manual/ja/
(以下英語)
■Zend本家 http://www.zend.com/
■Zend Framework http://framework.zend.com/
■php | architect http://www.phparch.com/
■Smarty http://www.smarty.net
■Smartyマニュアル http://smarty.php.net/manual/en/
■PECL本家(英語) http://pecl.php.net/
0004デフォルトの名無しさん
2016/03/13(日) 18:29:54.00ID:kS6/ihj4$stmt = $pdo -> prepare($sql);の部分でエラーが出てしまいます。[42000]
改善策をお願いします。
$table = "$_GET['table']";
$clmname = '';
$valname = '';
foreach ($_POST as $key => $value) {
$clmname .= $key.", ";
$valname .= ":".$key.", ";
}
unset($key);
//末尾のコンマと空白削除
$clmname = substr($clmname, 0, -2);
$valname = substr($valname, 0, -2);
$sql = "INSERT INTO $table($clmname) VALUES($valname)";
$stmt = $pdo -> prepare($sql);
foreach ($_POST as $key => $value) {
$stmt -> bindValue(":$key", $clan_policy, PDO::PARAM_STR);
}
$stmt -> execute();
0005デフォルトの名無しさん
2016/03/13(日) 18:56:27.35ID:PAomMvmsとりあえずSQL文吐いてみ
というかそれ以前にテーブル名やらカラム名やらを外部入力で受け取るとか正気の沙汰じゃないから
0006デフォルトの名無しさん
2016/03/13(日) 19:23:29.33ID:kS6/ihj4$sqlは上記のような感じで、特に支障はない模様です。
※便宜上パラメーターを3つにしましたが、10ぐらいあり、内容もテーブル名によって変動します。
そのため自動作成したいと考えています。
foreachも間違っていたので修正しておきます。
foreach ($_POST as $key => $value) {
$stmt -> bindValue(":$key", ${$key}, PDO::PARAM_STR);
}
検索してみてもpdo文を自動作成するソースが見つからなかったため、
この方法はひょっとして非推奨なのでしょうか?
手動でも出来なくはない量なのですが、メンテナンス性や可読性のために挑戦してみました。
0007デフォルトの名無しさん
2016/03/13(日) 19:31:11.69ID:GjqBj5dI$stmt = $pdo -> prepare($sql);
$stmt = $pdo->prepare($sql);
0008デフォルトの名無しさん
2016/03/13(日) 19:40:29.09ID:GjqBj5dI{$table} ({$clmname}) VALUES ({$valname})";
0009デフォルトの名無しさん
2016/03/13(日) 20:27:39.52ID:PAomMvmsPHPのバージョン, 利用するRDBMSとバージョン。
名前付きプレイスホルダで42000エラーが発生することがあった。
その方法で自動生成を実装するとSQLインジェクションのいい的だぞ
自前で実装するならDataMapperでSQLをカプセル化する手法を採るべきだし, テーブルの変更が頻繁ならテーブル生成とActiveRecordクラス生成を同時に行うようにすべき(手動では弄らない)
あんまりテーブル構造変更が頻繁ならそもそも設計を見直すべきだろうが
何れにせよテーブル名を外部入力から受け取るなんてのはまともな実装とは言えない
0010デフォルトの名無しさん
2016/03/15(火) 00:55:48.95ID:vuaCyoYo0011デフォルトの名無しさん
2016/03/15(火) 01:00:58.09ID:Yu+x6j+10012デフォルトの名無しさん
2016/03/15(火) 01:39:32.63ID:XuEL3mf60013デフォルトの名無しさん
2016/03/15(火) 12:00:31.00ID:vuaCyoYo0014デフォルトの名無しさん
2016/03/15(火) 17:35:49.44ID:M/KZKru90015デフォルトの名無しさん
2016/03/15(火) 18:52:30.10ID:6Fnnrg8u0016デフォルトの名無しさん
2016/03/15(火) 19:07:10.09ID:Yu+x6j+10017デフォルトの名無しさん
2016/03/15(火) 19:47:53.75ID:0p8ka/G8javascriptに変える必要があるけど
0018デフォルトの名無しさん
2016/03/15(火) 20:20:47.01ID:61Q7YxSP0019デフォルトの名無しさん
2016/03/15(火) 20:39:21.88ID:O2FU5DmM0020デフォルトの名無しさん
2016/03/15(火) 21:49:01.86ID:6tnBTcMGNabetapって言うのがある。
これはexeには変換できないけど自分のソフトのようには見せれる
>>16
CGIは元々コマンド引数ないよ。
Nabetap使うと画面出てPHPとjavascript使えるよ
0021デフォルトの名無しさん
2016/03/15(火) 22:15:38.87ID:bRerDqNG泥臭く strtr かなんかでやるしかない?
0022デフォルトの名無しさん
2016/03/15(火) 22:26:34.65ID:Yu+x6j+1>>20
GETやPOST、それと考え方によっちゃcookieなんかも引数だろうというのはおいとくとしても
簡易Webサーバ&(IE利用の)簡易Webクライアントを「サーバなしのWindowsソフト」というのはどうなんだ
bcompilerって手もあるが
0023デフォルトの名無しさん
2016/03/15(火) 23:05:03.91ID:g1PqSQB6str_replace を使ってる。
%は\\%に置き換える。_は\\_に置き換える。
strtr でも同様だろう。
他にやりようが有れば知りたいね。
0024デフォルトの名無しさん
2016/03/16(水) 00:52:15.32ID:YUxkRKsrネットつながってなくても動くんならWindowsソフトでいいんじゃない?
0025デフォルトの名無しさん
2016/03/16(水) 01:20:47.41ID:BN+Lq3m+foreachとarray_*関数使うのはどっちが早いの?
例えばある配列から特定のキーと値だけを取り出す場合、
foreachで回して取り出すのか、array_searchで取り出すのかで処理スピードに差は出てくる?
0026デフォルトの名無しさん
2016/03/16(水) 01:22:13.55ID:W+A3q4l00027デフォルトの名無しさん
2016/03/16(水) 03:07:40.77ID:6pUenI4Fプロセス間通信にhttp使ったらそれはもうサーバなしのソフトとはいえないだろ的な?
0028デフォルトの名無しさん
2016/03/16(水) 09:42:43.04ID:31XCK0BE俺は関数あればそっち使って、問題ありそうなら回してるって基準だけでやってる。
よほど大きなデータじゃなければいちいち計測なんかしてない。
0029デフォルトの名無しさん
2016/03/16(水) 10:44:00.47ID:Ny+vSnKw関数があれば関数を使う
速度が要件を満たさない場合にボトルネックの発見と改善のために計測する
0030デフォルトの名無しさん
2016/03/16(水) 11:31:36.06データベースはデータベースで計測出来るし
0031デフォルトの名無しさん
2016/03/16(水) 13:01:21.01ID:uy33h+7U現在JavaScriptでロード時(リロード時)に特定のhtmlタグの値を書き換えるコードを使用しているのですが、訳あって使うことができなくなります
phpは使うことができるのですが、上記の動作と同じようなものは作成可能でしょうか
よろしくお願いします
0032デフォルトの名無しさん
2016/03/16(水) 16:57:24.73ID:WJMGp9Ueただそれがあなたの思ってるとおりのものなのかは保証できない。
最初から書き換えたものを使えばいいのでは?という疑問に答えてくれれば、
もっといいアドバイスが出来ると思う。
0033デフォルトの名無しさん
2016/03/16(水) 17:34:10.57ID:uyHrsjE6PHPを使おうと使うまいと、普通のウェブブラウザを使う限りJavascriptは使えると思うが。
PHPはリロード痔にタグを書き換えるどころか、全く違うHTMLを出力することもできる。
常に全く同じHTMLを出力するだけなら、HTMLでよく、PHP使う必要ないでしょ。
だから、できると思うが、できるんですか?と聞いている人にできるかどうかは分からないよ。
0034デフォルトの名無しさん
2016/03/16(水) 19:56:53.04ID:08Q65Pyephpはhtmlそのものを書き換える事は出来るけどタグだけなら書き換え出来ない
003531
2016/03/16(水) 20:02:58.06ID:uy33h+7U>>33
お二方、レスありがとうございます
>>32
個人的なことなのですが、正確には書き換えるではなく削除するでした
htmlの話になるので割愛しますが、textareaタグの初期値をロード時に削除しないとplaceholder属性を使用することができないため、JavaScriptを使って削除していました。
本題の初期値を指定しなければいいという話になりますが、指定せずにいるとバリデーターにて構文エラーが出て気持ちが悪いという本当にただの個人事です。
>>33
おっしゃるとおりJavaScriptは使おうと思えば使えます。
使うことができないという理由はこちらもhtmlの話になるので割愛しますが、doctype宣言をhtml4.01からiso-htmlに切り替えるためということになります。
iso-htmlではJavaScriptを使用することができないため、phpでできないかと考えたしだいです。
お二方のアドバイスからphpでも可能と判断しました。
これから参考書を買ってきます。
レスをくださり、ありがとうございました。
0036デフォルトの名無しさん
2016/03/16(水) 21:26:32.52ID:bVagARgSはあ?タグを書き換えられないだと? 意味不明。
#!/usr/bin/php
print "<html><body>";
if($tag_default){
print "<tag 1>";
}
else{
print "<tag 2>";
}
print "</body></html>";
0037デフォルトの名無しさん
2016/03/16(水) 21:34:35.21ID:/m4HeSgG0038デフォルトの名無しさん
2016/03/16(水) 21:38:12.31ID:08Q65Pye上の人曰くロード時にjsを使ってタグを書き換えると書いてある
なら最初からタグを書き換えた"html"をphpで吐けばいいと言う話でそちらの例文通りなんだが
わざわざタイミング的にロード時に"タグ"を書き換えるというなら出来ないと
0039デフォルトの名無しさん
2016/03/16(水) 21:38:16.49ID:6pUenI4Fなんか不安になる流れだけど、言葉を借りながら書くと、ロード後に何か変更することはできないよ。
0040デフォルトの名無しさん
2016/03/16(水) 21:39:18.20ID:TswKIM7eいやぁ>>35の要求は無理でしょ
バリデーションエラー抑制なんだから読まれるHTMLそのものにはtextareaの初期値が設定されている必要があり, onload或いはreadyイベント時にクリアする必要があるわけでしょ
クライアントサイドのお仕事なんだからサーバサイドではどうにもならん
0041デフォルトの名無しさん
2016/03/16(水) 21:42:40.76ID:1Ad9HLvEform部品のidだかnameだかを動的に変えてやってcacheも無効にすればあるいは
004231
2016/03/16(水) 21:54:52.61ID:uy33h+7U荒らしてしまったようで申し訳ありません。
>>38
補足として、ロード時にタグを書き換えるではなく、ロード時にタグの値を削除するです。
before:<textarea>hoge</textarea>
after:<textarea></textarea>
紛らわしかったですね。ごめんなさい。
>>39
ロード後というよりはロード時なのでScript系でいうonload的な何かトリガーになる関数やメソッドがないかなと思いまして。
0043デフォルトの名無しさん
2016/03/16(水) 22:41:03.47ID:TswKIM7e実装案あるなら詳しく知りたい
0044デフォルトの名無しさん
2016/03/16(水) 22:41:21.24ID:uh2T6fm3PHPじゃなければなんだ?
PHPは、printf("abcdefg\n"); と書いても動くで。
>>40
リロードされるということはサーバーが情報出すわけでどうにでもなる。
もちろん、リロードさせないで変えることは、PHPというより、CGIではできない。
<html><body>
<?php
なんか処理
?>
</bdoy></htm>
だと、bodyタグは書き換えられないけど、
print "<html>"
if($default){
print "<body>";
}
else{
print "<aaaa>";
}
print "</body></.html>"
だと書き換えられるだろ。
タグ書き換えられないなら、もはやCGIの意味ないだろ。
書き換える条件は、GETまたはPOSTで受け取れるだろ。何言っているのか意味不明だよマジで。
0045デフォルトの名無しさん
2016/03/16(水) 22:54:25.28ID:TswKIM7e何でCGIとか言い始めたのか分からんのだけど
で, >>35の要求はクライアントサイドでの書き換えだと読めるわけだし, それは>>42でもそうだということが分かるわけだけど, サーバサイドで何するの?
0046デフォルトの名無しさん
2016/03/16(水) 23:06:42.52ID:uh2T6fm3「ロード時」って言っているんだからサーバーだろ。
というか、おまえのブラウザはPHPプラグインでもあるのかよ?
聞いたことねーぞそんなの。
どこに、ブラウザのクライアントサイドでPHP使っている奴がいるんだよ。
話にならんわマジで。
PHPはJavascriptみたいにクライアントサイドでは動くわけない。
そんな低次元な話を言いたいわけ?当たり前じゃん
0047デフォルトの名無しさん
2016/03/16(水) 23:13:18.12ID:TswKIM7eとまぁサーバサイドからすればロード後もロード時もレスポンス送出後の話なので関与出来ない。
当然JavaScriptで操作するイベントハンドラもサーバ側からは全く見えない。
■ このスレッドは過去ログ倉庫に格納されています