0

私は過去4時間、問題を次々と抱えてこれに取り組んできました。ようやくほとんどの問題が解決した今、最終的な問題の解決策を見つけることができないようです。

問題: 学生に電子メールを送信する必要があります (電子メールは DB に保存されます)。電子メールには、リスト アイテムを含む順序付けられていないリストが必要です。その部分は簡単な部分でした (html メール)。私が今直面している問題は、値ではなく、フォームの実際の名前を取得したいということです。

値="1" 値="2"

それはフォームが何であるかについて学生に多くの情報を提供しません.

これらは私の入力フィールドです:

<label id="form"><input type="checkbox" name="form[]" value="3" >DECSP</label>
<label id="form"><input type="checkbox" name="form[]" value="4" >DESNAP</label>

値が単なる数値であることに再び気付いた場合は、DESCP と DESNAP のフォームの名前を実際に取得したいと思います。

これは私が試したものです:

$body .= '<ul>';

$forms = $this->input->post('form'); // The check boxes 
$dbforms = $this->queue_model->first10() + $this->queue_model->elev9() + $this->queue_model->twenty_5() + $this->queue_model->twen8thir7() + $this->queue_model->checklists(); // Here I take the forms from the database and combine the arrays


$givenforms = array_intersect_assoc($dbforms, $forms); // Here I do an intersect where form_id matches the value

foreach ( $givenforms as $key => $value) { // If a match is good then give me the form_name
$body .= '<li>' . $value . '</li>';
}

$body .= '</ul>';

ここからどこへ行こうか、かなり迷っています。うまくいけば、あなたたちは理解しています。

私が考えられる唯一のことは、

foreach

チェックボックスがオンになっているすべてのフォームをループし、次にクエリでループします

select * forms where form_id = (どのフォームがチェックされたか)

それから

戻る

フォームの実際の名前。

しかし、繰り返しになりますが、これが適切な解決策になるかどうかはわかりません。皆さんが渡すことができる情報を前もって感謝します。

編集1:

学生が受け取ったフォームをデータベースに保存できるように、チェック ボックスは配列にする必要があります。私の他の質問を見てください。

4

3 に答える 3

1

特定の入力フィールドに関連付けられたテキストが何であったかを PHP が知る方法はありません。クライアントから受け取るのは、キーと値のペアだけです (キーは入力フィールドの名前部分で、値は値部分です)。

ご指摘のとおり、データベースに再度クエリを実行して、対応する名前を取得できます。

または、名前を渡す他の独創的な方法を見つけることもできます。そのような:

  • すべての入力フィールドのキー/名前のペアを含む、配列の文字列表現を含む非表示の入力フィールドを作成します。

  • いくつかのJSを使用して、非表示の入力フィールドを選択した入力フィールドの名前で更新できます

  • と を使用して、各入力フィールドに非表示の入力フィールドを設定しname="hiddenInput_3"ますvalue="DECSP"。これで、入力フィールドの値を非表示の入力フィールドの名前に関連付けて、PHP 側で名前を取得できるようになりました。

警告: これらは単なるアイデアであり、簡単に変更される可能性があるクライアント側を介してデータを渡すため、上記のいずれも実行しないことをお勧めします。最善の方法は、データベースに再度クエリを実行するか、後で使用するためにセッションに入力配列を保存することです。

于 2013-04-10T22:52:11.687 に答える
0

これは非常にうまく機能し、驚くほど高速です。私は待ち時間に気付かなかったので、神に感謝します。

同様のことをしたい他の人のためのコード:

入力欄:

<label id="form"><input type="checkbox" name="form[]" value="4" >DESNAP</label> // Yes I know id should be unique I will change that class asap!

            ...............................................
            $body .= '<ul>';

            foreach ($this->input->post('form') as $form_id) {
                $forms[] = $this->queue_model->getform($form_id);
            }

            foreach ($forms as $givenform) {
                $body .= '<li>' . $givenform . '</li>';
            }

            $body .= '</ul>';
           ............................
           $this->email->message($body);

そして完成した結果:

ここに画像の説明を入力

于 2013-04-10T23:05:57.923 に答える
0

ここでいくつか変更する必要があります。

<label for="DECSP">DECSP</label><input type="checkbox" name="DECSP" value="3" />

そしてphpで:

$value = $_POST['DECSP'];
于 2013-04-10T22:42:14.037 に答える