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

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

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

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

Q&A

解決済

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

arichanstudy
arichanstudy

総合スコア3

PHP

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

1回答

0グッド

1クリップ

246閲覧

投稿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/ツールのバージョンなど)

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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 表示時のみ利用すべき。

回答1

1

ベストアンサー

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

php

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

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

php

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

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

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

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

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

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

投稿2022/11/16 02:12

ryu_wtd.

総合スコア29

arichanstudy❤️を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

arichanstudy

2022/11/17 02:52

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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