2016-12-31 12 views
0

私は現在、学校の計算結果プロジェクトをPHPで作業しています。私は特定の科目に登録したすべての生徒を取得するページを持っています。 whileループは、各生徒の名前(CA1、CA2、および試験)に対して3つのテキストボックスを生成します。誰でも解決策を教えてくれますか?フォームが送信されると、最後のエントリだけがデータベースに入ります。以下は私のコードです。whileループで動的に生成されたテキストボックスから複数の投稿を投稿するには

<?php 
session_start(); 
include 'header_staff.php'; 

$subject=$_POST['subject']; 
$user_id=$_SESSION['user_id']; 
$get=mysql_query("SELECT * FROM staffrecord WHERE user_id='$user_id'",$conn); 
$go=mysql_fetch_array($get); 
$class=$go['class_id']; 
$sql=mysql_query("SELECT * FROM student_enrollment WHERE class_id='$class' AND subject_id='$subject'",$conn); 
echo '<form action="submitrslt.php" method="post">'; 
while($subj=mysql_fetch_array($sql)){ 
echo $subj['name']; 
echo '<input type="text" name="ca1" />'; 
echo '<input type="text" name="ca2" />'; 
echo '<input type="text" name="exam" /><br><br>'; 
} 
echo '<input type="submit" value="submit" />'; 

?> 
+0

私が示唆している最初のものは 'mysql_ *を'使用しないことです。 :) –

+1

ユニークな入力を作成する –

答えて

0

あなたの問題を解決するには、単に入力名に[]を追加して、入力配列を使用することです:

while($subj=mysql_fetch_array($sql)){ 
    echo $subj['name']; 
    echo '<input type="text" name="ca1[]" />'; 
    echo '<input type="text" name="ca2[]" />'; 
    echo '<input type="text" name="exam[]" /><br><br>'; 
} 

さらに、あなたはそれぞれにインデックスとしてあなたのテーブルの主キーを使用することができます反復(のはこれが$subj['id']だろうと仮定してみましょうが、それはあなたのケースで、より意味があるならば、あなたはまた、インデックスとして$subj['name']を使用することができます):

while($subj=mysql_fetch_array($sql)){ 
    echo $subj['name']; 
    echo '<input type="text" name="ca1[<?php echo $subj['id'] ?>]" />'; 
    echo '<input type="text" name="ca2[<?php echo $subj['id'] ?>]" />'; 
    echo '<input type="text" name="exam[<?php echo $subj['id'] ?>]" /><br><br>'; 
} 

このようにして、ポストの後に結果の配列から値を簡単に識別できます。

PS:あなたはそれを検証したり消毒せずにユーザー入力を信用したことがないことを確認してください - $_POST['subject']が数値であることを確認してください。これを達成するためのヒントをたくさん見つけることができます。私は、コメントを追加した

+0

本当に助けられました。私はforeachループを使って、ca1 ca2とExamからすべての配列の値を対応する生徒の列に取得しました –

0

、これは私があなたの被験者のデータはループのために一意であると仮定していますあなたの問題を解決します。そして私はそれをユニークにするサブジェクト名で入力を定義しました。ちょうど例のためにあなた自身の方法を試すことができます。これにより、アクション(フォームポスト)画面のすべてのポスト変数が出力されます。

<?php 

while($subj=mysql_fetch_array($sql)){ 
$subname = str_replace(' ','', $subj['name']); //just to replace the space 
echo $subj['name']; 
echo '<input type="text" name="'.$subname.'_ca1" />'; //to make the field unique for the input entries 
echo '<input type="text" name="'.$subname.'_ca2" />'; 
echo '<input type="text" name="'.$subname.'_exam" /><br><br>'; 
} 
echo '<input type="submit" value="submit" />'; 
echo '</form>'; 
?> 
0

まず、私は、それが非推奨されていないことを除いてmysqlのと非常に似た構文を次のmysqliのための接続を変更することをお勧め。

第二に、フォームはテキストボックスとボタンを提出は任意の一意の識別子を持っていない、あなたが入力フィールドのそれぞれに独自の「ID」に入れてみてください可能性があることを除いて、正常に見えます。ループはすべての入力フィールドを1つのフォームで結合しているので、これはおそらく原因です。さらに、フォームの終了タグ、つまり</form>が表示されません。

最後に、あなたは、このような$ _POST []としてスーパーグローバルを処理するためのfilter_inputを調べる必要があります。

私はすべてのフィールドを一度ではなく、個別に提出されることを意図していると仮定しますか?

関連する問題