Halu_wimps
@Halu_wimps (シガラキ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPのデータの受け渡しがうまくできない、教えてください(><)

解決したいこと

今勉強のためにCRUD処理を行っているのですが、
DELETE処理を行うために削除項目を選択しOKを押した後
完了画面に移動しそこにDELETE文を記述しているのですが完了画面に映る際うまくデータが飛んでくれてない状態でなぜダメなのか自分ではまだ気づけていないので 

ご指摘をいただきたいです!

発生している問題・エラー

Warning: Undefined array key "code" in 
C:~~\delete_done.php on line 13

削除項目を選択する画面

list.php
    $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>';

}

ページ移行画面

branch.php
if(isset($_POST['delete'])==true){

    if(isset($_POST['staffcode'])==false){
        header('Location:staff_ng.php');
        exit();
    }
    
    $staff_code = $_POST['staffcode'];
    header('Location:staff_delete.php?staffcode='.$staff_code);
    exit();
}

削除していいかの確認画面

check.php
    $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 'ただいま障害により大変ご迷惑をおかけしております。<br/>申し訳ございません。';
    exit();

}

?>

スタッフ削除<br/>
<br/>
スタッフコード<br/>
<?php print $staff_code; ?>
<br/>
スタッフ名<br/>
<?php print $staff_name; ?>
<br/>
このスタッフの情報を削除してもよろしいですか?<br/>
<br/>
<form  method="post" action="staff_delete_done.php">
    <input type="button" onclick="history.back()" value="戻る">
    <input type="submit" value="OK">
</form>

エラーが起きている完了画面(エラー箇所は $staff_code = $_POST['code'];)

done.php
    $staff_code = $_POST['code'];

    $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 = 'DELETE FROM mst_staff WHERE code=?';
    $stmt = $dbh->prepare($sql);
    $data[] = $staff_code;
    $stmt->execute($data);

    $dbh = null;

自分で試したこと

POSTをGETにしたりなどは試したのですがダメで自分では気づけないためどうかご指摘をお願いします(><)

0

3Answer

code も staffcode もフォームの中に無いみたいですね

<form  method="post" action="staff_delete_done.php">
    <input type="button" onclick="history.back()" value="戻る">
    <input type="submit" value="OK">
</form>
1Like

POSTメソッドで値を渡せるのはそのリクエストだけです。
確認画面のような間に1画面挟んでそのまま次の画面に引き継ぐことはできません。

手っ取り早く受け渡すには改めてinputタグなどを設定する方法があります。
ただし、この方法は実際に公開するサービスで使うのはリスクがあったりします。HTMLはいくらでも書き換えることができるので、途中のチェックなどが無意味になります。

一定期間ユーザーのデータを残しておきたい時はセッションが利用できます。

勉強のためということなので、それぞれやってみるのが良いと思いますよ。

1Like

Comments

  1. @Halu_wimps

    Questioner

    なるほど・・・
    いろいろとありがとうございます!!
    また調べて試してみます!!

エラーメッセージ Undefined array key "code"にあるように'code'キーが無いことが原因です。そして実際、formの中でcodeの名前をもつinputがありません。

0Like

Comments

  1. @Halu_wimps

    Questioner

    回答していただきありがとうございます!!
    質問をした後に”code”ではなく、”staffcode”でも試してみたんですが、
    エラー内容が全く変わりませんでした。。。(´;ω;`)
  2. エラー内容が全く変わらなかったのだとしたら、それは何も変更されていなかった(変更して試してみたつもりでしかなかった)からです。
  3. @Halu_wimps

    Questioner

    Undefined array key "staffcode" in
    変更はできていたのでcodeからstaffcodeには変更されたのですがそのほかの部分が変更されなかったんです。(´;ω;`)
  4. PHPの公式ドキュメントを先に読んでおいて欲しいのですが、$_POSTはPOSTメソッドでしか値を得られません。staffcodeに変更してキーが無いというエラーが出たのであれば、formの中のinputを書き間違えているか、GETメソッドにしているかどちらかです。
    https://www.php.net/manual/ja/reserved.variables.post.php
  5. @Halu_wimps

    Questioner

    URLまでありがとうございます!!

Your answer might help someone💌