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

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

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

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

975閲覧

PHP自学中 商品がテーブルに追加されない。

ema-material

総合スコア29

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/06/26 10:50

編集2021/06/26 19:42

お世話になっております。
書籍「気づけば プロ並み PHP改訂版」を見ながら自学中です。
書籍通りに挙動せず困っております。

「OK」ボタンは表示されましたので
入力した「にんじん」「198」がphpMyadmin内のmst_productテーブルに追加されるまで持ち込みたいです。

イメージ説明

どうぞよろしくお願いします。
以下codeです。

##pro_add.php

php(html)

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7<body> 8 9商品追加<br /> 10<br /> 11<form method="post" action="pro_add_check.php"> 12商品名を入力してください。<br /> 13<input type="text" name="name" style="width:200px"><br /> 14価格を入力してください。<br /> 15<input type="text" name="price" style="width:50px"><br /> 16<br /> 17<input type="button" onclick="history.back()" value="戻る"> 18<input type="submit" value="OK"> 19</form> 20 21</body> 22</html>

##pro_add_check.php

php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7<body> 8 9<?php 10 11$pro_name=$_POST['name']; 12$pro_price=$_POST['price']; 13 14$pro_name=htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 15$pro_price=htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8'); 16 17if($pro_name=='') 18{ 19 print '商品名が入力されていません。<br />'; 20} 21else 22{ 23 24 print '商品名:'; 25 print $pro_name; 26 print '<br />'; 27} 28 29if(preg_match('/^[0-9]+$/',$pro_price)==0) 30{ 31 32 print '価格をきちんと入力してください。<br />'; 33} 34else 35{ 36 print '価格:'; 37 print $pro_price; 38 print '円<br />'; 39} 40 41if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0) 42{ 43 44 45 print '<form>'; 46 print '<input type="button" onclick="history.back()" value="戻る">'; 47 print '</form>'; 48 49} 50else 51{ 52 53 54 print '上記の商品を追加します。<br />'; 55 print '<form method="post" action="pro_add_done.php">'; 56 print '<input type="hidden" name="name" value="'.$pro_name.'">'; 57 print '<input type="hidden" name="price" value="'.$pro_price.'">'; 58 print '<br />'; 59 print '<input type="button" onclick="history.back()" value="戻る">'; 60 61 print '<input type="submit" value="OK">'; 62 print '</form>'; 63} 64 65?> 66</body> 67</html>

##pro_add_done.php

PHP

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7<body> 8 9<?php 10 11try 12{ 13var_dump(1); 14//exit(); 15$pro_name=$_POST['name']; 16$pro_price=$_POST['price']; 17 18$pro_name=htmlspecialchars($pro_name); 19$pro_price=htmlspecialchars($pro_price); 20 21$dsn='mysql:dbname=shop;host=localhost;charset=utf8'; 22$user='root'; 23$password=''; 24$dbh=new PDO($dsn,$user,$password); 25$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 26var_dump(2); 27exit(); 28$sql='INSERT INTO mst_product(name,price) VALUES (?,?)'; 29$stmt=$dbh->prepare($sql); 30$data[]=$pro_name; 31$data[]=$pro_price; 32$stmt->execute($data); 33 34$dbh=null; 35 36print $pro_name; 37print 'を追加しました。<br />'; 38 39 40} 41catch(Exception $e) 42{ 43 print'ただいま障害により大変ご迷惑をお掛けしております。'; 44 exit(); 45} 46 47?> 48 49<a href="pro_list.php">戻る</a> 50 51</body> 52</html>

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

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

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

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

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

m.ts10806

2021/06/26 10:53

>書籍「気づけば プロ並み PHP改訂版」を見ながら 回答依頼いただきましたが、改訂版とはいえ、上記書籍の時点で「参考書を変えてください」が先に来ます。
m.ts10806

2021/06/26 11:11

>if($pro_name==''||preg_match('/¥[0-9]+¥z/',$pro_price)==0) これがtrueならOKボタンは出力されないと思いますが、デバッグはどこまでされてますか?
ema-material

2021/06/26 11:57

失礼しました。 if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0) に書き換えたところ、OKボタン表示とともに次に進むことができました。この本誤植が多いのですね。。。
ema-material

2021/06/26 12:09

pro_add_done.php側のデバッグですが 以下のように探している最中です。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try { var_dump(1); //exit(); $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $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); var_dump(2); exit(); $sql='INSERT INTO mst_product(name,price) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $stmt->execute($data); $dbh=null; print $pro_name; print 'を追加しました。<br />'; } catch(Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html>
m.ts10806

2021/06/26 22:10

>この本誤植が多いのですね。。。 いえ、誤植よりも実装としてプロには程遠いものが多いという評判です。 「プロ並み」とは名前だけのものです。
ema-material

2021/06/26 23:04

もしお時間お手間などよろしければ、カート実装までのスキルが身に付く (XAMPPからの移行を前提で記載してあるような)PHP書籍があればご推薦いただけますと助かります。。。
guest

回答2

0

質問の表題である
「商品がテーブルに追加されない」は解決しました。
まだ、作成途中なのですが、全面的に理解しましたらこちらの解決方法欄にまた投稿します。

たしかにテキストを疑ってかかるのも大事です。
まるっと信じないこと。
m.ts10806さんのおっしゃるとおりでした。

投稿2021/06/27 11:33

ema-material

総合スコア29

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

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

ema-material

2021/06/28 10:10

PHPの記述がXAMPPの設定に追い付いていないのが原因でした。この段階でのエラーはテーブルから「gazou」を削除することで解決しました。
guest

0

ベストアンサー

php

1if($pro_name==''||preg_match('/¥[0-9]+¥z/',$pro_price)==0)

ここの判定が真でないときに OK ボタンを表示しているので、ここの判定が期待する動作になっていないと思われます。
preg_match() に指定している '/¥[0-9]+¥z/' の部分は正規表現という特殊な文字列になりますが、こちらの指定方法は理解されていますでしょうか。その直前にもおそらく同じ判定をしていると思われる処理があるので、それと見比べてみましょう。:-)

php

1if(preg_match('/^[0-9]+$/',$pro_price)==0)

参考) パターン構文

投稿2021/06/26 14:51

yh1224

総合スコア653

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

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

ema-material

2021/06/26 19:27

ありがとうございます。 if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0) に書き換えたところ、OKボタン表示とともに次に進むことができました。 pro_add_done.php側のデバッグですが 以下のように探している最中です。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try { var_dump(1); //exit(); $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $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); var_dump(2); exit(); $sql='INSERT INTO mst_product(name,price) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $stmt->execute($data); $dbh=null; print $pro_name; print 'を追加しました。<br />'; } catch(Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html>
ema-material

2021/06/26 23:14

正規表現についてですが、html側の入力フォームの指定でもよく使いますので、把握できておりました。それがPHP記述内のこの結果にどう繋がるのかよくわからなかったです。ありがとうございます。なお、まだテーブルには書き込めていないので、なにかありましたらご意見いただけますと助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問