【PHP】下らねぇ質問はここに書き込みやがれ 14

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f97-W3aP)
垢版 |
2022/09/20(火) 16:46:23.39ID:Sb2Kpzh+0
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ

PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 13
https://mevius.5ch.net/test/read.cgi/tech/1631147923/

次スレは>>980以降
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2023/06/13(火) 22:21:10.72ID:LrQ+wv81M
単純で簡単なjavascriptでレンダリングされているならいけたかもしれませんがフレームワークを使われていたら解析が困難ですね。やはり無理か
2023/06/13(火) 22:21:52.68ID:LrQ+wv81M
そしてnodejsが使えないのでヘッドレスブラウザも無理と。
2023/06/13(火) 23:39:40.44ID:Oj3crCHea
>>604
取得したいサイトのURLとその出力htmlの欲しい部分教えて
608デフォルトの名無しさん (テテンテンテン MMeb-mVGR)
垢版 |
2023/06/14(水) 02:57:47.74ID:sJAdEXJGM
>>607
取得したいサイトは複数ありますがECナビになります。
https://ecnavi.jp/search/?word=%E6%88%91%E3%81%8C%E5%A4%A9%E4%B8%8B

htmlの欲しい部分は表示される案件の部分です。
しかしフレームワークがhtmlをレンダリングされている可能性があり、おそらく解析は困難です。
ajaxからデータを取得するサイトもありましたがcros制限がかかっているため不可です。
ヘッドレスブラウザは環境が構築できないので選択肢には含みません。

わたしはhttpリクエストで動的なサイトのデータを取得するのは無理と判断しました。
2023/06/14(水) 04:20:42.50ID:Jx0dk3g+0
普通に利用規約違反じゃねぇかw
2023/06/14(水) 05:35:16.83ID:VFw5jfyla
>>587
WSL2, Ubuntu 20/22, VSCode, Windows Terminal, Docker Desktop

VSCodeの拡張機能・Remote Development に、
3つの拡張機能・Remote Container/WSL/SSH が含まれている

日本人が作った、多言語バージョンマネージャーのanyenv。
同様のツールに、asdf もある

Renv, crenv, denv, erlenv, exenv
goenv, hsenv, jenv, jlenv, luaenv
nodenv, phpenv, plenv, pyenv, rbenv
sbtenv, scalaenv, swiftenv, tfenv

漏れは、Ruby on Rails をやっているけど、メモリは32〜64GB ほしい
2023/06/14(水) 06:54:43.13ID:4pmBicBja
>>608
案件って「ポイントアップチャレンジ」の部分?
2023/06/14(水) 07:38:40.54ID:dOe183t+M
>>611
案件の部分はPCで閲覧していると表示されません。ゲームアプリ案件の場合はユーザーエージェントがモバイルOSである必要があります。
2023/06/15(木) 15:12:03.05ID:pNWnTG3Z0
たかだかバックエンドのWeb開発するだけなのに
メモリ32GBとか要求される異常な時代w
2023/06/15(木) 17:34:34.40ID:oe0OZOrwd
WSL2で2GB
Chromeで2GB
その他諸々で10GB
2023/06/15(木) 17:37:28.87ID:KtHE2I/00
脳みそのメモリーが書き込み不可のエラーになってますし
2023/06/15(木) 17:51:10.48ID:pNWnTG3Z0
各々アプリが肥大化しすぎてしまって…
minimal構成のも用意してくれればいいんだけどね
XPとか32bitOSが主流だった時代は4GBで十分足りただろうに
まあ今メモリ32GBで1万円ぐらいだから文句いうことでもないんだけど
2023/06/15(木) 18:17:52.09ID:jjmsD4tb0
32Gも要求されるって何開発してんの?
2023/06/15(木) 18:28:28.13ID:W3FATu2P0
616 じゃないけど、docker とブラウザ立ち上げてたら 16 GBをちょいちょい超えるから 32 GBに増設した
快適だぞ
2023/06/15(木) 20:46:52.21ID:jjmsD4tb0
快適な環境作りに必要って訳ね
2023/06/16(金) 00:02:25.90ID:0+O5qEwBa
Windows/Linux(WSL2), ブラウザ、VSCode, Docker

さらに、Ruby on Rails では、複数データベースで並列テストもできるし
2023/06/16(金) 00:06:26.73ID:siRuxcGs0
Ruby厨は呼んでない、巣に帰れ
622デフォルトの名無しさん (ワッチョイ 8b10-JQtP)
垢版 |
2023/06/16(金) 13:32:48.84ID:Y1bNR4pi0
TwitterOAuthに詳しい人がいたら教えてください。
DeveloperPortalでアプリ作成済み、

composer require abraham/twitteroauth
でインストール済みとします。

$connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);
$content = $connection->get("account/verify_credentials");

ではTwitterアカウントの情報が取得できるのですが、
(※app_keyの部分は省いています)

Twitter API v2に対応するために
$connection->setApiVersion('2');
を追加すると取得できません。$contentがNULLになります。

これってTwitterアプリが v2に対応していないからでしょうか?
2023/06/16(金) 17:45:17.56ID:TyNt7O690
>>622
API使うならドキュメントぐらい見ろよ
エンドポイントがないだけだろ
2023/06/17(土) 09:44:22.27ID:C4ey1Sw3M
addactionがfunctions.phpでは動作するのにカスタムテンプレートでは動作しない理由はなんですか?
2023/06/18(日) 18:12:02.78ID:h4u0ciKA0
>>623
$content = $connection->get("account/verify_credentials");

ここの指定に問題があるということが掴めました。
ご指摘ありがとうございました。
2023/06/25(日) 18:20:15.50ID:gM/PAKCH0
php初めてみたもののメンターとか先輩とかいないぼっちなんで無償版のchatGPT使うと
pdoを使ったDBの接続を含めたコードとか、SQLインジェクションの対応とか一瞬で出してくれてありがたい限り
有償版のGPT4ならコード生成は何かGPT3.5と変わるの?
2023/06/25(日) 18:24:11.05ID:PAO3/SeJ0
寝ている間に君の仕事やってくれる
2023/06/25(日) 18:40:58.90ID:gM/PAKCH0
それが本当なら指示のプロンプトがすごいことになりそう
実際のところ、ファイルを分けたCRUDなんて1回のプロンプトで生成とかできるんだろうか
どこまでならできるとか、ここはさすがにできないとか情報があるサイトがあれば教えていただければ嬉しいです
2023/06/25(日) 19:17:12.98ID:XgY7oRFd0
次のコードをクラスみたいに書いて?
→コンストラクタとメソッドに書き換えてくれる

ありがてぇ、関数群も提示するとそれに合わせてチューニングしてくれる
2023/06/25(日) 19:21:55.03ID:i7rMe9Iv0
知ってるコードで書いて
これをphpに移植したいというだけでほぼできる
2023/06/25(日) 22:54:48.63ID:lataiSU20
君は今非常に危険なところにいます
phpのpdoは非常に厄介なんですが、それを理解してません
「SQLインジェクションの対応とか一瞬で」と言ってるけど、それは本当?

たとえば、
$pdo = new PDO('mysql:dbname=test;host=localhost');
なんて提示されて採用した場合、脆弱な箇所ができる可能性があるの理解してる?

ChatGPTの提示するコードは自分の理解できている範囲以外は危険だと思って検証しないと危ないよ
2023/06/26(月) 02:27:13.68ID:0+rAUtlj0
>>631
$pdo = new PDO('mysql:dbname=test;host=localhost');
クエリではなく、この時点で見た感じとしては正直わからんです

chatGPTは
$pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_username, $db_password);
binValueなども使ったものを提示していて、実際に動作しているのね。
pdoの引数に各変数があるぐらいで何かしらセキュリティに問題があるとは思わなかったんだけど、この例ではまずい点はあるの?
2023/06/26(月) 05:54:16.49ID:xls0AJJa0
PDO を使用する際、アプリケーションとしての文字コードを指定できる箇所は new PDO() 内のみです
ここで正しくアプリケーションの文字列を指定していない場合、アプリケーションとDBの間で文字コードに差異が出る可能性が高く、それ起因の脆弱性が発生する可能性があります

よく知られた例としては 5c 問題があり、例えば上記と "SET NAMES sjis"、動的プレースホルダのセットで、プレースホルダをすり抜ける脆弱性が発生します
2023/06/26(月) 06:12:00.13ID:0+rAUtlj0
>>633
ありがとう、そういうことがあるのね。
自分がchatGPTに依頼した10回に1回ぐらいの割合で
$dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, $user, $password, $options);

があったので、これからはcharsetを明示するか意識しておきます。
知らないことを伝えられて動いたら全面的に信頼してしまうのも良く無いので、完全では無いことを意識しておきます
2023/06/26(月) 10:06:12.93ID:kBW+dErx0
どうしてそんなにChatGPTにこだわるんだ
2023/06/26(月) 14:10:10.33ID:RpzhtkjJ0
流行りだからね
2023/06/27(火) 01:40:25.23ID:BUGmgo620
RHELの件でこのスレ的に問題になりそうなことはありますか?
https://www.redhat.com/en/blog/furthering-evolution-centos-stream?sc_cid=701f2000000tyBjAAI

> CentOS Stream will now be the sole repository for public RHEL-related source code releases.
2023/06/29(木) 01:16:30.55ID:IOgTB2mJ0
コミュニティ無視したことやって分裂すると
その系譜はもう長らくは信用されないので
CentOSが死んだ時点で大方はUbuntuに移ったのでは
このスレ的に必要なのは長期サポートだしね
2023/07/01(土) 23:56:45.93ID:qg8w7WVg0
PHPを始めたばかりのものなのですが
2023/07/01(土) 23:58:14.54ID:qg8w7WVg0
間違えて書ききる前に投稿してしまいました

PHPが無料サービスの範疇で動かせれるレンタルサーバーってあるのでしょうか?
HTMLは過去に使った事があったレベルでHTML自体久しぶりなので今どういうサービスがよいものかもわかっていません
2023/07/02(日) 19:31:28.47ID:gdoAp3Jw0
むしろ殆どphp動くだろ
rubyならともかく
2023/07/02(日) 20:33:28.61ID:QFPeETi70
レンタルサーバーは基本的にMySQLとPHP動かせるようにしてるから
WordPress入れられるように
643デフォルトの名無しさん (ブーイモ MM8e-D/Rs)
垢版 |
2023/07/05(水) 12:23:56.04ID:BSe/7cdeM
>>633
15年近く脆弱性関連のバグが放置されてるのは凄いね
しかもそのライブラリが未だに広く使われてとかどう考えても頭おかしい
2023/07/05(水) 17:36:49.07ID:FFK7TFKZ0
>>643
調べりゃわかるけど、バグじゃない
charsetの設定が効かなかったバージョンがあるからそれはバグとみなしても良いかもしれないけど、PHP5.3.7以下とか随分前の話

文字列の連結使って SQL 文作っちゃダメとかと同じ知ってないとダメなセキュリティ知識だよ
645デフォルトの名無しさん (ブーイモ MM5b-D/Rs)
垢版 |
2023/07/05(水) 18:51:56.66ID:VuPZbF0BM
>>644
デフォルトでなんちゃってprepared statementが使われる時点でセキュリティ的にはバグなんだよね
PDO特有の問題を一般的なセキュリティ知識と同列に語ったらダメだよ
文字列連結だって適切にエスケープ出来れば問題はないわけだけどデフォルトでそんな脆弱な処理をするライブラリがあったら頭おかしいと思うでしょ
2023/07/05(水) 19:39:41.44ID:FFK7TFKZ0
>>645
なんか、無茶苦茶だねぇ
まず、
> 15年近く脆弱性関連のバグが放置されてるのは凄いね
これが全く認識違いだったってことは理解できた?
現在のphpではcharsetをPDOコンストラクタ内のDSNで設定してあげることで、アプリとDBの間の文字コードにずれが発生することがなくなり、意図した通りの動作をさせることができる

> デフォルトでなんちゃってprepared statementが使われる時点でセキュリティ的にはバグなんだよね

全然話が変わってるけど、なんでこんな話が出てきたの?
動的プレースホルダをデフォルトとして採用することをバグと呼ぶ人は見たこと無いけど、たしかにセキュリティ屋から見ると好ましくはない
ただ、ネットワークレイテンシを考えると非常に合理的なので、それほど悪い選択ではないと思う

顕在化した脆弱性があるわけでもないし現在においてはアプリとDBをutf-8で統一することも容易なので、正しくアプリケーションの性格に合わせて選択すればよいだけの話だよ
2023/07/06(木) 11:41:34.33ID:us421T2z0
面倒な人が絡んできてるね・・・
仕様バグだろうとバグはバグよ
2023/07/06(木) 11:46:42.56ID:5cWvOTk60
脆弱性は、設計上のバグ
知ってないとダメというのは、バグ回避のテクニック
2023/07/06(木) 12:43:03.10ID:KqeQuq1k0
>>647-648
charsetの設定に未だバグが有るって言いたいの?
それともデフォルトが動的プレースホルダになったことをバグと言いたいの?

何を脆弱性/バグって言いたいのかわからん
2023/07/06(木) 18:00:41.52ID:hqQEAg+3d
個人的にはメール送信関係でヘッダー7ビット文字に変えるのがなんかもやもやする

昔のソフトだと7ビットじゃないとダメってのはわかるんだけどUTF-8でもいいじゃねーかってなる
2023/07/06(木) 22:27:39.58ID:CUYn8xPf0
>>647
勘違いしているのはお前で、一般的にはそれはバグとは言わない。
同様の件なら踏切や横断歩道もバグになる。勿論高架や歩道橋にするべきではあるが。
昨年の観光バス横転事故(フェード現象らしい)もバグではなくブレーキの仕様だ。仕様バグでもない。
ホームドアもそれなりに普及して、
あらゆる物がある程度デタラメな操作(=ホームの端を歩く)しても安全になっては来ているが、
素人がどんなデタラメをやっても安全とはなってないし、ならない。
プログラミングに関しては今後とも「正しい操作をした場合に正しく動く」でしかないだろうよ。
不親切なのはその通りだし、改善はしていくだろうけども。


>>650
公式見る限りPHPからは気にする必要なさそうだが違うのか?
なおutf-8も8bit使ってるから駄目だと思うぞ。
今更8bitが通らない環境なんてないし、有ったとしてもそんなところにメール出してないのも事実だが。
IPv6みたいに誰かが音頭取って更新を促さない限り無理だが、今のところ聞いたこと無いね。
2023/07/06(木) 22:53:42.84ID:5cWvOTk60
素人が脆弱性を突いてくる説
2023/07/07(金) 02:29:15.80ID:u6t7w3p4a
Java は、ログ機能にセキュリティーホールがあって、
Edge から、パスワードを抜かれますと報告が来た

セキュリティー更新せず、ほったらかしのサイトが山ほどある
2023/07/07(金) 07:55:50.16ID:84NzU0uw0
>>648
>>652
結局何を脆弱性って言ってんだよ…
素人が脆弱性って言いたかっただけってこと?
2023/07/07(金) 23:44:08.79ID:84NzU0uw0
>>650
なんかちょっと勘違いしてる気がする
昔のブックマークから拾い上げてみたんで読んでみて
https://blog.tmtms.net/entry/2014/12/06/postfix-8bit
656デフォルトの名無しさん (ワッチョイ ce8b-/jfo)
垢版 |
2023/07/17(月) 13:54:48.52ID:pZjB1XDE0
テスト
657デフォルトの名無しさん (ワッチョイ 9b5f-5LlG)
垢版 |
2023/07/18(火) 14:26:46.55ID:2j+5uZca0
ネットで見つけた掲示板のサンプルがクソでした
更新ボタン押すと同じ書き込みが繰り返されてしまうのです
どうすれば解決しますか?
ほんとプログラミングはクソ記事多くて困りますね
え?クソはおまえだ?
ごもっとも
2023/07/19(水) 05:05:41.80ID:mXhymdyPa
jQuery なら、

<button id="btn_1">
<span class="show-when-enabled">送信</span>
<span class="show-when-disabled">送信中...</span>
</button>

<button id="btn_2">送信ボタンをenable にする</button>

<style>
button .show-when-enabled { display: initial; }
button[disabled] .show-when-enabled { display: none; }

button .show-when-disabled { display: none; }
button[disabled] .show-when-disabled { display: initial; }
</style>

<scr@ipt>
$( function ( ) {
$( '#btn_1' ).on( 'click', function ( event ) {
$( this ).prop( 'disabled', true ); // disable にする
} );

$( '#btn_2' ).on( 'click', function ( event ) {
$( '#btn_1' ).prop( 'disabled', false ); // enable にする
} );
} );
</scr@ipt>
2023/07/19(水) 08:14:40.70ID:sz/H8H6wr
Ruby病(その割に技術は中の下レベル)の人は
jquery推しでもあるのか

Railsとvueやreactを同時に使う例は幾つかあるな

phpだとlaravelはvueとの相性抜群だがreactは今一つ
CakePHPだとどっちも簡単ではないか
CakePHPはJquery使った例が多いなあ

Pythonのdjangoはvueもreactも実装例豊富

Javaのtomcatはvueは何とかなるがreactだとやることも限られてる?というレポートがある

Goは何と相性いいかな
2023/07/20(木) 13:07:15.80ID:qnO4Vavr0
printとechoの違いがわかりません
ぐぐっても説明が下手な文章ばかりで理解できません
理数系の人間は文章の書き方も少しは勉強したほうがいいのではないでしょうか?
え?勉強しろはおまえだ?
ごもっとも
661デフォルトの名無しさん (ワッチョイ b6e7-/jfo)
垢版 |
2023/07/20(木) 15:39:21.26ID:x9stnx4l0
>>660
PHPは公式マニュアルが信じられないくらい丁寧でわかりやすくまとまっているから
なにをさておいても公式マニュアルを読め

わかるわからないを言い出すのはかならずマニュアルを読んだあとにしろ
2023/07/20(木) 16:19:17.66ID:hZ7hjedN0
もちろん、お手伝いします!
PHPにおける`print`と`echo`の違いについて要約して説明しますね。

- `print`: `print`は関数ではなく、言語構造です。値を出力するために使用されます。
値を出力した後、1を返します。また、引数を一つしか受け付けないという制約があります。例:`print "Hello, world!";`

- `echo`: `echo`は言語構造または関数として使用できます。値を出力するためにも使用されますが、`print`とは異なり、返り値を持ちません。
カンマを使って複数の引数を受け取ることができます。例:`echo "Hello", " ", "world!";`

どちらも基本的には同じように動作しますが、`echo`がやや効率的で多くの引数を出力する場合にわずかに速い場合があります。
理解に役立てば幸いです!もし他に質問があればどうぞお知らせください。
2023/07/20(木) 16:56:18.77ID:gjufsyfM0
横だがGPT-4に小学生にでもわかるよう聞いてみた
---
それらの違いを小学生にも分かるように説明すると、
「printとechoは友達と話す方法だと考えてみてください。
print君は一度に一つのことしか話せないけど、その後に自分がちゃんと話したかどうか(つまり1という値)を教えてくれます。
一方、echo君は一度にたくさんのことを話すことができますが、自分がちゃんと話したかどうかは教えてくれません。
だから、それぞれの友達(つまり命令)は自分が何をしたいかによって選ぶといいです。」
2023/07/20(木) 18:33:40.90ID:qnO4Vavr0
なるほどよくわかりました
サイト記事書く人は専門用語ばかり使って、初心者につたわらない文章しか書けないので
ここの解説はとてもわかりやすいです
ググって検索に出てくる邪魔な解説は消えてなくなれですね
え?おまえが消えてなくなれって?
ごもっとも
2023/07/20(木) 21:59:07.70ID:WRqu6H4qd
printが1を返してくれるとしても、それが役立つ場面がわからない
どんな場面で役立つのだろうか
2023/07/20(木) 23:11:22.17ID:zS5YoEfg0
>>660
アホみたいな文章書いてる暇あったら公式リファレンス読んどけ、多分一番しっかり書かれてるから
667デフォルトの名無しさん (ワッチョイ 9b5f-5LlG)
垢版 |
2023/07/21(金) 23:03:50.96ID:hNucA2BH0
>>666
読んでも全然わからない
公式が一番わかりにくい
2023/07/21(金) 23:58:06.25ID:GYeyeRXL0
専門のことしてるのに専門用語を理解しようとしないのはどうかと思うぞ
噛み砕いて教えるのは、相手が専門外のお客様(生徒含む)のときくらいだろ
669デフォルトの名無しさん (ワッチョイ a77b-XNrL)
垢版 |
2023/07/22(土) 00:30:59.57ID:HIe68VRv0
>>667
みんなが分かりやすいと言ってる公式を読んでも分からないのは、お前の知能の問題。
現時点でPHPerの中でも最底辺確定だし、向いてないから止めとけ。
2023/07/22(土) 01:45:53.25ID:fDI/VGosa
print は言語構造だとか、こんな訳の分からない言語をやっても無駄。
特に初心者は、情弱ビジネスに引っ掛かった。
素人に、PHPを勧める香具師が一杯いる

YouTube で有名な雑食系エンジニア・KENTA は、
PHP, Scala をオワコン認定して、
初心者のキャリアパスは、Rails → Go だけと言ってる

ガーシーのサロンで使っていたMastodon は、
PHPから、Ruby on Rails 6 に変わった

米国年収でもRubyは、Go/Rust/Elixir の3大言語を超えた。
PHP, Dart は生活保護レベル

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5〜7

PHP : 5
Dart : 4.4

100人の言う事よりも、KENTAの言う事の方が、間違いなく正しい!
なぜかというと、100人よりも研究しているから
2023/07/22(土) 02:11:03.31ID:tE4RMivO0
Rubyistが金持ちだかなんだか知らないけど
こんなとこでキチガイみたいなレス続けてるお前の年収なんかたかがしれてんだから
人の心配なんてしないで自分の心配しとけな
672デフォルトの名無しさん (ワッチョイ bf5f-onGn)
垢版 |
2023/07/22(土) 15:06:33.58ID:UxG3EoFv0
>>667
本当に「読んだ」のか? お前はただ「見た」「眺めた」だけじゃあないのか?
わからないならわかるまで読め。 わからない単語はすべて検索しろ。 100回読め
中学高校で嫌になるほど勉強の仕方を勉強してきてるんだから、そのくらいはやれ
2023/08/03(木) 13:33:47.77ID:7OoRnNP6d
格納するDBのカラムの型がintの場合に、POSTデータの初期化処理は
次のどちらが良いのでしょうか?

$value = isset($_POST['value']) ? $_POST['value'] : '';//空文字
$value = isset($_POST['value']) ? $_POST['value'] : 0;//整数0

前者は、ポストデータは文字列なので空文字で初期化しています
後者は、DBのカラムがintなので整数0で初期化しています
どちらもその後にデータチェック及びサニタイズはします
2023/08/03(木) 13:55:32.28ID:7OoRnNP6d
補足です
$_POST['value']には、整数が入力されることを想定しています
よろしくお願いします
2023/08/03(木) 15:48:42.48ID:zTGCMZ+m0
格納するDBのカラムにデフォルト値がセットされていればデフォルト値に合わせるか何も入れない
セットされていないなら入力がmustってことなので
とりあえず格納が可能になるよう0にしてしまうとかいう発想がおかしいので入力しろとエラーを返すべき
2023/08/03(木) 15:50:08.52ID:zTGCMZ+m0
not null制約かどうかは書いてなかったね
まあそのカラムの性質によるとしか
2023/08/03(木) 16:23:03.22ID:7OoRnNP6d
>>675
ありがとうございます

>>デフォルト値に合わせるか「何も入れない」
>>格納が可能になるよう0にしてしまうとかいう発想がおかしいので「入力しろとエラーを返すべき」

この2点を考慮すると、空文字で初期化するのが正しいようですね
POSTデータが空なのだから、空文字で初期化して、データチェックで
空の場合をエラーとして弾くのが正解な気がしてきました
2023/08/03(木) 19:00:43.99ID:boco8q6Md
POSTの必須チェックはemptyで十分(暴論)
2023/08/03(木) 20:11:24.13ID:7OoRnNP6d
$value = $_POST['value'];
これだと値がセットされていない場合にNoticeエラーが出るんですよね
それで、emptyやissetが使わていたように思います

もっとも最近では、filter_inputが推奨されているようで
すでにfilter_inputが主流になっているのでしょうか
2023/08/03(木) 20:29:00.58ID:K+C7K/360
どうやるかは色々流儀があると思うけれど
何故そうするのかを知っておくことは大事だと思う
2023/08/03(木) 21:42:47.27ID:NRjs0yDQ0
フォームの項目が動的に変化するタイプとかで
そもそもクライアントから送信されてない項目を参照しようとしてるんじゃないの?
2023/08/07(月) 17:05:23.27ID:g4YHb1dg0
>すでにfilter_inputが主流になっているのでしょうか
PHP5.3あたりではまだissetが当たり前だったけど
PHP5.4あたりからfilter_inputの記事が多くなった気がしたな
PHP7になってからはnull合体演算子(??)もissetの代替であげられるけど
filter_inputがよく使われてる気がする
高精度ではないけどそれでいいなら用意されてるフィルタである程度バリデーションできるし
なんならコールバックのユーザ定義関数でもフィルタリングできるし
あまりごちゃごちゃ書かないですむメリットもある
2023/08/08(火) 16:45:09.01ID:P3IKMInR0
でも、AIに質問するとissetの例を出してくるよ
2023/08/08(火) 21:06:35.11ID:InM7lKihd
>>682
ありがとうございます。とても参考になりました

公式サイトをしっかり読めばいいのだけど、個々の文法の解説がメインで
流れのあるチュートリアルとしては弱いんだよね
もちろん公式サイトの充実ぶりにはとても感謝しています

PHP8に準拠したお手本となるようなPHP本が出るといいなぁ
2023/08/10(木) 16:13:43.00ID:+eZjCzx+0
それぞれのメリットを教えてくれ

AI:
filter_inputとissetを使用したバリデーションには、それぞれ異なる目的とメリットがあります。以下にそれぞれの関数の特徴とメリットを挙げてみます。

1. filter_input:
目的:
filter_inputは、入力データ(例:POSTやGETからのデータ)をバリデーションおよびサニタイズするための関数です。
メリット:
サニタイズ: さまざまなフィルタを使って、データをクリーンにすることができます。例えば、文字列としてのメールアドレスを取得することができます。
バリデーション: 予期しないデータや危険なデータを防ぐための具体的なルールを適用することができます。
セキュリティ: filter_inputは、セキュリティ上の理由から直接的なスーパーグローバル変数($_POSTや$_GET)へのアクセスを回避します。
2. isset:
目的:
issetは、変数がセットされているかどうかをチェックするための関数です。変数がセットされており、NULLでない場合にTRUEを返します。
メリット:
シンプル: コードの意図が明確で、変数が存在するかどうかを簡単にチェックできます。
パフォーマンス: issetは非常に高速で、ほとんどの場面でのオーバーヘッドがありません。
NULLチェック: 変数がNULLかどうかも同時にチェックします。
結論:
issetは変数の存在をチェックする場面で主に使用され、filter_inputは変数の値を検証・サニタイズする場面で使用されます。
セキュリティや入力のバリデーションが関わる場面では、filter_inputの使用が推奨されます。一方、単純に変数の存在を確認したい場合や、パフォーマンスが重要な場面では、issetの使用が適しています。
状況やニーズに応じて、適切な関数や方法を選択することが大切です。
2023/08/18(金) 05:27:16.73ID:+mar7LqR0
チェックボックスでレコードに関するフラグをmariadbに登録する時は
php内ではtrue, falseと、1,0で条件分岐どっちがいい?
mariadbはtrue, falseのboolで保存できないので、結局取り出すときは1と0の文字列になるけど
どういう管理というかルールにしたら良いか迷ってます
2023/08/18(金) 11:22:44.15ID:MbvK7wD/0
>>686
0か1の数値にすると良いでしょう。
文字列はやめましょう。
2023/08/18(金) 19:35:38.53ID:2Xzv42cCd
>>686
0か1の整数型だね
INSERTをする前に値をintvalする
SELECTをした後に値をintvalする

PHPの内部ではint型として扱い、厳密な比較をする
ただしPOSTされた時点では文字列なので、バリデーションは文字列として扱う
もっともチェックボックスだとチェックがないと、たぶん値が何も来ない
2023/08/19(土) 20:10:29.17ID:28+RhaxH0
>>687-688
ありがとうございます。
初学者なのでtrueとかfalseとか憧れてそれで作っていましたが、db周りの出し入れをしているうちに
キャストに統一性が無い感じがモヤモヤしていました。

フラグのチェックボックスは
filter_input(INPUT_POST, 'hoge', FILTER_VALIDATE_BOOLEAN)
を使っていました。

チェックボックスにチェックが無い場合はデータベースに入れる前に三項演算子で
isset($_SESSION['hoge']) ? 1 : 0;
isset($_SESSION['hoge']) ? 1 : 0;
フラグのありなしをつけてinsert, updateしていますが、確かに整数に揃えたほうが良かったですね。
690デフォルトの名無しさん (ワッチョイ 317b-vj3y)
垢版 |
2023/08/19(土) 23:28:02.55ID:2LFpxJcr0
>>689
おい、一応言っておくが、>>687-688は間違ってるぞ。
PHP内はtrue/falseで作るのが正しい。
つかちょっと考えれば分かるだろ。
お前はDBを変更した際に、そのDBがtrue/false使えたら全部書き直すつもりなのか?

DB依存事項はDB側に押し込むのが基本。mariaはPDOには無いようだが、
理想的にはそういったDBアクセスラッパに押し込んでしまって、
PHP側はDB依存無し、つまりtrue/falseで書いてしまうのが正しい。
それでラッパ内で自動的にtrueを"1"、falseを"0"に変換させる。

逆に読み出しの場合、"1"をtrueに、"0"をfalseにするわけだが、
型あり言語の場合はこの辺、文字列の"1~"0"とは型で区別出来るが、
PHPの場合に実際どうするのかはよく知らん。
が、ともかく、DBアクセスラッパ内で逆変換してしまうのが正しい。

というかそうしないとDB変えただけで全部書き換えが必要になるだろ。
てなことは今のお前でも考えれば分かるはず。お前らは考えなさすぎ。
つっても俺の意見はプログラミングの一般論であって、
PHPなりのなんか変なノウハウがあって数字の方がいいのかどうかは分からん。
691デフォルトの名無しさん (ブーイモ MM4b-Wgo7)
垢版 |
2023/08/20(日) 04:33:24.24ID:fG8Y/bhcM
ワイ独学自称中級者
一連のやりとりを見て自信を無くして震える
(((( ;゚Д゚)))ガクガクブルブル
2023/08/20(日) 12:55:06.37ID:4PrSYObq0
>>690
>そのDBがtrue/false使えたら全部書き直すつもりなのか?

そういうDB依存、言語依存をしないために、そもそもDBに1,0をかきこむんじゃ
true/falseなんて多言語で一番共通の無い概念じゃけえの
2023/08/20(日) 13:35:51.35ID:Vn08TQPe0
>>692
> 言語依存
> 多言語で
いや今はPHPでどうするかの話だろ。

そしてmariaは知らんが686の通りなら文字型しかないDBなんだろ。
そういうDBが有ってもおかしくない。DBではないがJSのlocalStorageとかそうだし。
2023/08/20(日) 13:59:49.50ID:Vn08TQPe0
>>686
てか調べてみたらmariaにbooleanあるんですが?
https://mariadb.com/kb/ja/data-types/
2023/08/20(日) 14:18:19.62ID:HzS5SUnX0
Synonym for TINYINT(1)と書いてあるだろう
2023/08/20(日) 15:08:55.86ID:6IMFV5dJd
フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。
ブーリアン型は「真」(フラグが立っている)および「偽」(フラグが立っていない)のみを値として受けつけ、
都合が良いからである。

https://ja.wikipedia.org/wiki/フラグ_(コンピュータ)

「1|0」でなく「true|false」を使うことに有用性はありますか?
https://teratail.com/questions/307035
2023/08/20(日) 15:10:00.51ID:GxzweHHZ0
TINYINTには、0と1以外の値も入る
2023/08/20(日) 16:20:48.91ID:ssGBE3vxd
MySQLのtinyint(1)って1ビットってことだから0か1になるんじゃ?

登録するまでに型変換だのなんだのするの個人的には嫌だからtrue falseで良いと思うけど
2023/08/20(日) 17:51:30.99ID:fCXPEraA0
すいません、間違えていました
>mariadbはtrue, falseのboolで保存できないので、結局取り出すときは

誤:1と0の文字列になるけど
正:結局取り出すときは1と0の数値になるけど

です。tinyint(1)なので数字の1と0です。
最悪なところ書き間違えていました・・・
phpしか使わないので

チェックボックスのvalue=1をintvalにしてdbに入れる
確認画面とかで評価するときは===1で厳密に評価するのが初学者向きなのかな?
mariadbに入れるまではtrue,falseがdbに入れられないことに気付かなかったです。
2023/08/20(日) 18:02:22.04ID:HzS5SUnX0
>>698
tinyintは1バイト
tinyint(10)としても1バイト

>>699
DB側では数値の1と0でもドライバや設定によっては
PHP側では文字列の”1”と”0”で取得されたりするので気をつけて
PHP特有の落とし穴
2023/08/20(日) 18:07:23.77ID:5gYLv8ZUM
>>700
pdo使え
2023/08/20(日) 18:14:41.61ID:fCXPEraA0
>>700
exucuteからforeachで$hoge = intval(row['is_hoge']);
のように取り出そうと思います、間違っていたらごめんなさい。
pdoとプレースホルダを使っています。
2023/08/20(日) 21:21:03.15ID:7sa3oVfBr
これだからphpは欠陥言語なんだよな
他の言語じゃ起こり得ないことがphpでは当たり前のように起こる
2023/08/20(日) 21:37:23.85ID:6IMFV5dJd
phpMyAdminだとBOOLEANは、NUMERICのカテゴリで数値扱い
上にもある通りtinyint(1)とされる
型をBOOLEANに設定してデフォルト値をtrueにしても、結局は1と表示される
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況