blue-chicken
@blue-chicken

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

getパラメーターの値を保持したい/値を更新したい

解決したいこと

現在MAMPのローカル環境で日報登録システムを作成しております。行いたい動作は、
①ログイン時にidを取得。
②idに基づき、データベースより業務リストを取得。
③selectにより、当月とは異なる月の業務リストを取得。
※ただし、ログイン時のidをgetパラメーターに保持もしくは、
 更新することで、パラメーターにidを表示させ続けたい。

現状、他の月を選択すると、パラメーターからid情報が消えて
しまいます。

解決方法を教えて下さい。
宜しくお願いいたします。

恐らく該当するソースコード

<php側>
//対象ユーザーのIDをパラメーターから取得
    $user_id = $_REQUEST['id'];

<HTML側>
<select class="form-select rounded-pill my-3 w-auto" name="m" onchange="submit(this.form)">
                <option value="<?= date('Y-m') ?>"><?= date('Y/m') ?></option>
                <?php for ($i = 1; $i < 12; $i++) : ?>
                    <?php $target_yyyymm = strtotime("-{$i}month"); ?>
                    <option value="<?= date('Y-m', $target_yyyymm) ?>" <?php if ($yyyymm == date('Y-m', $target_yyyymm)) echo 'selected' ?>>
                        <?= date('Y/m', $target_yyyymm) ?></option>
                <?php endfor; ?>
</select>

参考写真。ここでは、getパラメーターに?id=2と表示されていますが、「他の月」を選択すると、id=2が消えて、mの値だけになってしまいます。mとidを両方表示させたいです。
スクリーンショット 2022-07-12 23.21.24.png

なぜidを残したままmの値を表示させたいのか

・このままではgetパラメーターの値を書き換えて、該当ページにたどり着くことができます。
 従って、ログイン時に取得したidがgetパラメーターになければエラーページに遷移させたく
 考えております。
・mの値によって、選択した月の業務リストを参照しています。

宜しくお願いいたします。

0

1Answer

<select class="form-select rounded-pill my-3 w-auto" name="m" onchange="submit(this.form)">
...
...
</select>

日付の変更が起きたらsubmitというjavascriptの関数を呼んでる訳ですよね?その中身が分からないですが、単純にこの関数に$user_idというPHPの変数をどうにか渡せてないと言うだけなのでは?

  • $user_idはPHPの変数です
  • PHPはhtmlなどのファイルを動的に生成してクライアントに送ります
  • 動的に生成する際に$user_idは何らかの形で変数からただの文字列になってないとクライアント側で使えません(どうにでもやろうと思えば色々なやり方はありますが)
  • 通常考えるなら、このselectがあるform内に<input type="hidden" ...>という形で埋め込んだり
  • submitというjavascriptをこのページのHTML上にベタ書きしているとかなら、その関数内で参照できる変数として埋め込んだり
<form>
  <input type="hidden" name="user_id" value="ここにPHPの変数を文字として出力する..とか"/>
  <select class="form-select rounded-pill my-3 w-auto" name="m" onchange="submit(this.form)">
  ...
  ...
  </select>
</form>


<script type="text/javascript">

  function submit(form){
    const userId = "ここにPHPの変数を文字として出力する..とか";
    ...
  }

</script>
1Like

Comments

  1. @blue-chicken

    Questioner

    ご回答ありがとうございます。
    <input type="hidden" name="id" value="<?= $user_id ?>">を
    form内に記載することで解決できました。
    hiddenは、「フォームで入力した値を保持して、遷移したいファイルに送る」と誤って認識しておりました。実際は、「他の動作でも値を遷移したいファイルに送ることができる?」ことを理解いたしました。
  2. @blue-chicken

    Questioner

    まだ、上手く説明できませんが、hiddenについて考え直します。
    宜しくお願いいたします。

Your answer might help someone💌