#至らない点を教えていただきたいです。
分量が多くなってしまうので、ご迷惑をおかけします。
もし可能であれば、コードをみて、ここ変じゃない?こうしたら?
というようなアドバイスを頂けたらと思います。
飲食店の注文システムを作りました。
↓3つがお客様が使用する画面側
2つがお店の人が管理する側です。
index.php
php
1<?php 2 3class DB 4{ 5 6 function dbconnect() 7 { 8 try { 9 return new PDO ('省略'); 10 //SQLinjection対策、けど最近はディフォルトらしい⇒ array(PDO::ATTR_EMULATE_PREPARES => false) 11 12 } catch (\Exception $e) { 13 exit('データベース接続失敗。'.$e->getMessage()); 14 } 15 } 16} 17 18$dbcon = new DB; 19 20try { 21 $pdo = $dbcon->dbconnect(); 22 $stmt = $pdo->prepare('select * from menus'); 23 $stmt->execute(); 24 $menus=$stmt->fetchall(); 25} catch (\Exception $e) { 26 exit(''.$e->getMessage()); 27} 28 29require 'tindex.php'; 30 31 ?> 32
tindex.php
php
1<!DOCTYPE html> 2<html lang="ja" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width"> 6 <link rel="stylesheet" href="style.css"> 7 <title>神田まつややぶそば</title> 8 9 </head> 10 <body> 11 <article class=""> 12 <header> 13 <h1>ご注文</h1> 14 <h3> 15 いらっしゃいませ。お越しいただきありがとうございます。 <br> 16 下記のメニューより注文をお決めくださいませ。 17 </h3> 18 </header> 19 <div class=""> 20 21 </div> 22 <form class="" action="thanks.php" method="post"> 23 <?php foreach ($menus as $menu) : ?> 24 25 <section class="contents"> 26 <img src="images/<?php echo($menu['name']); ?>.jpg" alt="a"> 27 <div class="商品名"> 28 <?php echo($menu['name']); ?> 29 </div> 30 31 <div class="値段"> 32 <?php echo($menu["price"]."円"); ?> 33 </div> 34 <a class="個数">個数 35 <?php $n = $menu['name']; ?> 36 <select class="select" name=<?php echo $n; ?>> 37 <?php for ($i=0; $i <10 ; $i++): ?> 38 <option value="<?php echo $i ;?>"><?php echo $i; ?></option> 39 <?php endfor; ?> 40 </select> 41 </a> 42 </section> 43 <?php endforeach; ?> 44 <a class="人数">テーブル番号 45 <select class="select" name="table" id="table"> 46 <?php for ($i=0; $i <15 ; $i++): ?> 47 <option value="<?php echo $i ?>"><?php echo $i.番 ?></option> 48 <?php endfor; ?> 49 </select> 50 </a> 51 <a class="人数">人数 52 <select class="select" name="hito" id="hito"> 53 <?php for ($i=0; $i <30 ; $i++): ?> 54 <option value="<?php echo $i ?>"><?php echo $i.人 ?></option> 55 <?php endfor; ?> 56 </select> 57 </a> 58 <input type="submit" name="" value="注文" class="注文 button" id="submit_btn"> 59 </form> 60 </body> 61</html> 62
thanks.php
php
1 2<?php if ($_POST['table'] == 0 ) : ?> 3 4 <!DOCTYPE html> 5 <html lang="ja" dir="ltr"> 6 <head> 7 <meta charset="utf-8"> 8 <meta http-equiv=refresh content=5;URL='index.php'> 9 <title></title> 10 </head> 11 <body> 12 13 14 すみませんが、テーブル番号と人数の入力をお願い致します 15 16 17 </body> 18 </html> 19 20 <?php else : //これじゃないとだめらしい。 ?> 21 22 <!DOCTYPE html> 23 <html lang="ja" dir="ltr"> 24 <head> 25 <meta charset="utf-8"> 26 <meta http-equiv=refresh content=5;URL='index.php'> 27 <title></title> 28 </head> 29 <body> 30 御注文ありがとうございます。 31 <?php 32 33 $n = $_POST['table']; 34 35 ${"ordertable".$n} = $_POST ; 36 session_start(); 37 $_SESSION['ordertable'.$n] = ${"ordertable".$n}; 38 39 ?> 40 41 <?php endif; ?> 42 </body> 43 </html> 44
tyuubou2.php
php
1 2 3<html lang="ja" dir="ltr"> 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width"> 7 <link rel="stylesheet" href="style2.css"> 8 <title></title> 9 </head> 10 <body> 11 <article class=""> 12 <header> 13 <h1>オーダー</h1> 14 </header> 15 16 17 <?php session_start(); 18 19 foreach ($_SESSION as $ordertable => $orders) :?> 20 <?php foreach ($orders as $menu => $num): ?> 21 22 <?php if(!0==($num)){ 23 if ($menu !== 'table'&& $menu !=='hito') { ?> 24 <section class=""> 25 26 27 <div class="商品名"> 28 <?php echo $menu; ?> 29 </div> 30 31 <form class="" action="uriage.php" method="post"> 32 <a class="個数">個数 33 <select class="select" > 34 <option> <?php echo $num; ?></option> 35 </select> 36 </a> 37 <input type="hidden" name="num" value="<?php echo $num; ?>"> 38 <input type="hidden" name="menu" value="<?php echo $menu; ?>"> 39 <input type="hidden" name="table" value="<?php echo $orders[table] ?>"> 40 <input type="hidden" name="hito" value="<?php echo $orders[hito] ?>"> 41 <input type="submit" value="完了"> 42 </form> 43 44 45 <a class="右">テーブル番号 46 <select class="select" > 47 <option><?php echo $orders[table] ?></option> 48 </select> 49 </a> 50 51 52 <a class="人">人数 53 <select class="select" name="hito" >?> 54 <option><?php echo $orders[hito] ?></option> 55 </select> 56 </a> 57 58 59 </section> 60 <?php } }?> 61 <?php endforeach;?> 62 <?php endforeach;?> 63 64 <br> 65 <br><br> 66 67 </body> 68</html> 69
uriage.php
php
1<?php 2 3session_start(); 4 5//unset($_SESSION[ordertable]); 6//print_r($_SESSION); 7 8switch ($_POST[menu]) { 9 case 'もりそば': 10 $id = 0; 11 break; 12 case 'ざるそば': 13 $id = 1; 14 break; 15 case 'たぬきそば': 16 $id = 2; 17 break; 18 case 'きつねそば': 19 $id = 3; 20 break; 21 case 'かもせいろ': 22 $id = 4; 23 break; 24 case '天ぷらそば': 25 $id = 5; 26 break; 27} 28 29$ordertablen = "ordertable" .$_POST[table]; 30 31array_splice($_SESSION[$ordertablen],$id,1,0); 32 33foreach ($_SESSION[$ordertablen] as $menu => $value) { 34 if ($value == 0) { 35 $i += 1; 36 37 if ($i==6) { 38 unset($_SESSION[$ordertablen]); 39 } 40 } 41} 42 43$name = $_POST[menu]; 44switch ($name) { 45 case 'もりそば': 46 $price = 600; 47 break; 48 case 'ざるそば': 49 $price = 700; 50 break; 51 case 'たぬきそば': 52 $price = 750; 53 break; 54 case 'きつねそば': 55 $price = 800; 56 break; 57 case 'かもせいろ': 58 $price = 900; 59 break; 60 case '天ぷらそば': 61 $price = 1300; 62 break; 63} 64 65class DB 66{ 67 68 function dbconnect() 69 { 70 try { 71 return new PDO ('省略); 72 array(PDO::ATTR_EMULATE_PREPARES => false) 73 74 } catch (\Exception $e) { 75 exit('データベース接続失敗。'.$e->getMessage()); 76 } 77 } 78} 79$dbcon = new DB; 80if (ctype_digit($_POST[table])) { 81 82 try { 83 $pdo = $dbcon->dbconnect(); 84 $stmt = $pdo->prepare('insert into uriage (name,num,price)value(:name,:num,:price)'); 85 $stmt -> bindParam(':name',$name); 86 $stmt -> bindParam(':num',$_POST['num']); 87 $stmt -> bindParam(':price',$price); 88 $stmt->execute(); 89 90 echo "完了"; 91 header( "Location: tyuubou2.php直していなかったです。すいません" ) ; 92 93 } catch (\Exception $e) { 94 exit('ログイン失敗 データが該当しません。'.$e->getMessage()); 95 } 96 97}else { 98 try { 99 $pdo = $dbcon->dbconnect(); 100 $stmt = $pdo->prepare('insert into uriage (name,num,price,cname,demae)value(:name,:num,:price,:cname,1)'); 101 $stmt -> bindParam(':name',$name); 102 $stmt -> bindParam(':num',$_POST['num']); 103 $stmt -> bindParam(':price',$price); 104 $stmt -> bindParam(':cname',$_POST[table]); 105 $stmt->execute(); 106 107 echo "完了"; 108 header( "Location: tyuubou2.php" ) ; 109 110 } catch (\Exception $e) { 111 exit('ログイン失敗 データが該当しません。'.$e->getMessage()); 112 } 113} 114 115 116 ?> 117
チェックと質問は全くの別物です。
ここは質問サイトです。
別のサイトでどうぞ。
多すぎて無理です(これだけのために時間をかけるのは負担が大きすぎるし「質問」になっていない)
もっと問題を絞ってください。
仕事の依頼になっちゃってますね。
クラウドソーシングとかで依頼してみては。
本当にコードレビューしてもらいたいのでしたらMENTAとかでお金払ってきっちりやってもらってください。あくまでQAサイトです。
作業依頼、デバッグ依頼を受けるサイトではありません。
もし冗長だなと思うならその一部分を切り出して質問するなり何なりして下さい。
ここが上手く行かないというならそこを切り出して発生しているエラーを書いて下さい。
動いてるけどとりあえず見てほしいならこのサイトには合ってません
作業に対して対価を払いたくないという強い意志だけは伝わってきますね。
MENTAってサービス初めて知った。こんなのあるのか。すごいピッタリな気がする。
gentaroさん
暗にペアプロ求める質問者(そもそも質問になってないけど)にはもってこいです。
azuapricotさん
例え「省略」のようなところが埋まってても動かないコードですけどね。
タグに入ってないので気づきにくいですけど前の質問からするとLaravel利用なので(一部の記述からそこは伺える)
「Laravelの適切な組み方にそって1から作り直し」という回答ならできます。言ってしまえば「全部ダメ」なので。
MENTAって初めて聞きましたけどめちゃめちゃ良さそう・・・・
わ~良いもの知れて嬉しい
MENTAって書いたものの、この内容だとMENTA使ったとしても相当言われるのは間違いないですね。コードレビューではなく「Laravelの基本を最初から教えますね」という展開になること間違いなし。
(ただ、コードから、PHPのレベルもお世辞にも並とは言えないので相当覚悟したほうが良さそうですね)
全く本題ではないですがMENTAは価格崩壊(1ヶ月数千円とか)が激しくまともな収入源にするには厳しいし割にも合わない印象です。
報酬が発生しているだけマシとは言えますが、そのあたり従来のクラウドソーシングサービスと同じ問題を抱えていますね。
うーん確かにこれを収入源にするのはキビシイですね。お小遣い程度になるかどうかといったところでしょうか
MENTAってこのレベルの質問に対してもマンツーマンで教え続けるとか新手の拷問かな?来世のために得を積むのには良さそう。
回答がつき、解決済みとした後で修正しまくるのはよろしくないですね。
コメントなり回答をしてくれた人に失礼です。
(それに回答にはすぐに反応しておきながら、指摘事項丸々無視しっぱなしなのも悪い印象しか与えません)
>私のコードをチェックしていただけませんか。
この文言は不要ということに気づきませんか?
また「クラスやセッション、POST/GETの利用方法」だと広すぎます。
PHPマニュアル読んできましょうというところからになりますよ。
回答にも「相当低レベルの処理を入れていますので基礎ができていないように見受けられます」とある通りです。
私が最初の方に指摘として書いた「多すぎて無理です」に全て集約されていると思ってください。
質問するのは全然良いですが、問題をもっと絞るべきですし、「コード見てください」と質問する領域にはありません。
もっとポイントポイントの精度を高めていくべきでしょう。
たいはんがあおり交じりのコメントで不快だったので、無視していました。
修正したのは、指摘して頂いた通り間違っているところを直したのと、
私の質問で得た、回答がその分野についてだったので、こうしました。
タイトルはじゃあかえときますね
煽りではなくガイドラインにそった指摘がほとんどです。
https://teratail.com/help/question-tips
https://teratail.com/help/avoid-asking
「不快だった」と仰いますが「ガイドラインに沿っていない質問が投稿される」方が見ている方としては不快です。
ちゃんとしたアドバイスを得たいのでしたらちゃんとガイドラインに則ってください。
どれを煽りだと思ったのかわかんないけど、ガイドライン読めば作業依頼はNGってのがわかると思うんで、不快に思われたんならここでその依頼を行うこと自体が間違ってるだけですね。
https://teratail.com/help/question-tips
https://teratail.com/help/avoid-asking
それだけみんな真面目に読んでくれたんですよ
私みたいに表面だけサラッと読んでアラの部分だけ指摘する分には
さほど質問者さんの冗長なコードも気になりません。
逆にだらだらと書かれたものからロジック的なエラーが発生するので
なんとかして・・・的な質問だったら私は無視していたと思います
そううことなんですかね、
やんべさんのようにかいとうしていただけるのを期待していました。
そこは私の質問の仕方ですね。ガイドラインも特に読んでませんでしたし、
なので、上3つのコメントに対しては、
そうでしたかすいません。と思いましたが、件数が増えて、何度も同じこと言っていたり、関係のない話していたりで、めんどくさかったので、
ただやんべさんとmtsさんはありがとうございました。
言葉足らずなのを棚にあげると、mtsさんの言い方は、
初心者には伝わりませんでした。あとちょっととげがあります。
特に言い訳するわけではないですが、
エンジニアの特性と思ってください。
なるべく必要最小限のコメントで無駄なことを省くものです(怠慢ではないです)。
伝わらなかったのは申し訳なかったですが、そこは都度聞くなり意図を確認してもらえれば良い話で、
指摘を無視し続けることで印象が悪化していったのは言うまでもありません。
そもそも赤の他人で、誰も悪意も恨みも何も持ってないので。
ただ赤の他人故、どういう意図があっての質問なのか、質問内容に書かれていることしか伝わりません。
質問を解決する責任はあくまで質問者のみにあるので、他者に確実に「何をしようとして」「何が問題で」「自分はその問題に対してどう取り組んだのか」の3つを伝える努力はしないといけません。
はい。
気を付けます。
回答1件
あなたの回答
tips
プレビュー