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

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

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

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

Q&A

解決済

1回答

479閲覧

スタッフ修正画面のパスワードが一致しない、スタッフ名を受け取れていない。

arichanstudy

総合スコア8

PHP

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

0グッド

1クリップ

投稿2022/11/15 03:53

編集2022/11/15 06:41

前提

気付けばプロ並みphpという教材の復習としてなるべく本書を見ないようにしながらスタッフの追加画面を作成しています。
staff_add.phpからname, pass, pass2を受け取ってstaff_add_checkに受け渡すというふうなものを作ろうとしたのですが、どうにもうまく行きません。
どなたか問題箇所や修正した方が良い箇所を教えていただけると嬉しいです。

実現したいこと

スタッフ名を受け取り、パスワードとパスワード2が一致しているか確かめる。

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

スタッフ名が受け取れていない。
パスワードとパスワード2がどうしても一致せず、もう一度入力してくださいと表示されてしまう。

該当のソースコード

staff_add.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> スタッフの追加<br> <form action="staff_add_check.php" method="post"> スタッフ名を入力してください。<br> <input type="text" name="name"> <br> パスワードを入力してください。<br> <input type="password" name="pass"> <br> パスワードをもう一度入力してください。<br> <input type="password" name="pass2"> <br> <input type="button" onclick='history.back()' value='戻る'> <input type="submit" value="OK"> </form> </body> </html> staff_add_check.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <?php $staff_name = filter_input(INPUT_POST, 'name'); $staff_pass = filter_input(INPUT_POST, 'pass'); $staff_pass2 = filter_input(INPUT_POST, 'pass2'); $staff_name = htmlspecialchars($staff_name, ENT_QUOTES, 'UTF-8'); $staff_pass = htmlspecialchars($staff_pass, ENT_QUOTES, 'UTF-8'); $staff_pass2 = htmlspecialchars($staff_pass2, ENT_QUOTES, 'UTF-8'); if ($staff_name = '') { echo 'スタッフ名が入力されて居ません'; } else { echo 'スタッフ名 <br>'; echo $staff_name; echo '<br>'; } if ($staff_pass = '') { echo 'パスワードを入力してください'; } if ($staff_pass != $staff_pass2) { echo 'パスワードが一致しません'; } if($staff_name = '' || $staff_pass = '' || $staff_pass != $staff_pass2) { echo '<form>'; echo '<input type="button" onclick="history.back()" value="戻る">'; echo '</form>'; echo $staff_name; echo $staff_pass; echo $staff_pass2; } else { $staff_pass = md5($staff_pass); echo '<form action="staff_add_done.php" method="post">'; echo '<input type="hidden" name="name" value="'.$staff_name.'">'; echo '<input type="hidden" name="pass" value="'.$staff_pass.'">'; echo '<br>'; echo '<input type="button" onclick="history.back()" value="戻る">'; echo '<input type="submit" value="OK">'; echo '</form>'; } ?> </body> </html>

試したこと

どれかが空白もしくは、パスワードが一致しない場合に戻るボタンの下にスタッフ名、パスワード、パスワード2を表示させるようにして確認しましたが、パスワードが一致していても一致して居ないと表示されて居ました。また、スタッフ名が数字の1と表示されて居ました。
間違えがないか繰り返し教科書を見ながら確認しました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

yambejp

2022/11/15 03:55

ソースのマークアップをきちんとしてください
m.ts10806

2022/11/15 05:06 編集

if ($staff_name = '') { if ($staff_pass = '') { if($staff_name = '' || $staff_pass = '' || $staff_pass != $staff_pass2) 代入。
m.ts10806

2022/11/15 05:07

$staff_name = htmlspecialchars($staff_name, ENT_QUOTES, 'UTF-8'); $staff_pass = htmlspecialchars($staff_pass, ENT_QUOTES, 'UTF-8'); $staff_pass2 = htmlspecialchars($staff_pass2, ENT_QUOTES, 'UTF-8'); 加工した文字列を受け取って判定に使ったりDBに登録したりするのはNG 表示時のみ利用すべき。
guest

回答1

0

ベストアンサー

既にコメント内でも指摘がありますが、提示されたソースコードみると

php

1if($staff_pass = ' '){ 2 ~ 3}

のような記述がみられます。
しかし、二つの値を比較したい場合は下記のように

php

1if($staff_pass == ' '){ 2 ~ 3}

イコールを二つ記述する必要があります。

これは初学者がよく陥りがちなミスでテキストエディタが指摘してくれないため、私もよく同じようなことで躓いた経験があります。

"!="は正しく使えているので、"!"の部分を"="に置き換えると同じかどうかが比較できると考えると覚えやすいかもしれません。

また、
イコールは
1つで代入
2つで値を比較
3つでデータ型も含めた厳密な比較
とこれを機にしっかり覚えて同じミスを繰り返さないようにしましょう。

自分で書いたコードについては他人が見れば一目でわかるような単純なミスでも気づけないということがこの先も多々あると思いますので、学習目的だとしても今回のように自分のコードを他人に見てもらうことは非常に大事なことだと私は思います。

投稿2022/11/16 02:12

ryu_wtd.

総合スコア29

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

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

arichanstudy

2022/11/17 02:52

解答だけではなく、丁寧に説明してくださってありがとう御座いました!イコールの意味の違いの覚え方がとてもわかりやすかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問