2017-06-25 12 views
-1

最後のIDに1を追加しようとしています。最後のIDが6だった場合は、次のID値7を作成する1を追加したいと思います。このエラーが発生した時点で、キー 'PRIMARY'のエントリが重複しています。何がうまくいかないの?キー 'PRIMARY'の重複エントリ '1'何がうまくいかないのですか?

  <?php 
      require_once 'connect.php'; 
      if (isset($_POST['reg'])){ 
         $dob = $_POST['date']; 
         $Student_ID = $_POST['Student_ID']; 
         $gender = $_POST['gender']; 
         $course = $_POST['Course']; 
         $email = $_POST['inputEmail']; 
         $password = $_POST['inputPassword']; 
         $FN = $_POST['FirstName']; 
         $SN = $_POST['SecondName']; 

         $cur_ID = "SELECT MAX(ID) + 1 FROM `tblaccounts`"; 
         $IDresult = mysqli_query($connection, $cur_ID) or die("Database Connection Failed" . mysqli_error($connection)); 
         $IDcount = mysqli_num_rows($IDresult); 
         $id = $IDcount; 

        $sql = "INSERT INTO tblaccounts (Email, Password, Student_ID, ID, FirstName, SecondName, Course, Gender, DoB) VALUES ('".$email."','".$password."','".$Student_ID."','".$id."','".$FN."','".$SN."','".$course."','".$gender."','".$dob."')"; 
        $result = mysqli_query($connection, $sql) or die("Database Connection Failed" . mysqli_error($connection)); 
        $count = mysqli_num_rows($result); 

      if ($count == 1){ 
        echo "Account created!"; 
        header('Location: profile.php'); 
        //session_start(); 
        //$id = session_id(); 
        $cookie_name = "user"; 
        $cookie_value = $username; 
        setcookie($cookie_name, $cookie_value); 

        //$result2 = mysqli_query($connection, "SELECT Student_ID FROM `tblaccounts` WHERE Email='$username'"); 
        $row2 = mysqli_fetch_assoc($userid); 
        $cookie_name2 = "userID"; 
        $cookie_value2 = $userid['Student_ID']; 
        setcookie($cookie_name2, $cookie_value2); 
       } else { 
        echo "Login Failed!:";# 
        ?><br/><a href ="login.php">Go back to the login screen.</a><?php 
       } 
      } 
      ?> 
+0

ヘッダーの前にも出力していますが、それを知っていますか? –

答えて

0

これはコメントには長すぎます。

まず、クエリ文字列にパラメータ値を追加しないでください。適切なパラメータの使用方法を学びます。これにより、予期しない構文エラーを防止します。また、SQLインジェクション攻撃から保護します。 SQLを使用してプログラミングすることを学んでいるなら、それを正しく行うことを学ぶことが重要です。

第2に、idsを増分しないでください。 MySQL(と基本的に他のすべてのデータベース)は自動インクリメントIDをサポートしています。 MySQLでは、これを次のように宣言します:

create table tblaccounts (
    accountid int auto_increment primary key, 
    . . . 

データベースを持っていると作業が非常に重要になります。これにより、値が常に正しく設定されます。同時に2つのスレッドを挿入している場合は、たとえコードが1つのスレッドに対して「正しく」書かれていても、同じ値を得ることができます。

+0

mysqlに答える/コメントすることだけに関するノートを追加してください。具体的にはヘッダーの前に出力する。今度は、私は正しいです。 ;-) –

関連する問題