2011-07-28 24 views
0

こんにちは私は、subj_idを持つフォームを持っています。ここにシナリオがあります。私はsubj_ids 1、2、3、4、6持っていますが、何が、私はそれが0の値でレコードを挿入し、プラスそれは6ループ+間違ったレコードが挿入されました

FORMのsubj_idにレコードを挿入していないフォームを送信しています毎回起こる:

<tr> 
     <td width="225"><?= $row_subjects[1];?> 
     <?php if($row_active_term[0] == '1st' && $row_active_term[1] == '1') {?> 
     <td align="center" width="225"> 
      <?php if($row_subjects['indicator'] == 'editable'){?> 
       <input type="hidden" name="subj_id_<?= $row_subjects[0]?>" id="subj_id_<?= $row_subjects[0]?>" value="<?= $row_subjects[0]?>" /> 
       <input type="text" name="grade_<?= $row_subjects[0]?>" id="grade_<?= $row_subjects[0]?>" size="5" value="<?= number_format($row_subjects[4], 1)?>" /> 
      <?php } else {?> 
       <a href="#" title="This is your downfall">?</a> 
      <?php } ?> 
     </td> 
     <?php } ?> 
    </tr> 

投稿: これは悪いコードがある場所だと思います。 。 。

<?php 
include('conn.php'); 
$uid = $_SESSION['uid']; 
$rs_count_subjs = mysql_query("select count(*) as x from teachers_subjects where tid = $uid"); 
$row_count_subjs = mysql_fetch_array($rs_count_subjs); 
$x = $row_count_subjs['x']; 
$term = $_POST['term']; 
//echo "select count(*) as x from teachers_subjects where tid = $uid"; 

$rs_subjs = mysql_query("select * from teachers_subjects where tid = $uid"); 
$row_subjs = mysql_fetch_array($rs_count_subjs); 

for($i=0; $i<=$x; $i++) { 
$t = $row_subjs[0]; 
$sid = $_POST['sid']; 
$s = $_POST['subj_id_'.$i]; 
$y = $_POST['grade_'.$i]; 
$rs = mysql_query("select * from student_friggin_grades where sid = '$sid' AND subj_id = '$s' AND term = '$term' AND tid = $uid"); 
$row = mysql_fetch_array($rs); 
$num = mysql_num_rows($rs); 
    if($num > 0) { 
     $update_grade = "update set grade = '$y' where sid = '$sid' AND subj_id = '$s' AND term = '$term' AND tid = $uid"; 
     $updated_grade = mysql_query($update_grade); 
     $is_updated = mysql_affected_rows(); 
     echo "update set grade = '$y' where sid = '$sid' AND subj_id = '$s' AND term = '$term' AND tid = $uid"; 
    } else { 
     $update_grade = "insert into student_friggin_grades(`sid`, `subj_id`, `term`, `grade`, `tid`, `date_added`, `date_updated`) 
       values('$sid', '$s', '$term', '$y', $uid, NOW(), NOW())"; 
     $updated_grade = mysql_query($update_grade); 
     $is_updated = mysql_affected_rows(); 
    } 
} 

if($is_updated > 0) { 
    header("Location: show_grades.php?sid=$sid"); 
} 
?> 

$ xを想定し、私を助けてください

XXXXXXXXXXXXXXXX

+3

回答を受け入れない場合、私はあなたを助けるインセンティブがありません。 – Phil

+0

あなたはmysql注入の危険性を認識していますか? – Nobody

+0

私の質問はmysqlの注入についてではありません。これは単なるローカルアプリケーションです。 。 。 – easyb

答えて

1

は6に等しく、あなたは1から6までを横断する場合、

for($i=0; $i<=$x; $i++) { 

はあなたに6 0〜を与えます

for($i=1; $i <= $x; $i++) { 

しかし、$ xが実際に5と等しい場合を除いて、6を見なかった理由はこれには当てはまりません。

+0

ええ、あなたはそのことには正しかった...しかし、大きな問題はまだ答えられていませんでした。 – easyb

+0

これは何ですか?なぜxが5か、xが6であるのに、最後に挿入されたレコードが表示されないのですか? – rlemon

+0

IDがレコード0 => id 1、レコード1 => id 2、ect ... '($ i = 0; $ i <= $ x; $ i ++){' ($ i = 0; $ i <$ x; $ i ++){'結果セットは0から始まるインデックスの配列です。したがって、$ _POST [ 'subj_id _' $ I。]; '...ので、' $ _POST [ 'subj_id _'($ I + 1)。];; 'は' $ _POST [ 'subj_id_0']で始まる、実際には ' – rlemon

1

1ベースのゼロベースですか? 最後のレコードの前に終了するループがあると思いますか?

+0

私は私はsubjのIDに依存する必要があるかわからないが、私のforループでは、それが取る最大サイクルの数を数えているが、それは正しい軌道に私を導いていない... – easyb

関連する問題