2017-11-23 2 views
0

SQL SERVERテーブルに値を挿入するとき、私のPHPスクリプトに何か問題があります。AUTO INCREMENTテーブルがSQL ServerのPHPで配列としてインデックス付けされないようにするにはどうすればいいですか?

ここではスクリプトです:私はそのスクリプトを実行すると、サーバーにデータを挿入することに成功している

<?php 

include_once 'core/init.php'; 

function report_cctv(){ 

#info utama seluruh fungsi 
global $conn; 
$notif = ''; 

#data input laporan pelanggaran 
$array_pelanggaran = [$_POST['w'], 
         $_POST['n'], 
         $_POST['j'], 
         $_POST['l'], 
         $_POST['b']]; 
$data_pelanggaran = "'" . implode("','", $array_pelanggaran) . "'"; 

#data input laporan kerusakan 
$array_kerusakan = [$_POST['w2'], 
        $_POST['n2'], 
        $_POST['j2'], 
        $_POST['l2'], 
        $_POST['b2']]; 
$data_kerusakan = "'" . implode("','", $array_kerusakan) . "'"; 

#data input laporan lain 
$array_lain = [$_POST['w3'], 
       $_POST['n3'], 
       $_POST['j3'], 
       $_POST['l3'], 
       $_POST['b3']]; 
$data_lain = "'" . implode("','", $array_lain) . "'"; 

//query laporan pelanggaran 
$query = "INSERT INTO pelanggaran VALUES ($data_pelanggaran)"; 
//query laporan kerusakan 
$query2 = "INSERT INTO laporan_kerusakan VALUES ($data_kerusakan)"; 
//query laporan lain 
$query3 = "INSERT INTO laporan_lain VALUES ($data_lain)"; 


if(strlen(isset($data_pelanggaran)) > 0) { 
    sqlsrv_query($conn,$query); 

    if (strlen(isset($data_kerusakan)) > 0) { 
    sqlsrv_query($conn,$query2); 

     if (strlen(isset($data_lain)) > 0) { 
     sqlsrv_query($conn,$query3); 
     }else { 
     echo "data lain gagal diinput"; 
     } 

    }else { 
    echo "data kerusakan gagal diinput"; 
    } 

}else { 
    echo "data pelanggaran gagal diinput"; 
} 

} 

?> 

が、IDテーブルは、私は別のテーブルにそれらの配列を挿入したのも、値を自動的に追加されます空のフィールドを持つ他のテーブルを無視します。

これが最初のデータである、私は「laporan_kerusakan」テーブルにそれを挿入:

この写真を見て、id列を参照してください、それが正常に設定し、1

please look at this pic and see the id column, it was set normally and starts from 1

から開始しました。

しかし、私は別のテーブルに新しいデータを挿入する場合、IDは、それが配列として最初のID値を保存し、2

IDとして他のテーブルにそれを挿入することを意味し、もう1で開始しません2aから始まった他のテーブル。

ID started from 2 at the other table

この現象が発生している理由誰もが、してください説明できますか?また、この問題を解決するソリューションはありますか?私はせずにページ上の唯一の1つのボタンで各フォーム上のデータを挿入したい

..

EDITを

は前にどうもありがとうございました、と私は私の悪い話すごめんなさい自動インクリメント値を持つ他のテーブルに影響を与えます。

例:

私は上記の最初の絵のような最初の値を挿入しています、と私は他のテーブルに他のデータを挿入します。

しかし、2回目の送信ボタンをクリックすると、結果は上記の2番目の画像に似ています。 ID列は「1」ではなく「2」で開始されました。それを修正するには?

はここで前に要求されるように私のSQLテーブル作成スクリプトだ、と私は英語の言語にインドネシアからフィールド名をtrnaslated:

use dailyreport 

/* table pelanggaran (violation table) */ 
create table pelanggaran(
    id int identity(1,1) primary key not null, 
    violation_time varchar(5), 
    violation_suspect varchar(100), 
    id_type_of_violation int, 
    id_store_location int, 
    screenshot_proof text 
); 

/* table laporan_kerusakan (damage_report) */ 
create table laporan_kerusakan(
    id int identity(1,1) primary key not null, 
    damaged_time varchar(5), 
    damage_detail varchar(100), 
    id_type_of_damaged_things int, 
    id_damaged_things_location int, 
    screenshot_proof text 
); 

/* table laporan_lain (other_report) */ 
create table laporan_lain(
    id int identity(1,1) primary key not null, 
    other_time varchar(5), 
    other_detail varchar(100), 
    id_other_report int, 
    id_other_report_location int, 
    screenshot_proof text 
); 
+0

あなたの問題は明確ではありません、あなたはより良く説明できますか?テーブル内の同じIDを持つ行を持つことはできません。自動的にインクリメントする列は自動的に増加します。あなたが説明していない別のテーブル間に関係がありますか? – miken32

+0

テーブルを定義したら、IDをどのように定義しましたか?テーブルの作成に使用される構文を表示してください。これは何が起こっているのかを説明します。 *ただし、IDが同じオブジェクトを表すため、IDが2つのテーブル間で一意である必要がある場合は、外部キーを使用し、IDを同じにする必要はありません。 – Nic3500

答えて

0

最後に、私のスクリプトで編集した後、私は問題自体を見つけました。

私がする必要があるのは、スクリプトから!empty関数を削除するだけで、ボタンをクリックすると同時にすべてのクエリが実行されないようにするための条件を与えることです。 idが正常に挿入されないのは、ボタンがサブミットされたときにクエリ全体が実行されているためです。配列の,および'の記号が文字列として検出されます。

これは、コードの修正である:

<?php 

include_once 'core/init.php'; 

function report_cctv(){ 
error_reporting(0); 



#info utama seluruh fungsi 
global $conn; 
$notif = ''; 

#data input laporan pelanggaran 
$array_pelanggaran = [$_POST['w'], 
         $_POST['n'], 
         $_POST['j'], 
         $_POST['l'], 
         $_FILES['upload']['name'][0]]; 
$data_pelanggaran = "'" . implode("','", $array_pelanggaran) . "'"; 

#data input laporan kerusakan 
$array_kerusakan = [$_POST['w2'], 
        $_POST['n2'], 
        $_POST['j2'], 
        $_POST['l2'], 
        $_FILES['upload']['name'][1]]; 
$data_kerusakan = "'" . implode("','", $array_kerusakan) . "'"; 

#data input laporan lain 
$array_lain = [$_POST['w3'], 
       $_POST['n3'], 
       $_POST['j3'], 
       $_POST['l3'], 
       $_FILES['upload']['name'][2]]; 
$data_lain = "'" . implode("','", $array_lain) . "'"; 


    /* Script to test the result of the inserted values */ 
    // echo "<br />"; 
    // var_dump($data_pelanggaran); echo "<br />"; 
    // var_dump($data_kerusakan); echo "<br />"; 
    // var_dump($data_lain); echo "<br />"; exit(); 


//query laporan pelanggaran 
$query = "INSERT INTO pelanggaran VALUES ($data_pelanggaran)"; 
//query laporan kerusakan 
$query2 = "INSERT INTO laporan_kerusakan VALUES ($data_kerusakan)"; 
//query laporan lain 
$query3 = "INSERT INTO laporan_lain VALUES ($data_lain)"; 



/* Data insert functions */ 
if(strlen($data_pelanggaran) > 14) { 
    sqlsrv_query($conn,$query); 

    /* Script for testing which queries are running */ 
    // print_r('<br /><div class="text-center"><h1>TESTING INPUT DATA : DATA PELANGGARAN</h1><br /><h2 style="font-weight:bold;">'. $data_pelanggaran .'</h2></div>'); 
    // echo '<br /><div class="text-center"><p style="font-weight:bold;">Jumlah string <b>data pelanggaran</b> yang terbaca adalah : '. strlen($data_pelanggaran) .'</h2></div>'; 
} 

if (strlen($data_kerusakan) > 14) { 
    sqlsrv_query($conn,$query2); 
    // print_r('<br /><div class="text-center"><h1>TESTING INPUT DATA : DATA KERUSAKAN</h1><h2 style="font-weight:bold;">' . $data_kerusakan .'</h2></div>'); 
    // echo '<br /><div class="text-center"><br /><p style="font-weight:bold;">Jumlah string <b>data kerusakan</b> yang terbaca adalah : '. strlen($data_kerusakan) .'</h2></div>'; 
} 

if (strlen($data_lain) > 14) { 
    sqlsrv_query($conn,$query3); 
    // print_r('<br /><div class="text-center"><h1>TESTING INPUT DATA : DATA LAIN</h1><br /><h2 style="font-weight:bold;">' . $data_lain .'</h2></div>'); 
    // echo '<br /><div class="text-center"><p style="font-weight:bold;">Jumlah string <b>data lain</b> yang terbaca adalah : '. strlen($data_lain) .'</h2></div>'; 
} 


} 




?> 

は、ヘルプみんなのためにどうもありがとうございます!

よろしくお願いいたします。

0

あなたが自動増加列を持っている、

あなたが所定の位置にNULLを使用することができます -

//query laporan pelanggaran 
$query = "INSERT INTO pelanggaran VALUES (NULL ,$data_pelanggaran)"; 
//query laporan kerusakan 
$query2 = "INSERT INTO laporan_kerusakan VALUES (NULL ,$data_kerusakan)"; 
//query laporan lain 
$query3 = "INSERT INTO laporan_lain VALUES (NULL ,$data_lain)"; 

その他の場合、挿入順序が列の順序と同じでない場合、データが挿入されます間違っているか、エラーがスローされます。

これが役に立ちます。

+0

アドバイスをいただきありがとうございます、私はすでにそれを試みましたが、それは問題を解決しません。データを挿入しようとするとNULLが追加されても、何も表示されず、データが挿入されず、エラー通知も表示されません。 –

+0

"INSERT INTOテーブル(col1、col2、..)の値(value1、value2、..)"を試してみてください。これは、各インサートで列名と値を順番に指定することです。 –

+0

同じ結果ですが、IDはまだ最後に挿入された値から開始しています... –

関連する問題