質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

7回答

10026閲覧

気付けばプロ並PHP終了

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

12クリップ

投稿2017/06/11 08:08

編集2017/06/16 10:48

ご意見ありがとうございました。
次に進もうと思います。

以下、質問です。
タイトルの通り、「気付けばプロ並PHP」という書籍をおわらせました。次はセキュリティに関して覚えた方がいいと言われたこともあり、「体系的に学ぶ、安全なWebアプリケーションの作り方」(以下徳丸本)も買ってきて少し読みました。
ですが、「気付けばプロ並」のほうはパスワードハッシュなどが現在推奨されないものである事などを指摘されたので、「現行の、セキュリティ面などにおいても適切な」コーディングを知りたいと思いました。
その上で、徳丸本を終わらせたらいわゆる「即戦力
」として仕事ができるのでしょうか?
(仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
先ほどはスマホからの投稿なので後から追記しました。
pro_list.php

<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false) { print 'ログインされていません<br />'; print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['staff_name']; print 'さんログイン中<br />'; print '<br />'; }?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try{ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; $user = 'root'; $password= ''; $dbh = new PDO($dsn,$user,$password); $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT code, name,price FROM mst_product WHERE 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; print '商品一覧<br /><br />'; print '<form method="post" action="pro_branch.php">'; while(true){ $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print'<input type="radio" name="procode" value="'.$rec['code'].'">'; print $rec['name'].'---'; print $rec['price'].'円'; print'<br />'; } print '<input type="submit" name="disp" value="参照">'; print '<input type="submit" name="add" value="追加">'; print '<input type="submit" name="edit" value="修正">'; print '<input type="submit" name="delete" value="削除">'; print '</form>'; } catch(Exception $e){ print 'ただいま障害発生中です。ご迷惑おかけします。'; exit(); } ?> <br /> <a href="../staff_login/staff_top.php">トップメニューへ</a><br /> </body> </html>

staff_branch.php

<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false) { print 'ログインされていません<br />'; print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['staff_name']; print 'さんログイン中<br />'; print '<br />'; }?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try{ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; $user = 'root'; $password= ''; $dbh = new PDO($dsn,$user,$password); $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT code, name,price FROM mst_product WHERE 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; print '商品一覧<br /><br />'; print '<form method="post" action="pro_branch.php">'; while(true){ $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print'<input type="radio" name="procode" value="'.$rec['code'].'">'; print $rec['name'].'---'; print $rec['price'].'円'; print'<br />'; } print '<input type="submit" name="disp" value="参照">'; print '<input type="submit" name="add" value="追加">'; print '<input type="submit" name="edit" value="修正">'; print '<input type="submit" name="delete" value="削除">'; print '</form>'; } catch(Exception $e){ print 'ただいま障害発生中です。ご迷惑おかけします。'; exit(); } ?> <br /> <a href="../staff_login/staff_top.php">トップメニューへ</a><br /> </body> </html>

pro_add_check.php

<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false) { print 'ログインされていません<br />'; print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['staff_name']; print 'さんログイン中<br />'; print '<br />'; }?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php //if (isset($_POST["name"]) && // isset($_POST["pass"]) && // isset($_POST["pass2"]) // ) { require_once('../common/common.php'); $post=sanitize($_POST); $pro_name = $post["name"]; $pro_price = $post["price"]; $pro_gazou = $_FILES["gazou"]; // } if($pro_name == '' ){ print '商品名が入力されていません<br />'; } else { print '商品名:'; print $pro_name; print '<br />'; } if(preg_match('/^[0-9]+$/',$pro_price)==0) { print '価格をきちんと入力してください<br />'; } else { print '価格:'; print $pro_price; print '円<br />'; } if($pro_gazou['size'] > 0) { if($pro_gazou['size'] > 1000000) { print '画像が大きすぎます'; } else { move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']); print '<img src="./gazou/'.$pro_gazou['name'].'">'; print '<br />'; } } if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0 ||$pro_gazou['size']>1000000) { print '<form>'; print '<input type="button" onclick="history.back()" value="戻る">'; print '</form>'; } else { print '上記の商品を追加します'; print '<form method="post" action="pro_add_done.php">'; print '<input type="hidden" name="name" value="'.$pro_name.'">'; print '<input type="hidden" name="price" value="'.$pro_price.'">'; print '<input type="hidden" name="gazou_name" value="'.$pro_gazou['name'].'">'; print '<br />'; print '<input type="button" onclick="history.back()" value="戻る">'; print '<input type="submit" value="OK">'; print '</form>'; } ?> </body> </html>

見直してすぐに疑問だったところ二つのファイルを挙げさせてもらいます。
➀SQLやパスワードのやり取りをする上でこれで安全なのか知りたいです。
➁他のファイルなのですが、使用者側のログイン・会員登録・削除と管理側のページが行き来できる事に危険性はないのか
➂preg_match で、半角英・数字を扱う文の書き方を教えていただきたいです。

7968👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/06/11 12:58

質問が元のものから変わっています。一旦解決済みにした上で別途個別に質問されてはいかがでしょうか。
退会済みユーザー

退会済みユーザー

2017/06/11 13:26

そうですね、明日改めて書籍のコードを写したファイルを見直して投稿してみます。
guest

回答7

0

案件のレベルにもよりますが,概ね仕事で使う上で必要となってくるのは

  • MVCフレームワークの動作原理および使い方
  • Webセキュリティ
  • HTTPプロトコルの基礎
  • Linuxのコマンドライン操作
  • Gitコマンドの操作
  • Composerコマンドの操作
  • MySQLの基礎およびインデックスを用いた高速化

このあたりでしょうか。全部重要ですが,即戦力を語るなら太字にした部分ぐらいはできないと話にならないと思います。あと場合によってはDockerとかも要りますね。

また敢えて書籍の評価については触れませんが,書籍でサンプルとして作成したWebサイトと,あなたが将来的に仕事で作りたいと考えるレベルのWebサイト,どの程度一致していますか?これもまた判断指標になると思います。例えば1990年代半ばの掲示板を作るのと,TwitterやFacebookのようなSNSを作るのは格段にレベルが違います。まず後者のようなサイトはPHPだけでは実現することができず,JavaScriptに関しても深い知識が求められます。

あなたが考える「プロ」はどのレベルですか?


【追記1】

➀SQLやパスワードのやり取りをする上でこれで安全なのか知りたいです。

いろいろ直したいところはかなり多いのですが,セキュリティ的にはひとまず問題ないレベルではあります。

➁他のファイルなのですが、使用者側のログイン・会員登録・削除と管理側のページが行き来できる事に危険性はないのか

あ,そこにお気づきですか,着眼点はいいと思います。要するにこれは実用性は考えてないので,そもそも使用者と管理者が一緒くたにされています。もしこれでECサービスを作るとしたら恐ろしい話ですね。

➂preg_match で、半角英・数字を扱う文の書き方を教えていただきたいです。

「半角英数字が最低1文字含まれている」という正規表現の例としては,
/[A-Za-z0-9]/ /[a-z0-9]/i /[a-z\d]/i などいろいろ書き方はありますが,お好きなものをどうぞ。それとも

こういうものをお求めでしょうか?

あと、手が空いたら挙げていただいた項目で、お勧めの書籍などあったら教えていただきたいです。

書籍ではなくWebサイトですが…

まずこれらを読んでみて,既に書いてみた書籍のサンプルと比較するといいと思います。 "いろいろ直したいところはかなり多い" と最初に存じ上げた意味がわかると思います。

また,書籍を挙げるとすればこれですかね。

何のサポートも無しにこれだけを渡して「初心者向けの本だよ」と薦められるものではありませんが,脱初心者~中級者ぐらいの読者対象に対して難しめの内容を分かりやすくイラストつきで教えている良書だと,書店で立ち読みして感銘を受けた記憶があります。

投稿2017/06/11 08:52

編集2017/06/11 16:11
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/11 12:31

「ぼくが考えるプロのレベル」ですか・・・ 理想・目標はもちろん高い方がやりがいも、達したときの感動も、大きいと思ってます。なのでTwitter・facebookくらいの物を作ったり、phpなどを使ったゲーム作成にも関われるならそれが理想です。あと、手が空いたら挙げていただいた項目で、お勧めの書籍などあったら教えていただきたいです。
guest

0

私の身の回りで、『本に書いていることくらいは完全にマスター』して
いる人は、正直いないと思います。私も含めて。単に自分のレベルが
低いだけかもしれませんが。

それでも、周りから即戦力だと思われて、何とか案件をこなしています。
本に書いてあることは、実務のうちのごく一部だということではないかと。

一歩踏み出してみればいいんじゃないでしょうか。やってみて自分に
足りないところがもしあれば、そこで追加で勉強すればいいんだし。
別に実務をやっているから勉強できないということはないはずです。

投稿2017/06/11 13:50

hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「終わらせる」というのが、
「書籍に記述されているすべてのコードとその仕組みを理解して、自分で設計/コーディングが出来るようになっている」という事であれば、適切な監督者の居る職場/現場や、要件の緩い案件であれば即戦力になると思います。

逆に、「ざっと読んで演習問題を一回終わらせた」くらいであれば、未経験新卒で入社して数か月くらいのレベルかと思います。
場合によってはこの状態でプロとして仕事を出来る場合もありますし、そうではない場合もあります。

(仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)

「仕事になる」というのが、どのレベル/形態を想定されているのかを明確にすると、良い回答があるかもしれません。
例えば、

  • フリーランスとして一人で完結する様な小規模案件を取ってみたい
  • フリーランスとして専門家の知識が当然求められる現場にジョインしたい
  • 新卒/第二新卒/未経験中途採用といった枠でエンジニアになりたい
  • 法人を設立して、受託開発を本格的に行いたい
  • 自社サービスを開発して売りたい

など、エンジニアとしてのスキル以外に必要なことが求められるケースとそうでないケースなど様々あります。

ただ、サイトにしても学校にしても書籍にしても、
実務を行わずに実務レベルの能力を習得するのは基本的にとても難しいことなので、
最終的に自分がしたいことを明確にしたうえで、可能な範囲/時期に実務に取り組むほかないかと思います。

投稿2017/06/11 09:11

tanat

総合スコア18716

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/11 12:23

挙げてくださった事はどれもやってみたい事ではあるのですが、現状は「自分でできて、尚且つ安全に制作物を提供でき、それによって収入を得られるようになる事」が目標なので、挙げていただいた項目で 3>1>2>4>5という選択肢が優先順位の妥当なつけ方なのかな?と思っています。 なので、実際・実態がまず知りたいという感じです。
tanat

2017/06/11 13:11

> なので、実際・実態がまず知りたいという感じです。 という事であれば、「実務経験無しで即戦力というのは書籍やサイトでどうこうなるものでは無い。(天才なら可能)」というのが回答になります。 *書籍での学習が無駄だと言っているわけではありません。取り掛かりとしては非常に有効だと思います。 ただ、回答の補足になりますが本当に書籍を丸ごと理解しているのであれば(例えば、書籍のコードを一切見ずに同じアプリケーションを設計/実装が完了出来る)レベルであれば、「学生アルバイトや未経験新卒エンジニアとしては」即戦力と言えるケースが結構あるかとも思います。
退会済みユーザー

退会済みユーザー

2017/06/11 13:25

それならば、書籍を見て作ったファイルを理解するためのノートを作り、手順を書きこんでいくという やり方が必須でしょうか。 やっぱり、見たものをすぐに覚える・理解する・実践できるような天才に近づきたいです(苦笑) 話が逸れました。どういう勉強方法・実践をしているのか教えていただけませんか?
mpyw

2017/06/11 14:52

コツコツ積み上げるタイプの友人はメモ用のWebサービス(名前思い出せない)を使ってMarkdownでいろいろメモしてましたね。それで,ある程度まとまった文章が書けるようになってきたら,自分だけではなく他人へ啓示する目的も含めてQiitaに書く,という感じでした。
tanat

2017/06/12 13:11

> それならば、書籍を見て作ったファイルを理解するためのノートを作り、手順を書きこんでいくという やり方が必須でしょうか。 覚え方/学習の仕方は人によるとしか言えないと思います。 とにかくコードを書いたり作ったりした方が学習が早い人もいますし、特定の言語ではなく情報処理やプログラム、アルゴリズムの基礎からじっくりやった方が結果的に早い人もいます。 *私の場合は「気付けばプロ並PHP」と似たようなレベルの書籍で作ったアプリケーションを自分で作ってみる、わからないところがあったらそこが理解していないところなのでもう一度書籍を読んで理解していないところを確認する。という事をしました。 著者が厳選してくれている、初心者にとって必要だと思われるごく限られた範囲についてまず十分に理解するというのが、次のステップに行くための近道だと思っています。
guest

0

「気付けばプロ並PHP」の内容を確認してみました。
ショッピングサイトを一から作るという学習方法みたいですね。
これをやり終えてから質問者様はこれ以外に実際に何かサイトを作りましたか?
PHPの仕事はショッピングサイトだけではないので、ショッピングサイト以外のサイトを何かひとつでもいいので作ってみることをお勧めします。

「即戦力」として仕事ができるのでしょうか?

どんな本をやったとしても「即戦力」は無理だと思います。
「即戦力」になるには、やはり経験です。
本に書いてあった通りの仕事があれば即戦力になれるでしょうけど、そんなのありませんからね。
どんな内容の仕事にも柔軟に対応できる力がないと、即戦力にはなれません。
即戦力にこだわらず、ある程度の技術を身に着けたら、どこかの会社に入った方が良いと思いますよ。

投稿2017/06/12 00:29

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/12 06:15

今回BAに選ばせていただいたtanatさんの[書籍に記述されているすべてのコードとその仕組みを理解して、自分で設計/コーディングが出来るようになっている]事を目指すという事でしょうか。 先週末に書籍を完遂したばかりなので次の情報収集をしている段階です。 しかし、自分でwebサービスを立ち上げるにしても構想・立案が要りますね… 少し時間かかりそうです。 どこかの会社に入る、を念頭に活動をしてみようと思ってます。
ttyp03

2017/06/12 06:27

tanatさんの回答とは相反しますが、書籍に書かれていることを全て理解する必要はないと思います。 もちろん全て理解していれば良いですが、良く使うものは覚えるにしても、使用頻度が少ないようなものまで頭に叩き込む必要はないと思います。 必要になった時に、「そういえばあの本に書いてあったな」と読み返せばよいのです。 webサービスとまでいかなくても、個人的に使うツールであったり、どこかのサイトの真似であったり、そんなものを作ってみると良いと思います。 要は、書籍のように答えがあるものではなく、答えがないものを自力で作ってみた方が良いということです。
guest

0

○○を読み込んだら「即戦力」とかないですよ
本の課題なんていくらこなしたところで、基本的に答えがあることばかりでしょう
実務でいろいろな経験をして、いろいろ冷汗かいて、やっと即戦力じゃないでしょうか?
仕事を甘く考えすぎです
もちろんコピペコーダーなら即戦力かもしれませんが、そういうことじゃないんですよね

投稿2017/06/11 10:32

編集2017/06/11 10:35
dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

即戦力ってどのような現場を想定しているんでしょうか。
気にするくらいならどこでもいいから現場に入って仕事をしてみるといいでしょう。
知識や技術を身に着けただけでは仕事はできないというを自らの身をもって経験してからが始まりです。

投稿2017/06/11 11:35

編集2017/06/11 11:37
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

セキュリティ面で本に書いてあることなら、それを破ろうとするような方はもっと上の知識を持ってるでしょう。即戦力といわれるためには+αが必要なんじゃないでしょうか。その現場のレベルが低ければ即戦力と呼ばれるかもしれませんね。

投稿2017/06/11 08:41

編集2017/06/11 08:42
toutou

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問