LoginSignup
1
1

More than 3 years have passed since last update.

【解決済】PHPerの方HELP! ~『気づけばプロ並みPHP』を使った学習①~

Last updated at Posted at 2019-05-17

【解決しました!ありがとうございます。後学のために記事は残します】

Webアプリケーション開発の勉強をしたく、『気づけばプロ並み PHP(改訂版)』を使って学習中です。
超初歩的な部分かと思いますが、下記の点で詰んだため、親切なPHPerの方がいらっしゃいましたらお助けください(`;ω;´)!

システム概要

スタッフの情報登録や削除を行うページを作成中です。
下記1~3の順に推移しますが、情報の受け渡しがうまくできていないように見受けられます。
1.スタッフ一覧(staff_list.php)
2.分岐ページ (staff_branch.php)
3.編集ページ (staff_edit.php)

※参考画面(1,3)-------------------------------
image.png
↓分岐ページで編集か削除を選択し・・・
image.png

問題点

1)分岐ページでGETでeditかdeleteを渡したいが、URLに表示されていない
 (想定ではstaff_edit.php?staffcode=10 となるはずが、staffcode= で終わってしまっている)
2)編集ページでは、選択した方の名前がテキストボックスに自動的に入るようにしたいが、入らない
3)データの受け渡しできていないため、編集も完了しない。
(エラーは出ないがデータベース自体が変更されない。)

コード

スタッフ一覧(staff_list.php)

<body>
    <?php
        try{
            $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);

            $sql="SELECT code,name FROM mst_staff WHERE 1";
            $stmt = $dbh->prepare($sql);
            $stmt ->execute();

            $dbh=null;

            print "スタッフ一覧<br><br>";
            print "<form method='post' action='staff_branch.php'>";

            while(true){
                $rec = $stmt ->fetch(PDO::FETCH_ASSOC);
                if($rec==false){
                    break;
                }
                print"<input type='radio' name='staffcode' value='".$rec['code']."'>";
                print $rec["name"];
                print"<br>";
            }
            print "<input type='submit' name='edit' value='修正'>";
            print "<input type='submit' name='delete' value='削除'>";
            print "</form>";
        }catch(Exception $e){
            print "ただいま障害により大変ご迷惑をおかけしております";
            exit();
        }

    ?>
</body>

分岐ページ(staff_branch.php)

<?php
    if(isset($_POST['edit'])){
        $staff_code == $_POST['staffcode'];
        header('Location:staff_edit.php?staffcode='.$staff_code);
        exit();
    }
    if(isset($_POST['delete'])){
        $staff_code == $_POST['staffcode'];
        header('Location:staff_delete.php?staffcode='.$staff_code);
        exit();
    }
?>

編集ページ(staff_edit.php)

<body>
    <?php
        try{
            //前回からのPOSTデータを受け取る
            $staff_code = $_GET["staffcode"];

            //データベースに接続
            $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);

            //該当ユーザの情報をデータベースからもってくる
            $sql="SELECT name FROM mst_staff WHERE code=?";
            $stmt = $dbh->prepare($sql);
            $data[] = $staff_code;
            $stmt ->execute($data);

            $rec = $stmt -> fetch(PDO::FETCH_ASSOC);
            $staff_name = $rec["name"];

            //切断する
            $dbh = null;
        }catch(Exception $e){
            print'障害によりご迷惑をおかけしております';
            exit();
        }
    ?>

    スタッフ修正<br><br>
    スタッフコード<br>
    <?php print$staff_code;?><br>
    <br>
    <form method="post" action="staff_edit_check.php">
        <input type=hidden name="code" value="<?php print $staff_code;?>">
        スタッフ名<br>
        <input type=text name="name" style="width:200px" value="<?php print$staff_name;?>"><br>
        パスワードを入力してください。<br>
        <input type=password name="pass" style="width:100px"><br>
        パスワードをもう一度入力してください。<br>
        <input type="password" name="pass2" style="width:100px"><br>
        <BR>
        <input type=button onclick=history.back() value="戻る">
        <input type=submit value="OK">
    </form>
</body>

解決方法

本件解決しましたので、切り分け方法と結論をメモります。

結論

=と==の、typo でした!!!(土下座)
分岐のページで、 POSTで受け取ったデータを代入しているはずが、代入になってなかった。゚(゚´Д`゚)゚。

切り分け

有識者の方に「curlを使うといいよ!」と教えて頂き、使った結果、下記のような結果になりました。

$ curl -i -X POST -F "staffcode=10" -F "edit=修正" http://[serverIP]/staff/staff_branch.php

HTTP/1.1 302 Found
Date: Sat, 18 May 2019 00:37:41 GMT
Server: Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1
X-Powered-By: PHP/7.3.1
Location: staff_edit.php?staffcode=
Content-Length: 252
Content-Type: text/html; charset=UTF-8


Notice: Undefined variable: staff_code in C:\xampp\htdocs\staff\staff
_branch.php
on line 3



Notice: Undefined variable: staff_code in C:\xampp\htdocs\staff\staff
_branch.php
on line 4

エラーで、「Undefined Variable」が出ているので、変数のあたりを見ていた結果、気づきました。。。(`;ω;´)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1