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

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

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

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

Q&A

3回答

1704閲覧

PHP 間違いが分かりません

ireina

総合スコア1

PHP

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

0グッド

1クリップ

投稿2020/06/08 07:26

編集2020/06/08 08:36

前提・実現したいこと

PHP データベースからの読み込み

発生している問題・エラーメッセージ

1の和食を読み込んでほしいのですが、選択して下さい。が選ばれます。
他項目で文字の読み込みは成功しているので、おそらくifが機能していないのだと思うのですが間違いが分かりません。

該当のソースコード

情報追加用

$user="suzuki"; $pass="Suzuki8"; $recipe_name=$_POST['recipe_name']; $howto=$_POST['howto']; $category=(int)$_POST['category']; $difficulty=(int)$_POST['difficulty']; $budget=(int)$_POST['budget']; try{ $dbh = new PDO('mysql:host=localhost;dbname=db1;charset=utf8',$user,$pass); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO recipes (recipe_name,category, difficulty, budget, howto) VALUES (?,?,?,?,?)"; $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $recipe_name, PDO::PARAM_STR); $stmt->bindValue(2, $category, PDO::PARAM_INT); $stmt->bindValue(3, $difficulty, PDO::PARAM_INT); $stmt->bindValue(4, $budget, PDO::PARAM_INT); $stmt->bindValue(5, $howto, PDO::PARAM_STR); $stmt->execute(); $dbh=null; echo "レシピの登録が完了しました。"; } catch (EXCEPTION $e){ echo "" . htmlspecialchars($e->getMessage(), ENT_QUOTES,'UTF-8') . "<br>"; die(); } ?>

情報読み込み・編集用

<?php $user="suzuki"; $pass="Suzuki8"; try{ if(empty($_GET['id'])) throw new Exception('ID不正'); $id=(int)$_GET['id']; $dbh=new PDO('mysql:host=localhost;dbname=db1;charset=utf8',$user,$pass); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql="SELECT * FROM recipes WHERE id = ?"; $stmt=$dbh->prepare($sql); $stmt->bindValue(1,$id,PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); $dbh=null; } catch (EXCEPTION $e){ echo "" . htmlspecialchars($e->getMessage(),ENT_QUOTES,'UTF-8') . "<br>"; die(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>入力フォーム</title> </head> <body> レシピの投稿<br> <form method="post" action="update.php"> 料理名:<input type="text" name="recipe_name" value="<?php echo htmlspecialchars($result['recipe_name'],ENT_QUOTES,'UTF-8'); ?>"> <br> カテゴリ: <select name="category"> <option value="">選択して下さい。</option> <option value="1" <?php if ($result['category'] === 1) echo "selected" ?>>和食</option> <option value="2" <?php if ($result['category'] === 2) echo "selected" ?>>中華</option> <option value="3" <?php if ($result['category'] === 3) echo "selected" ?>>洋食</option> </select> <br> 難易度: <input type="radio" name="difficulty" value="1" <?php if ($result['difficulty']===1) echo "checked" ?>>簡単 <input type="radio" name="difficulty" value="2" <?php if ($result['difficulty']===2) echo "checked" ?>>普通 <input type="radio" name="difficulty" value="3" <?php if ($result['difficulty']===3) echo "checked" ?>>難しい <br> 予算:<input type="budget" name="howto" value="<?php echo htmlspecialchars($result['budget'],ENT_QUOTES,'UTF-8');?>">円 <br> 作り方: <textarea name="howto" cols="40" rows="4" maxlength="150"><?php echo htmlspecialchars($result['howto'],ENT_QUOTES,'UTF-8');?></textarea> <br> <input type="hidden" name="id" value="<?php echo htmlspecialchars($result['id'],ENT_QUOTES,'UTF-8'); ?>"> <input type="submit" value="送信"> </form> </body> </html>

var_dump($result['category']);の結果

int(1)

試したこと

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

papinianus

2020/06/08 07:28

$result['category'] が何であるか分かるようなところまでコードを引用してくださいますでしょうか。
m.ts10806

2020/06/08 07:44

コードはマークダウンのcode機能を利用してご提示ください
kei344

2020/06/08 07:53

var_dump($result['category']);の結果をコードブロックに入れて追記してください。
kei344

2020/06/08 08:19

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答3

0

ほぼエスパー回答です。

ご存じとは思いますが、===は厳密な型比較です。
1"1"が別物として扱われます。
$result['category']には文字列で入ってるのでは?

投稿2020/06/08 07:35

m.ts10806

総合スコア80875

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

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

yambejp

2020/06/08 07:49

十中八九それでしょうね、サーバーに渡すデータは原則として 常に文字列という認識がないのでしょう。
m.ts10806

2020/06/08 08:34

PHPの型の緩さはやはり気にはなるところです(Javaとかだとすぐ気づける)
guest

0

methodや違いや型の問題とかもあるのできちんとバリデートしてください

投稿2020/06/08 07:34

yambejp

総合スコア116724

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

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

yambejp

2020/06/08 07:34

<?PHP $result["category"]=filter_input(INPUT_POST,"category",FILTER_VALIDATE_INT); var_dump($result); ?> <form method="post"> <select name="category"> <option value="">選択して下さい。</option> <option value="1" <?php if ($result['category'] === 1) echo "selected" ?>>和食</option> <option value="2" <?php if ($result['category'] === 2) echo "selected" ?>>中華</option> <option value="3" <?php if ($result['category'] === 3) echo "selected" ?>>洋食</option> </select> <input type="submit" value="send"> </form>
yambejp

2020/06/08 08:52

あー、categoryはidに紐付いた値をDBから引っ張ってくるんですね・・・ > var_dump($result['category']);の結果 > int(1) であればselectのvalue=1のoptionにselectedがつくはずです。 HTMLのソースとして確認してみてください
guest

0

result['category']になんの値が入っているかはわかりませんが、他の方の回答にもある通り1が文字列で扱はれているのか数値で扱われているのかによって結果が変わってきます。

一度===を==に変更して見てはいかがでしょうか?

投稿2020/06/08 07:45

ponppo

総合スコア62

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

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

ireina

2020/06/08 07:49

==は試しましたが反映されませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問