0

プログラムの実行中にエラーが重複したいだけです。

ユーザーが既に学生を登録している場合 ( studIdandが一致syする場合)、「You already done the registration.」のようなエラーが表示されるという条件を作成しました。それ以外の場合は、挿入クエリを実行します。私のテーブルにstudId(c-1111)&を挿入したのsy(2011)は、たとえば、古い学生が登録されている場合ですが、私の状況では、[生成して保存] ボタンをクリックするsyと、2013 である場合でも常にエラー メッセージが表示されます。 studIdc-1111と同じ。これが私のコードです。私のプログラムを解決するのを手伝ってください。

       for($i=0; $i <= $row->studId; $i++){           
        $generated_pass = genpass($i);
        echo "<td>$generated_pass</td>";
        $year = date("Y");
        $info = $mysqli->query("SELECT studId, sy FROM tbl_student WHERE
                    studId='".$row->studId."' AND sy= '$year'");
        if($info){
            echo "<script type='text/jscript'>
        alert('You already did the enrollment.')
        window.location='admin.php';</script>";
            }
        else {
        $insert = $mysqli->query("INSERT IGNORE INTO  tbl_student (studId,
                    fname,  lname, mname, password, dob, address, f_fname, f_mname,
                    f_lname, m_fname, m_mname, m_lname, departmentId, sy) VALUES 
                    ('".$row->studId."', '".$row->fname."', '".$row->lname."', 
                    '".$row->mname."', '".md5($generated_pass)."', '".$row->dob."', 
                    '".$row->address."', '".$row->f_fname."', '".$row->f_mname."', 
                    '".$row->f_lname."', '".$row->m_fname."', '".$row->m_mname."', 
                    '".$row->m_lname."', '".$row->departmentId."', '".$row->sy."')");
                }
                    }
4

2 に答える 2

0

スタッド ID と sy が一意のキーであるという MySQL テーブル制約を追加するオプションはありますか? そうすれば、重複を挿入するクエリは失敗し、PHP は処理可能なエラーを取得します。

編集: IGNORE キーワードは、基本的に制約が尊重されないように要求するため、上記を機能させるには削除する必要があります。http://dev.mysql.com/doc/refman/5.1/en/constraint-primary-key.html

于 2013-02-20T11:36:08.607 に答える
0

何をデバッグしてください

$info = $mysqli->query("SELECT studId, sy FROM tbl_student WHERE studId='".$row->studId."' AND sy= '$year'"); 

$info が返されます。その場合、空の配列が返される可能性があります。if($info) が機能しない場合は、empty()etcで確認する必要があります。

于 2013-02-20T11:42:49.253 に答える